除了编辑器中的额外空间之外,这两个语句之间有什么区别吗?
编辑:感谢您的回答。我还想知道编译器如何评估每个语句。
否 - 对于除 POD 之外的任何其他操作,操作员可能会超载。
您会希望任何合理的实现都使这些操作相同,但这取决于开发人员,而不是由编译器强制执行。
当人们重载(A==B)
与(B==A)
.
是的,可能存在差异。一些对象,例如前向迭代器,定义了增量运算符(x++
和++x
),但不是operator+=
。一些对象,如string
,定义operator+=
但不增加。但是,一般来说,如果x += 1
、++x
和x++
都定义了,它们会做同样的事情。
即使对于 POD,它们也不完全相同。区别是微不足道的,但是您有用的编译器编写者可能会警告您后者而不是前者:
char ch = get_a_character();
++ch;
ch = ch + 1; // narrowing conversion
是的,它们是相同的。编译器很可能会为两者生成相同的代码。
当然,除非其中一个或两个运算符已超载。这就是为什么有些人不赞成运算符重载的原因。