tow*_*owi 6 c++ attributes c++11
在N3291 "7.6.1.(3/5)属性语法和语义[decl.attr.grammar]"关于如何在源代码中编写属性我读了
有条件地支持使用属性范围的令牌,具有实现定义的行为.
和
对于未在本国际标准中指定的属性令牌,行为是实现定义的.
这是否意味着,属性规范如
[[ dllexport ]]
[[ hiding ]]
[[ unused ]]
[[ vendor::attrib ]]
Run Code Online (Sandbox Code Playgroud)
可能会被符合标准的编译器抱怨?那么,它可以报告错误并停止编译?
我希望编译器应该忽略它不知道如何处理它们的属性.好吧,这可能是危险的,因为属性拼写错误可能被忽视,例如[[ noretrun ]]或[[ carrys_dependencie ]]:-)
但特别是名称空间在这里会有所帮助,对吧?当我[[ gcc::mips ]]在Microsoft编译器上编译时,应该能够忽略它而不是拒绝它,对吧?
C++17 添加了一条显式声明,即忽略实现无法识别的属性。在 C++17 之前,所有属性行为都是实现定义的,因此实现可以执行任何操作。
属性规范的部分目的是让编译器制造商不再用特殊的语法和关键字使语言变得混乱。给他们一个单一的语法来指定这些东西。它是一种将编译器定义的字符串与特定对象或定义关联起来的方法。