后缀和前缀的行为

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)

调用前,必须计算此函数a2a1。您无法确定首先执行哪个参数。因此,您有 未定义的行为