+=和=+ C赋值运算符有啥区别[重复]
Posted
技术标签:
【中文标题】+=和=+ C赋值运算符有啥区别[重复]【英文标题】:What is the difference between += and =+ C assignment operators [duplicate]+=和=+ C赋值运算符有什么区别[重复] 【发布时间】:2017-05-27 18:07:21 【问题描述】:我想知道=+
和+=
(以及其他赋值运算符)之间是否有区别。我试过了,两者都做了同样的事情。那么有区别还是有约定?是否因为我的编译器不检查标准而两者都工作?
编辑:我犯了一个错误。我在测试期间使用了错误的输入,这让我认为他们都在做同样的事情。原来它们是两种不同的东西。
+=
添加右值到左值
x += y;
x = x + y;
=+
将右值分配给左值
x =+ y;
x = +y;
x = y;
【问题讨论】:
C 中没有=+
运算符。
@EugeneSh。是的,但它有效。所以我不应该使用它吗?它只是偶然在我的电脑上起作用?
我是两个不同的操作员。赋值和一元+
。
@EugeneSh.:严格来说,C 中不再有 =+
运算符。它在 70 年代中期不再是 C 的一部分。请注意,=+
、=-
、=&
都可以出现在现代 C 语言中——甚至 =*
如果后面的术语是一个指针。其他大部分都做不到。但是,含义是两个独立的运算符;他们接触的事实无关紧要。
如果您有:int main(void) int i = 2, j = 3; i =+ j; printf("%d\n", i); return 0;
,您打印的是 3 还是 5?标准 C 说它应该是 3。即使我从未使用过产生不同结果的编译器——从最初的 =+
到 +=
的变化发生在我开始用 C 编码之前的几年。
【参考方案1】:
在现代 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),它会警告 =-
的模糊使用,但会使用旧的含义。除非您是玩一些非常旧软件和/或硬件的爱好者,否则现在这应该不是问题。
(1975 年的C Reference Manual 显示了旧的=-
、=+
等形式的复合赋值运算符。Kernighan 和 Ritchie 出版的The C Programming Language第一版在 1978 年,展示了现代的 -=
、+=
等,但在“时代错误”下提到了旧形式。)
【讨论】:
直到今天我仍然在=
之后放置一个空格,所以a = -7;
不会被误解为a -= 7;
。
@chux-ReinstateMonica 我也是,但只是因为我觉得它更清晰。以上是关于+=和=+ C赋值运算符有啥区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章