我想知道=+
和+=
(以及其他任务运营商)之间是否存在差异。我试过,两个都做了同样的事情。那么有区别还是有约定?两者都有效,因为我的编译器没有检查标准吗?
编辑:我犯了一个错误。我在测试期间使用了不良输入,这让我觉得他们都在做同样的事情。原来他们是两件不同的事情。
+=
运算符将左值添加到左值
x += y;
x = x + y;
=+
只需将左值赋予左值
x =+ y;
x = +(y);
x = y;
答案 0 :(得分:7)
在现代C中,甚至是中等古老的C中,+=
是复合赋值运算符,=+
被解析为两个单独的标记。 =
和+
。标点符号可以相邻。
所以如果你写:
x += y;
它相当于
x = x + y;
除了x
仅被评估一次(如果它是一个更复杂的表达式,这可能很重要)。
如果你写:
x =+ y;
然后将其解析为
x = + y;
并且+
是一元加号运算符。
非常 C的早期版本(大约在20世纪70年代中期,在1978年K& R1出版之前)使用不同的符号进行复合赋值。现代C使用+=
时,早期C使用=+
。早期的C没有一元+
运算符,但它确实有一元-
运算符,并且使用=-
会导致问题;程序员会写x=-y
来表示x = -y
,但它被默认解释为x =- y
。该语言在1978年之前的某个时候被改变以避免这个问题。直到1999年,我使用了一个编译器(VMS上的VAXC)来警告=-
的模糊使用,但会使用较旧的含义。这不应该成为一个问题,除非你是一个爱好者玩一些非常旧的软件和/或硬件。