c++新特性
一. c++17新特性
1. 属性
[[fallthrough]]
属性:这个属性用于在switch
语句中。通常,当switch
语句的一个case
执行完毕后,会自动跳转到switch
语句的末尾,除非存在break
语句。如果你想要故意从一个case
“落入”(fall through)到下一个case
,可以使用[[fallthrough]]
属性来告诉编译器这是故意的行为,以避免编译器发出警告。
[[nodiscard]]
属性:这个属性可以用于函数或者返回类型。它的作用是告诉编译器:调用这个函数时,它的返回值不应被忽略。如果程序员调用了这样的函数但没有使用它的返回值,编译器会发出警告。这对于那些返回重要状态或错误码的函数特别有用。
[[maybe_unused]]
属性:此属性可以用于声明变量、函数、类型等。它告诉编译器,即使这个实体(变量、函数等)没有被使用,也不应该产生未使用的警告。这在编写可能在某些情况下不使用但在其他情况下使用的代码时很有用。
[[deprecated]]
属性:这个属性用于标记变量、函数、类型等已经被弃用。当其他代码尝试使用被标记为弃用的实体时,编译器会发出警告。这通常用于代码库的迁移和升级,提示开发者某些功能在未来的版本中可能会被移除或更改。
当然可以。下面我将为每个属性提供一个简单的示例:
[[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
2.
二. c++14新特性
1. exchange函数简介
exchange是一个模板函数,用于将给定的值替换一个对象,并返回该对象的旧值。它的作用在于提供了一种简洁且线程安全的方式来更新对象的值。
template< class T, class U = T >
T exchange( T& obj, U&& new_value );
2.quoted函数
std::quoted是一个库函数,在C++11中引入的,用于将字符串括起来,以便后续输出时可以包含引号。它提供了一种简单的方式来格式化输出字符串。
三. C++11新特性
1. __has_include
一个C++11标准定义的宏,它的用途是检查指定的文件是否存在,从而决定是否继续编译。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了