首页 > 编程语言 >c++新特性

c++新特性

时间:2024-07-10 15:31:36浏览次数:9  
标签:case ... 示例 代码 特性 编译器 c++ 属性

1. c++17新特性

[[fallthrough]] 属性:这个属性用于在switch语句中。通常,当switch语句的一个case执行完毕后,会自动跳转到switch语句的末尾,除非存在break语句。如果你想要故意从一个case“落入”(fall through)到下一个case,可以使用[[fallthrough]]属性来告诉编译器这是故意的行为,以避免编译器发出警告。

[[nodiscard]] 属性:这个属性可以用于函数或者返回类型。它的作用是告诉编译器:调用这个函数时,它的返回值不应被忽略。如果程序员调用了这样的函数但没有使用它的返回值,编译器会发出警告。这对于那些返回重要状态或错误码的函数特别有用。

[[maybe_unused]] 属性:此属性可以用于声明变量、函数、类型等。它告诉编译器,即使这个实体(变量、函数等)没有被使用,也不应该产生未使用的警告。这在编写可能在某些情况下不使用但在其他情况下使用的代码时很有用。

[[deprecated]] 属性:这个属性用于标记变量、函数、类型等已经被弃用。当其他代码尝试使用被标记为弃用的实体时,编译器会发出警告。这通常用于代码库的迁移和升级,提示开发者某些功能在未来的版本中可能会被移除或更改。

2. 示例

当然可以。下面我将为每个属性提供一个简单的示例:

[[fallthrough]] 属性示例:

switch (value) {
    case 1:
        //... 一些代码 ...
        [[fallthrough]]; // 明确指出接下来会执行 case 2 的代码
    case 2:
        //... 一些代码 ...
        break;
    default:
        //... 一些代码 ...
        break;
}

[[nodiscard]] 属性示例:

[[nodiscard]] int computeValue() {
    return 42;
}

void example() {
    computeValue(); // 这里如果不使用返回值,编译器可能会警告
    int value = computeValue(); // 正确使用返回值
}

[[maybe_unused]] 属性示例:

void example([[maybe_unused]] int unusedParam) {
    // 这个函数的参数可能不会被使用
    //... 一些代码 ...
}

[[maybe_unused]] int unusedVariable = 10; // 这个变量可能不会被使用

[[deprecated]] 属性示例:

[[deprecated("Use newFunction() instead")]]
void oldFunction() {
    //... 一些代码 ...
}

void newFunction() {
    //... 一些代码 ...
}

void example() {
    oldFunction(); // 调用此函数时,编译器会发出弃用警告
    newFunction(); // 正确的函数调用
}

这些示例展示了如何在C++代码中使用这些属性。记住,这些属性的主要目的是提供额外的信息给编译器,帮助程序员写出更清晰、更安全的代码。

https://zhuanlan.zhihu.com/p/672646425

标签:case,...,示例,代码,特性,编译器,c++,属性
From: https://www.cnblogs.com/tryst/p/18294160

相关文章

  • UE C++获取本机IP地址
    UEC++获取本机IP地址开发环境UE5.2.1VisualStudio201916.11.19代码部分XXX.Build.cs文件添加以下依赖:PrivateDependencyModuleNames.AddRange(newString[]{"Sockets"}).cpp文件:#include"SockerSubsystem.h"voidGetIp(){ boolbBind=false; TSharedRef......
  • C++使用宏来判断当前编译期支持的C++标准版本的方法
       需要注意的是,很多时候,某个编译器的版本并不完整支持某个C++标准,比如VisualStudio2010SP1,虽然支持了部分C++11的能力,但是依然有很多C++11的特性是不支持的。因此单纯通过C++标准的版本号来鉴别C++特性是否可用是并不完备的方法。具体支持情况可以参考这里。#ifdef_......
  • 《C++20设计模式》策略模式
    文章目录一、前言二、实现1、UML类图2、实现一、前言策略模式和状态模式实现方式一样,只是目的不同,如果会状态模式的这个也就可以随便看看啦。相关代码可以在这里,如有帮助给个star!AidenYuanDev/design_patterns_in_modern_Cpp_20二、实现1、UML类图2、实现#in......
  • 《C++设计模式》状态模式
    文章目录一、前言二、实现一、UML类图二、实现一、前言状态模式理解最基本上的我觉得应该也是够用了,实际用的话,也应该用的是Boost.MSM状态机。相关代码可以在这里,如有帮助给个star!AidenYuanDev/design_patterns_in_modern_Cpp_20二、实现一、UML类图二、实现#......
  • 《C++20设计模式》观察者模式
    一、前言观察者模式感觉真的很难,我这里就实现书上差不多的例子,供大家学习吧!相关代码可以在这里,如有帮助给个star!AidenYuanDev/design_patterns_in_modern_Cpp_20二、实现这里说一下观察者模式是干什么的。在实际中很有用,比如以下的例子。当股票价格变化时,自动通知所有......
  • JDK8的型特性
             Java8(又称为jdk1.8)是Java语言开发的一个主要版本。Oracle公司于2014年3月18日发布Java8,它支持函数式编程,新的JavaScript引擎,新的日期API,新的StreamAPI等。        jdk8的官网What'sNewinJDK8(oracle.com)   ......
  • 计算机毕业设计项目:18655 课程题库管理系统(开题答辩+程序定制+全套文案 )上万套实战教
    摘 要随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于课程题库管理系统当然也不能排除在外,随着网络技术的不断成熟,带动了课程题库管理系统,它彻底改变了过去传统的管理方式,不仅使服务管理难度变低了,还提升了管理的灵活性。这种个......
  • 计算机毕业设计项目: node.js 网上购物商城的设计与实现99525(开题答辩+程序定制+全套文
    摘 要随着社会的发展,计算机的优势和普及使得网上购物商城的开发成为必需。网上购物商城主要是借助计算机,通过对首页、站点管理(轮播图、公告栏)用户管理(管理员、注册用户)内容管理(商城资讯、资讯分类)商城管理(商城中心、分类列表、订单列表)等信息进行管理。减少管理员的工作......
  • 计算机毕业设计项目:校园新闻数据化系统的设计与实现 99293(开题答辩+程序定制+全套文案
    目 录摘要1绪论1.1研究目的和意义1.2选题背景和意义1.3系统开发技术的特色1.4springboot框架介绍1.5论文结构与章节安排22校园新闻数据化系统系统分析2.1可行性分析2.2系统流程分析2.2.1数据增加流程2.3.2数据修改流程2.3.3数据删除流程2.3......
  • C++类和对象(上篇)
    文章目录前言一、面向过程和面向对象初步认识二、类的引入三、类的定义六、类的实例化七、类的对象大小的计算八、类成员函数的this指针总结前言类和对象是面向对象编程的两个核心概念。类是一种抽象的数据类型,是描述对象共同特......