运算符中的'+'和'='之间的空格+ =

时间:2012-01-09 14:10:43

标签: c++ c

考虑以下代码:

#include <iostream>

int main() 
{
   int iTemp = 0;

   iTemp += 1;     // Valid

   iTemp + = 1;   // This gives an error ( note the space between '+' and '=')

   return 0;
}

解析器是否应该自动消耗此空间并检查是否存在'=',因为'+ ='也是一个有效的令牌,而不是抛出错误?

同样地,我得到一个错误&lt; iostream&gt;

有人可以解释一下。

8 个答案:

答案 0 :(得分:12)

不,解析器不应该。语言的规范要求这种行为,这就是故事的结束。

答案 1 :(得分:8)

不起作用。
C编译的第一步是标记化 - 打破字符序列以分离语言元素。例如:
int x=333;成为列表intx=333;'。 完成后,编译器可以确定哪个令牌意味着什么以及如何组合它们。

如果标记化看到序列+=,它会生成一个标记。如果它看到空格,则会生成两个:+=

答案 2 :(得分:4)

不,不应该。解析器非常好但不会读取思想。它无法知道加号或等号是错误还是间距是错误。无论如何,整件事都是错误的。

答案 3 :(得分:3)

没有。 +=是一个令牌。 +=也分别是单个令牌。

答案 4 :(得分:3)

规范指定了+=运算符,而不是+ =运算符。所以答案是否定的。 while关键字不能替换为whi le,+ =

也是如此

答案 5 :(得分:3)

我记得,在黑暗时代,当op=代币具有替代变体=op时。因此x =+ 5x += 5的含义相同。当然,这是灾难性的,因为x=-5意味着x -= 5而不是x = -5。但即使在早期,这些复合代币也不允许包含空白区域。

答案 6 :(得分:3)

+,=和+ =是不同的运算符。因此,如果在+和=之间给出空格,则scan会将这些运算符标记为不同的运算符。因此,语法分析器(Parser)将产生语法错误。

答案 7 :(得分:0)

为什么会起作用?
如果您尝试增加a = a+ +,它也将无效。