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

时间:2012-12-10 22:18:11

标签: c++ operator-overloading

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

编辑:谢谢你的回答。我还想知道编译器如何评估每个语句。

4 个答案:

答案 0 :(得分:6)

否 - 对于任何其他POD,运营商可能会超载。

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

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

答案 1 :(得分:0)

是的,可能存在差异。某些对象(例如Forward Iterators)定义了增量运算符(x++++x),但不是operator+=。某些对象(如string)定义operator+=但不增加。但是,通常情况下,如果x += 1++xx++都已定义,它们将执行相同的操作。

答案 2 :(得分:0)

即使对于POD,它们也不尽相同;区别是微不足道的,但是你有用的编译器编写者可能会警告你后者而不是前者:

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

答案 3 :(得分:-1)

是的,它们完全相同。编译器很可能会为两者生成相同的代码。

当然,除非一个或两个操作员都过载了。这就是为什么有些人对操作员超载感到不满。