后缀和前缀的行为

时间:2017-06-29 06:41:40

标签: c++ prefix postfix

在我遇到这个

之前,我以为我理解后缀和前缀是如何工作的
#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;
}

对此有任何合理的解释吗?或者它是某种未定义的行为?

1 个答案:

答案 0 :(得分:1)

C ++不提供首先产生参数的保证。 当您编写类似的代码时:

a + a++ 

它将被翻译为

int operator+(int a1, int a2)

在通话之前,必须计算此功能a2a1。您无法确定将执行哪个参数。因此,您有未定义的行为