在C++ 11中添加了override说明符和final说明符.它们与添加到C++ 11中的其他说明符(例如constexpr和decltype)不同,因为它们不是关键字,因此可用作标识符:
int main()
{
int override = 0 ; // Ok
int final = 0 ; // Ok
//int constexpr = 0 ; // Error
}
Run Code Online (Sandbox Code Playgroud)
它们被称为具有特殊含义的标识符,在C++ 11标准部分2.11
[lex.name](强调我的)草案中有所涉及:
表3中的标识符在出现在特定上下文中时具有特殊含义.当在语法中引用时,显式地使用这些标识符而不是使用标识符语法生成.任何关于给定标识符是否具有特殊含义的歧义都被解析为将该标记解释为常规标识符.
和表3 - 具有特殊含义列表的标识符都覆盖和最终.
为什么这两个说明符最终成为具有特殊含义的标识符而不是关键字?
我有一些代码具有可选的内置代码,试图检测C++ 0X.让我假装这是有效的(讨论有多糟糕,如何不跨越平台超出这个问题的范围).让我们说它有一个#define DETECTCXX0X
.iff它是C++ 0X.
这样做有多糟糕:
#ifndef DETECTCXX0X
#define override
#endif
Run Code Online (Sandbox Code Playgroud)
你还有其他选择吗?
(我想正确的做法是不使用显式覆盖).