0

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

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

4

4 回答 4

6

否 - 对于除 POD 之外的任何其他操作,操作员可能会超载。

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

当人们重载(A==B)(B==A).

于 2012-12-10T22:23:44.577 回答
0

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

于 2012-12-10T22:31:37.513 回答
0

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

char ch = get_a_character();
++ch;
ch = ch + 1; // narrowing conversion
于 2012-12-10T23:31:43.567 回答
-1

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

当然,除非其中一个或两个运算符已超载。这就是为什么有些人不赞成运算符重载的原因。

于 2012-12-10T22:23:45.387 回答