+ = vs = + C赋值运算符之间有什么区别?

时间:2017-01-12 15:06:08

标签: c assignment-operator compound-assignment

我想知道=++=(以及其他任务运营商)之间是否存在差异。我试过,两个都做了同样的事情。那么有区别还是有约定?两者都有效,因为我的编译器没有检查标准吗?

编辑:我犯了一个错误。我在测试期间使用了不良输入,这让我觉得他们都在做同样的事情。原来他们是两件不同的事情。

+=运算符将左值添加到左值

x += y;
x = x + y;

=+只需将左值赋予左值

x =+ y;
x = +(y);
x = y;

1 个答案:

答案 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)来警告=-的模糊使用,但会使用较旧的含义。这不应该成为一个问题,除非你是一个爱好者玩一些非常旧的软件和/或硬件。