+= 和 =+ C 赋值运算符有什么区别
What is the difference between += and =+ C assignment operators
我想知道 =+
和 +=
(以及其他赋值运算符)之间是否存在差异。我试过了,两者都做了同样的事情。那么有区别还是有约定?两者都有效是因为我的编译器不检查标准吗?
编辑:我弄错了。我在测试期间使用了错误的输入,这让我认为他们都在做同样的事情。原来它们是两个不同的东西。
+=
将右值添加到左值
x += y;
x = x + y;
=+
将右值分配给左值
x =+ y;
x = +y;
x = y;
在现代 C 中,甚至是相当古老的 C 中,+=
是一个复合赋值运算符,而 =+
被解析为两个单独的标记。 =
和 +
。标点符号允许相邻。
所以如果你写:
x += y;
相当于
x = x + y;
除了 x
只计算一次(如果它是一个更复杂的表达式,这可能很重要)。
如果你写:
x =+ y;
然后它被解析为
x = + y;
并且 +
是一元加运算符。
非常 C 的早期版本(大约在 1970 年代中期,在 1978 年 K&R1 出版之前)使用不同的符号进行复合赋值。现代 C 使用 +=
,早期 C 使用 =+
。早期的 C 没有一元 +
运算符,但它有一个一元 -
运算符,并且 =-
的使用引起了问题;程序员会写 x=-y
,意图表示 x = -y
,但它被默默地解释为 x =- y
。语言在 1975 年和 1978 年之间的某个时间发生了变化,以避免出现该问题。直到 1999 年,我还在使用一个编译器(VMS 上的 VAXC),它会警告 =-
的使用不明确,但会使用旧的含义。现在这不应该是一个问题,除非你是一个玩一些非常旧软件and/or硬件的爱好者。
(A 1975 C Reference Manual 显示了旧的 =-
、=+
等复合赋值运算符的形式。The C Programming Language 第一版 由 Kernighan 和 Ritchie 于 1978 年出版,展示了现代 -=
、+=
等,但在 "Anachronisms" 下提到了旧形式。)
我想知道 =+
和 +=
(以及其他赋值运算符)之间是否存在差异。我试过了,两者都做了同样的事情。那么有区别还是有约定?两者都有效是因为我的编译器不检查标准吗?
编辑:我弄错了。我在测试期间使用了错误的输入,这让我认为他们都在做同样的事情。原来它们是两个不同的东西。
+=
将右值添加到左值
x += y;
x = x + y;
=+
将右值分配给左值
x =+ y;
x = +y;
x = y;
在现代 C 中,甚至是相当古老的 C 中,+=
是一个复合赋值运算符,而 =+
被解析为两个单独的标记。 =
和 +
。标点符号允许相邻。
所以如果你写:
x += y;
相当于
x = x + y;
除了 x
只计算一次(如果它是一个更复杂的表达式,这可能很重要)。
如果你写:
x =+ y;
然后它被解析为
x = + y;
并且 +
是一元加运算符。
非常 C 的早期版本(大约在 1970 年代中期,在 1978 年 K&R1 出版之前)使用不同的符号进行复合赋值。现代 C 使用 +=
,早期 C 使用 =+
。早期的 C 没有一元 +
运算符,但它有一个一元 -
运算符,并且 =-
的使用引起了问题;程序员会写 x=-y
,意图表示 x = -y
,但它被默默地解释为 x =- y
。语言在 1975 年和 1978 年之间的某个时间发生了变化,以避免出现该问题。直到 1999 年,我还在使用一个编译器(VMS 上的 VAXC),它会警告 =-
的使用不明确,但会使用旧的含义。现在这不应该是一个问题,除非你是一个玩一些非常旧软件and/or硬件的爱好者。
(A 1975 C Reference Manual 显示了旧的 =-
、=+
等复合赋值运算符的形式。The C Programming Language 第一版 由 Kernighan 和 Ritchie 于 1978 年出版,展示了现代 -=
、+=
等,但在 "Anachronisms" 下提到了旧形式。)