除了编辑器中的额外空间外,两个语句之间有什么区别吗?
编辑:谢谢你的回答。我还想知道编译器如何评估每个语句。答案 0 :(得分:6)
否 - 对于任何其他POD,运营商可能会超载。
您希望任何合理的实现都能使这些操作相同,但这取决于开发人员,而不是由编译器强制执行。
当人们重载运算符时,您可以想象更微妙的问题,(A==B)
与(B==A)
不同。
答案 1 :(得分:0)
是的,可能存在差异。某些对象(例如Forward Iterators)定义了增量运算符(x++
和++x
),但不是operator+=
。某些对象(如string
)定义operator+=
但不增加。但是,通常情况下,如果x += 1
,++x
和x++
都已定义,它们将执行相同的操作。
答案 2 :(得分:0)
即使对于POD,它们也不尽相同;区别是微不足道的,但是你有用的编译器编写者可能会警告你后者而不是前者:
char ch = get_a_character();
++ch;
ch = ch + 1; // narrowing conversion
答案 3 :(得分:-1)
是的,它们完全相同。编译器很可能会为两者生成相同的代码。
当然,除非一个或两个操作员都过载了。这就是为什么有些人对操作员超载感到不满。