根据官方C++标准,有人能解释为什么在使用不同编译器运行时,以下简单代码的输出存在差异?编译器差异在g ++ 4.7.2和Intel 13.0.1与clang ++ 3.2和g ++ 4.8
换句话说,没有标准的离开这个开放的,以第一次会发生什么,在一个++或B分配?
这是不相关的函数的参数,它的代码运行在不同的编译器的同一块。以下是示例代码:
#include <iostream>
using namespace std;
int main() {
int a = 10, b;
a = b = a+++a;
cout << "a = " << a << ", b = " << b;
return 0;
}
代码的链接是here。
随着G ++ 4.7.2和英特尔C++ 13.0.1你:
stdout:
a = 21, b = 20
而与G ++ 4.8.0和锵++ 3.2你:
stdout:
a = 21, b = 21
哪一个是正确的?谢谢。
恭喜!你是第一百万人在stackoverflow上问这个问题:)! – us2012 2013-02-14 13:22:52
@ US2012 +1让我笑:) – 2013-02-14 13:25:29
所有的编译器是正确的,但是你错了对编译器警告与'-Wall',这将节省您的时间问这个问题不转动。去班级后面 – 2013-02-14 13:30:26