在我遇到这个
之前,我以为我理解后缀和前缀是如何工作的#include <iostream>
using namespace std;
int main(int argc, char const *argv[]) {
int a = 3, b = 3, c = 3;
cout << a + a++ << endl; // = 7 Okay, makes sense to me
cout << b + c++ << endl; // = 6 Now I'm confused
int x = 3, y = 3;
cout << (x++)*(x++)*(x++) << endl; // = 3*4*5 = 60 Okay I get it
cout << (++y)*(++y)*(++y) << endl; // = 5*5*6 = 150 Wait what ? But why... ?
// I thought it would be 4*5*6 or 6*6*6 or something
return 0;
}
对此有任何合理的解释吗?或者它是某种未定义的行为?
答案 0 :(得分:1)
C ++不提供首先产生参数的保证。 当您编写类似的代码时:
a + a++
它将被翻译为
int operator+(int a1, int a2)
在通话之前,必须计算此功能a2
和a1
。您无法确定将执行哪个参数。因此,您有未定义的行为。