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

来自cppreference.com
< cpp‎ | language
 
 
C++语言

|- class="t-nv-h1" | colspan="5" | 一般主题 |- | |- |

预处理器
注释

|

|-

|- class="t-nv-h1" | colspan="5" | 流程控制 |-

条件执行语句

| |- |

|

|-

循环语句

| |- |

|

|-

跳转语句

| |- |

|

|-

|- class="t-nv-h1" | colspan="5" | 函数 |-

函数声明 Lambda函数声明 inline说明符 异常说明符 (已弃用) noexcept说明符 (C++11)

|- class="t-nv-h1" | colspan="5" | Exceptions |- | |- |

|

|-

|- class="t-nv-h1" | colspan="5" | 命名空间 |- | |- |

|

|-

|- class="t-nv-h1" | colspan="5" | 类型 |- | |- |

|

|-

说明符

| |- |

decltype (C++11)
auto (C++11)
alignas (C++11)

|

|-

存储持续期说明符 Initialization

| |- |

|

|-

|- class="t-nv-h1" | colspan="5" | 表达式 |- | |- |

值类别
求值顺序

|

|-

替代表示 字面量 布尔型 - 整型 - 浮点型 字符型 - 字符串 - nullptr (C++11) 用户定义 (C++11)

|- class="t-nv-h1" | colspan="5" | Utilities |-

属性 (C++11) Types typedef声明 类型别名声明 (C++11) Casts 隐式类型转换 - 显示类型转换 static_cast - dynamic_cast const_cast - reinterpret_cast 内存分配

| |- |

|

|-

|- class="t-nv-h1" | colspan="5" | 类 |- | |- |

|

|-

类特有的函数属性

| |- |

|

explicit (C++11)
static

|-

静态成员函数

| |- |

|

|- |- class="t-nv-h1" | colspan="5" | 模板 |- | |- |

|

|- |- class="t-nv-h1" | colspan="5" | 杂项 |- | |- |

|

|-

 

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

[[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)适用于作为一个整体,在这种情况下,它的返回值进行依赖的函数调用表达式的评价函数的声明.

[编辑] 示例

来自“http://zh.cppreference.com/mwiki/index.php?title=cpp/language/attributes&oldid=38187