我有一些看起来像的代码:
static const std::string and(" AND ");
这会导致g ++中出现错误:
Row.cpp:140: error: expected unqualified-id before '&&' token
所以在诅咒将“和”定义为“&&”的傻瓜之后,我添加了
#ifdef and
#undef and
#endif
现在我得到了
Row.cpp:9:8: error: "and" cannot be used as a macro name as it is an operator in C++
这导致我的问题是什么“和”成为C ++中的运算符?我找不到任何表明它的东西,当然除了g ++的消息
答案 0 :(得分:25)
从C ++ 03标准,第2.5节:
2.5替代代币
为某些运算符和标点符号提供了替代标记表示。在语言的所有方面,除了拼写之外,每个备选令牌的行为分别与其主令牌相同。表2中定义了替代令牌集。
表2 - 替代令牌
alternative primary
<% {
%> }
<: [
:> ]
%: #
%:%: ##
and &&
bitor |
or ||
xor ˆ
compl ˜
bitand &
and_eq &=
or_eq |=
xor_eq ˆ=
not !
not_eq !=
答案 1 :(得分:14)
他们自C ++ 98以来一直在那里。他们被列入标准的§2.5/ 2(1998年或2003年版)。备用令牌包括:and
,or
,xor
,not
,bitand
,bitor
,compl
,{{1 }},and_eq
,or_eq
,xor_eq
,not
。
答案 2 :(得分:9)
您可以使用-fno-operator-names
禁用此功能。或者,您可以将std::string
对象命名为其他内容!
答案 3 :(得分:8)
C ++中定义了several such alternatives。您可以使用开关来打开/关闭它们。
答案 4 :(得分:5)
根据C ++标准2.12,有预定义的预处理器令牌“用于
预处理器的语法或转换为运算符和标点符号的标记。“and
就是其中之一。在新的C ++标准中有新的2.12 / 2:
此外,表4中显示的某些操作符和标点符号(2.6)的替代表示是保留的,不得使用否则:
and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq
答案 5 :(得分:3)
我不知道它什么时候被引入,它可能从一开始就存在,但我相信它的原因是&&
替代{+ 1}}字符集有限的人,即他们不喜欢的地方实际上有&符号。
还有很多其他的例子。 and_eq
,or
,compl
和not
仅列出选择。
答案 6 :(得分:3)
添加它们是因为其中一些字符很难在某些键盘上输入。