C++ 属性: maybe_unused (C++17 起)

来自cppreference.com
< cpp‎ | language‎ | attributes


 
 
C++ 语言
 
 
属性
(C++23)
(C++14)
(C++20)
maybe_unused
(C++17)
(C++17)
(C++11)
(C++20)
 

抑制针对未使用实体的警告。

语法

[[maybe_unused]]

解释

此属性可出现在下列实体的声明中:

对于声明为 [[maybe_unused]] 的实体,如果没有使用这些实体或它们的结构化绑定,那么编译器针对未使用实体发布的警告会被抑制。

对于声明为 [[maybe_unused]] 的标签,如果没有使用这些标签,那么编译器针对未使用标签发布的警告会被抑制。

(C++26 起)

示例

#include <cassert>
 
[[maybe_unused]] void f([[maybe_unused]] bool thing1,
                        [[maybe_unused]] bool thing2)
{
    [[maybe_unused]] lb: // 未使用标签 “lb”,无警告
    [[maybe_unused]] bool b = thing1 && thing2;
    assert(b); // 发行模式中,assert 在编译中被去掉,因而未使用 “b”
               // 无警告,因为它被声明为 [[maybe_unused]]
} // 未使用参数 “thing1” 与 “thing2”,无警告
 
int main() {}

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
CWG 2360 C++17 不能应用 [[maybe_unused]] 到结构化绑定 可以应用

引用

  • C++23 标准(ISO/IEC 14882:2024):
  • 9.12.8 Maybe unused attribute [dcl.attr.unused]
  • C++20 标准(ISO/IEC 14882:2020):
  • 9.12.7 Maybe unused attribute [dcl.attr.unused]
  • C++17 标准(ISO/IEC 14882:2017):
  • 10.6.6 Maybe unused attribute [dcl.attr.unused]

参阅