Gab*_*les 5 c++ attributes c++11
我刚刚第一次遇到用方括号括起来的属性,并且我一直在做一些背景阅读:http ://en.cppreference.com/w/cpp/language/attributes 。
至少对于 gcc 来说,似乎允许使用多种技术:
__attribute__((some_attribute))
Run Code Online (Sandbox Code Playgroud)
和
[[some_attribute]]
Run Code Online (Sandbox Code Playgroud)
它是否正确?什么时候允许或不允许一种技术,首选或不首选?有什么不同?
看起来[[some_attribute]]只有 C++11 才允许,对吧?
根据N4659:
10.6.1 属性语法和语义 [dcl.attr.grammar]
属性指定各种源构造的附加信息,例如类型、变量、名称、块或翻译单元。
Run Code Online (Sandbox Code Playgroud)attribute-specifier-seq: attribute-specifier-seqopt attribute-specifier attribute-specifier: [ [ attribute-using-prefixopt attribute-list ] ] alignment-specifier
所以,[[...]]是一个标准化的语法。
相反,是扩展__attribute__ ((attribute-list))的语法:gcc
属性说明符的形式为
__attribute__ ((attribute-list)). 属性列表可能是一个以逗号分隔的空属性序列,其中每个属性都是以下之一:...
由于属性是在C++11中引入的,并且您使用gccC ++11支持(或更新版本),因此两种类型的语法都可供您使用。