在gcc/g ++ 4.9下我可以写:
int x __attribute__((unused)) = f();
Run Code Online (Sandbox Code Playgroud)
表示x是故意未使用的.
是否有可能以[[]]某种方式使用C++ 11 属性表示法?
我试过了:
int x [[unused]] = f();
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
(是的,我知道它是一个实现定义的属性.)
Ala*_*kov 13
[[maybe_unused]]C++ 17中有属性.它在GCC 7中实现,请参阅GCC中的C++标准支持.
P0212R1提案示例:
[[maybe_unused]] void f([[maybe_unused]] bool thing1,
[[maybe_unused]] bool thing2) {
[[maybe_unused]] bool b = thing1 && thing2?
assert(b)?
}
Run Code Online (Sandbox Code Playgroud)
Mat*_*jek 10
你所指的东西称为属性说明符.它试图标准化各种依赖于平台的说明符:
__attribute__如果是GCC/ICC(Linux)__declspec在MSVC/ICC上(Windows)正如您在附加的文档链接中看到的那样,C++ 11中唯一支持的说明符是:
[[noreturn]][[carries_dependency]]在C++ 14中:
[[deprecated]](也支持如:[[deprecated("reason")]])所以答案是:不,这是不可能的,仅使用C++ 11功能.
如果你没有兴趣只在便携式解决方案,有可能是一个办法.C++标准不限制此列表:
C++标准仅定义了以下属性.所有其他属性都是特定于实现的.
各种编译器可以支持一些非标准的说明符.例如,您可以阅读此页面以了解Clang支持的内容:
[[gnu::unused]]也许您的GCC版本也支持此说明符.此页面包含一个引用广义属性支持的错误报告.[[gnu::unused]]也提到了.