我刚读过Reddit的这篇精彩文章.
他们提到and
,并or
成为"替代令牌",以&&
和||
到目前为止我真的没有意识到这些.当然,每个人都知道的二图和三图表,但and
和or
?从何时起?这是标准的最新成员吗?
我刚刚使用Visual C++ 2008进行了检查,它似乎并没有将这些视为语法错误.这是怎么回事?
从C++ 11标准来看,2.6/ Alternative tokens
:
为某些运营商和标点符号提供了替代令牌表示.
在语言的所有方面,除了拼写之外,每个备选令牌的行为分别与其主令牌相同.表2中定义了替代令牌集.
表2 - 替代代币
alternative primary | alternative primary | alternative primary
--------------------+---------------------+--------------------
<% { | and && | and_eq &=
%> } | bitor | | or_eq |=
<: [ | or || | xor_eq ^=
:> ] | xor ^ | not !
%: # | compl ~ | not_eq !=
%:%: ## | bitand & |
仅当您使用/Za
禁用扩展的选项时,MSVC才支持它们作为关键字; 这至少从VC7.1(VS2003)开始.
您可以通过包含来支持它们作为宏iso646.h
.
我的猜测是他们认为默认情况下将它们设为关键字会破坏现有代码(如果它们是正确的话我也不会感到惊讶).
几个星期前在这里的一个问题上讨论了这个问题,但是我无法通过SO的搜索或谷歌找到该死的东西.
要真正回答这个问题:
它们是在第一个C++标准中定义的.