属性指示符序列(C++11起)

来自cppreference.com
< cpp‎ | language
 
 
C++语言
表达式
替代表示
字面量
布尔型 - 整型 - 浮点型
字符型 - 字符串 - nullptr (C++11)
用户定义 (C++11)
Utilities
属性 (C++11)
Types
typedef声明
类型别名声明 (C++11)
Casts
隐式类型转换 - 显示类型转换
static_cast - dynamic_cast
const_cast - reinterpret_cast
内存分配
类特有的函数属性
静态成员函数
模板
杂项
 

介绍由实现定义的类型、对象、代码等属性。

[[attr]] [[attr1, attr2, attr3(args)]] [[namespace::attr(args)]] alignas_specifier

[编辑] 解释

属性提供了由实现定义的语言扩展的统一标准语法,例如GNU和IBM的语言扩展__attribute__((...)),微软扩展__declspec()等。

属性几乎可以在C++程序的任何地方使用,也可以适用于几乎任何的东西:类型、变量、函数、名称、代码、整个翻译单位,虽然每一个特定的属性仅当实现允许时才有效。[[probably(true)]]只能用于与if,而不是与类的声明。 [[omp::parallel()]]可以适用于一个代码块或一个for循环,但不适用于类型int等等。

在声明中,属性可能会出现在实体声明处之前和之后。它们是结合着的。在大多数其它情况下,属性适用于直接放在实体前。

alignas_specifier属性说明符序列的一部分,虽然它有不同的语法。它可能会出现的[[...]]属性的出现,可能与他们(提供alignas允许使用)混合
原文:
alignas_specifier is a part of the attribute specifier sequence, although it has different syntax. It may appear where the [[...]] attributes appear and may mix with them (provided it is used where alignas is permitted)
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

[编辑] 标准属性

只有以下两个属性被定义为C++标准。任何其它的属性是特定于实现.

[[noreturn]] 表示该函数不返回。
此属性只适用于函数声明。如果带有该属性的函数真的返回了,那么行为是未定义的。
以下的标准函数有此属性:std::_Exitstd::abortstd::exitstd::quick_exitstd::unexpectedstd::terminatestd::rethrow_exceptionstd::throw_with_nestedstd::rethrow_nested
[[carries_dependency]] 表示依赖关系链中释放消耗std::memory_order中传播的功能,它允许编译器跳过不必要的内存栅栏instructions.
This属性中可能会出现两种情况:

1)适用于声明一个函数或lambda表达式的参数,在这种情况下,表示初始化的参数进行依赖的左值到右值的转换,object.
2)适用于作为一个整体,在这种情况下,它的返回值进行依赖的函数调用表达式的评价函数的声明.

[编辑] 示例