此代码在 XCode 和 Visual Studio 中提供不同的输出:
#include <iostream>
using namespace std;
int f() {
cout << 'A';
return 1;
}
int main() {
cout << '.' << f();
return 0;
}
在 Visual Studio 中它输出
A.1
在 XCode 中它输出
.A1
显然我希望两个编译器输出相同的东西..是否应该不这样做?这是已知的事情还是我可以对此做些什么?
MSVC 编译代码的方式显然与 GCC 不同。
通过Godbolt检查汇编代码(使用 x86-64 gcc 13.2 和 x64 msvc v19.38)显示 MSVC 为该
main
函数生成以下汇编代码:...而 GCC 产生了这个:
在 MSVC 输出中,在第一个之前
f()
调用,而 GCC在调用第一个之后调用。operator<<
f()
operator<<
std::cout
原因是在 C++ 中,求值的顺序是未指定的: