属性指示符序列(C++11 起)
来自cppreference.com
介绍由实现定义的类型、对象、代码等属性。
[[
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)[编辑] 标准属性
只有以下两个属性被定义为C++标准。任何其它的属性是特定于实现.
[[noreturn]]
|
表示该函数不返回。 此属性只适用于函数声明。如果带有该属性的函数真的返回了,那么行为是未定义的。 以下的标准函数有此属性:std::_Exit,std::abort,std::exit,std::quick_exit,std::unexpected,std::terminate,std::rethrow_exception,std::throw_with_nested,std::rethrow_nested |
[[carries_dependency]]
|
表示依赖关系链中释放消耗std::memory_order中传播的功能,它允许编译器跳过不必要的内存栅栏instructions. This属性中可能会出现两种情况: 1)适用于声明一个函数或lambda表达式的参数,在这种情况下,表示初始化的参数进行依赖的左值到右值的转换,object. |
[编辑] 示例
本章尚未完成 原因:暂无示例 |