pax*_*blo 32
从C++ 11标准来看,2.6/ Alternative tokens:
表2 - 替代代币
alternative primary | alternative primary | alternative primary
--------------------+---------------------+--------------------
<% { | and && | and_eq &=
%> } | bitor | | or_eq |=
<: [ | or || | xor_eq ^=
:> ] | xor ^ | not !
%: # | compl ~ | not_eq !=
%:%: ## | bitand & |
Run Code Online (Sandbox Code Playgroud)
Mic*_*urr 23
仅当您使用/Za禁用扩展的选项时,MSVC才支持它们作为关键字; 这至少从VC7.1(VS2003)开始.
您可以通过包含来支持它们作为宏iso646.h.
我的猜测是他们认为默认情况下将它们设为关键字会破坏现有代码(如果它们是正确的话我也不会感到惊讶).
几个星期前在这里的一个问题上讨论了这个问题,但是我无法通过SO的搜索或谷歌找到该死的东西.
请参阅 C++ 标准。委员会草案#2 可在以下网址免费获得ftp://ftp.research.att.com/dist/c++std/WP/CD2/body.pdf,虽然它是非权威的、过时的,并且在一些地方部分不正确。具体来说,在第 2.5 节“替代令牌”中,定义了以下内容:
替代小学
<%{
%> }
<: [
:>]
%:#
%:%:##
和 &&
比特|
或 ||
异或^
补~
位元&
and_eq &=
or_eq |=
xor_eq ^=
不是 !
not_eq !=
尽管老实说,除了and、or、 和之外,我从未见过它们中的任何一个not,即使如此,这些也很少见。请注意,默认情况下,这些在普通 C 代码中是不允许的,仅在 C++ 中是允许的。如果您想在 C 中使用它们,您必须#define自己将它们作为宏,或者#includeheader <iso646.h>,它定义了上述所有内容,除了<% >% <: :> %: %:%:作为宏(参见 C99 标准的第 7.9 节)。