后缀和前缀的行为
Behaviour of postfix and prefix
在遇到这个问题之前,我以为我了解后缀和前缀的工作原理
#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;
}
这有什么合乎逻辑的解释吗?或者它是某种未定义的行为?
C++ 不保证首先生成参数。
当您编写如下代码时:
a + a++
它将被翻译成
int operator+(int a1, int a2)
调用前,必须计算此函数a2
和a1
。您无法确定首先执行哪个参数。因此,您有 未定义的行为。
在遇到这个问题之前,我以为我了解后缀和前缀的工作原理
#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;
}
这有什么合乎逻辑的解释吗?或者它是某种未定义的行为?
C++ 不保证首先生成参数。 当您编写如下代码时:
a + a++
它将被翻译成
int operator+(int a1, int a2)
调用前,必须计算此函数a2
和a1
。您无法确定首先执行哪个参数。因此,您有 未定义的行为。