我想知道=+
和+=
(和其他任务操作员)之间是否存在差异.我试过,两个都做了同样的事情.那么有区别还是有约定?两者都有效,因为我的编译器没有检查标准吗?
编辑:我犯了一个错误.我在测试期间使用了不良输入,这让我觉得他们都在做同样的事情.原来他们是两件不同的事情.该+=
运营商增加了右值到左值=+
.=+
只需将右值分配给左值+=
.
在现代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)来警告模糊使用=-
,但会使用旧的含义.这不应该是一个问题,除非你是一个玩一些非常旧的软件和/或硬件的业余爱好者.