6.7.13.2 一般规定
语法
属性说明符序列由一个或多个属性说明符组成。
单个属性说明符写作:
c
[[ attribute-list ]]1
- 属性本身由:
- 属性记号;
- 以及可选的属性参数子句
组成。
属性记号又分为:
- 标准属性:
identifier - 带前缀属性:
attribute-prefix :: identifier
- 标准属性:
属性参数子句写作一对圆括号,其中可放平衡记号序列。
约束
- 标准属性名只能是以下之一:
deprecatedfallthroughmaybe_unusednodiscardnoreturn_Noreturnreproducibleunsequenced
语义
空属性说明符没有效果。
同一个属性列表里,属性记号的顺序不重要。
若某个关键字在属性记号位置上满足标识符的语法要求,那么它在这里按标识符解释。
一个严格符合标准的程序即使使用了标准属性,在把这些标准属性忽略后,仍然应保持严格符合。
这也是标准属性与实现自定义属性的重要区别:标准属性可以被安全解析后忽略,而非标准属性未必可以。
推荐实践
实现自定义属性时,应当为属性前缀选择一个足够独特的名字。
除标准属性外,实现不应定义“没有前缀”的属性。
两点阅读提醒
属性列表内部的顺序通常不重要。
但多个独立属性说明符之间的先后顺序,可能影响语义;标准示例明确强调了这一点。