根据官方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
哪一个是正确的?谢谢。