什么时候“和”成为C ++中的运算符

时间:2010-03-10 19:16:02

标签: c++ g++

我有一些看起来像的代码:

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 ++的消息

7 个答案:

答案 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年版)。备用令牌包括:andorxornotbitandbitorcompl,{{1 }},and_eqor_eqxor_eqnot

答案 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_eqorcomplnot仅列出选择。

答案 6 :(得分:3)

添加它们是因为其中一些字符很难在某些键盘上输入。