是语句值 += i;与值 = 值 + i 完全相同

Is the statement value += i; the exact same as value = value + i?

本文关键字:与值 语句      更新时间:2023-10-16

除了编辑器中多余的空间,这两个语句之间有什么区别吗?

编辑:感谢您的回答。我还想知道编译器如何计算每个语句。

否 - 对于 POD 的任何其他内容,运算符可能会过载。

您可能希望任何合理的实现都使这些操作相同,但这取决于开发人员,而不是由编译器强制执行。

当人们超载运算符时,您可以想象更微妙的问题,以至于(A==B)(B==A)不同。

是的,可能会有差异。 某些对象(如前向迭代器)定义了增量运算符(x++++x ),但不是 operator+= 。 某些对象(如 string )定义operator+=但不定义增量。 但是,一般来说,如果x += 1++xx++都被定义,它们将做同样的事情。

即使对于 POD,它们也不完全相同; 差异是微不足道的,但你有用的编译器编写者可能会警告你后者,但不会警告你:

char ch = get_a_character();
++ch;
ch = ch + 1; // narrowing conversion

是的,它们是相同的。编译器极有可能为两者生成相同的代码。

当然,除非其中一个或两个运算符都过载。这就是为什么有些人对操作员超载不屑一顾的原因。