C++ 属性: maybe_unused (自 C++17 起)
来自 cppreference.com
抑制对未使用的实体的警告。
内容 |
[编辑] 语法
[[maybe_unused]]
|
|||||||||
[编辑] 解释
此属性可以出现在以下实体的声明中
- 类/结构体/联合体:struct [[maybe_unused]] S;
- typedef,包括由 别名声明 声明的那些:[[maybe_unused]] typedef S* PS;,using PS [[maybe_unused]] = S*;
- 变量,包括 静态数据成员:[[maybe_unused]] int x;
- 非静态数据成员:union U { [[maybe_unused]] int n; };,
- 函数:[[maybe_unused]] void f();
- 枚举: enum [[maybe_unused]] E {};
- 枚举器: enum { A [[maybe_unused]], B [[maybe_unused]] = 42 };
- 结构化绑定: [[maybe_unused]] auto [a, b] = std::make_pair(42, 0.23);
对于声明为 [[maybe_unused]] 的实体,如果实体或其结构化绑定未被使用,则编译器发出的关于未用实体的警告将被抑制。
对于声明为 [[maybe_unused]] 的标签,如果它们未被使用,则编译器发出的关于未用标签的警告将被抑制。 |
(自 C++26 起) |
[编辑] 示例
运行此代码
#include <cassert> [[maybe_unused]] void f([[maybe_unused]] bool thing1, [[maybe_unused]] bool thing2) { [[maybe_unused]] lb: // the label “lb” is not used, no warning [[maybe_unused]] bool b = thing1 && thing2; assert(b); // in release mode, assert is compiled out, and “b” is unused // no warning because it is declared [[maybe_unused]] } // parameters “thing1” and “thing2” are not used, no warning int main() {}
[编辑] 缺陷报告
以下行为改变的缺陷报告已追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 发布的行为 | 正确的行为 |
---|---|---|---|
CWG 2360 | C++17 | 无法将 [[maybe_unused]] 应用于结构化绑定 | 允许 |
[编辑] 参考资料
- C++23 标准 (ISO/IEC 14882:2024)
- 9.12.8 可能是未使用的属性 [dcl.attr.unused]
- C++20 标准 (ISO/IEC 14882:2020)
- 9.12.7 可能是未使用的属性 [dcl.attr.unused]
- C++17 标准 (ISO/IEC 14882:2017)
- 10.6.6 可能是未使用的属性 [dcl.attr.unused]
[编辑] 参见
C 文档 for maybe_unused
|