不能使用"not","or"或"plus"作为标识符?

rub*_*nvb 12 c++ reserved-words keyword c++11

我试着编译这个:

enum class conditional_operator { plus, or, not };
Run Code Online (Sandbox Code Playgroud)

但显然GCC(4.6)认为这些是特殊的,而我找不到一个说它们的标准(C++ 0x n3290或C99 n2794).我正在编译g++ -pedantic -std=c++0x.这是编译器的便利吗?我该如何关闭它?不应该-std=c++0x关闭这个"功能"?

PS:嗯,显然,MarkDown代码格式化也是如此......

APr*_*mer 15

看看2.5.它们是替代令牌||!.

还有一堆其他替代令牌BTW.

编辑:包含它们的基本原理与三字符相同:允许使用非ASCII字符集.该委员会试图摆脱它们(至少是三字母,我不记得替代令牌),并且遇到了使用它们的人(主要是IBM大型机用户)的反对.

编辑完整性:正如其他人发表评论一样,加上不在该类中,除非你是,否则不应该成为问题using namespace std.


Jon*_*eet 7

这些实际上奇怪地定义为替代令牌(和保留),作为运营商的替代表示.我相信这最初是为了帮助那些使用键盘使得相关符号很难产生的人,虽然这似乎是一个非常糟糕的理由在语言中添加额外的关键词:(

可能是GCC编译器选项禁用它们,但我不知道.

(正如评论中所提到的,plus除非你使用std命名空间,否则应该没问题.)


CB *_*ley 5

ornot是的可选表示||!分别.你无法关闭它们,你不能将这些令牌用于其他任何东西,它们是语言的一部分(当前的C++,甚至不仅仅是C++ 0x).(参见ISO/IEC 14882:2003 2.5 [lex.digraph]和2.11 [lex.key]/2.)

你应该安全,plus除非你使用using namespace std;using std::plus;.