根据官方 C++ 标准,有人可以解释为什么以下简单代码在使用不同的编译器运行时会出现不同的输出吗?
换句话说,标准是否对首先发生的事情保持开放,a++ 或 b 赋值?
这与函数参数无关,它是在不同编译器上运行的同一段代码。这是示例代码:
#include <iostream>
using namespace std;
int main() {
int a = 10, b;
a = b = a+++a;
cout << "a = " << a << ", b = " << b;
return 0;
}
代码链接在这里。
使用g++ 4.7.2和Intel C++ 13.0.1,您可以获得:
stdout:
a = 21, b = 20
而使用g++ 4.8.0和Clang++ 3.2你会得到:
stdout:
a = 21, b = 21
哪一个是正确的?谢谢。