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