我有这个简单的小代码:
#include <iostream>
int Add (int x, int y) {
std::cout << "In Add(), received " <<x<< " and " <<y<< "\n";
return (x+y);
}
int main () {
std::cout << "In main ()\n";
std::cout << "\nCalling Add ()\n";
std::cout << "value: " << Add (3,4);
std::cout << "\nback to main ().\n";
std::cout << "\nout..\n\n";
return 0;
}
如果我用 MSVC 编译器编译它,结果是:
In main ()
Calling Add ()
In Add(), received 3 and 4
value: 7
back to main ().
out..
但是在 GCC 中,结果是:
In main ()
Calling Add ()
value: In Add(), received 3 and 4
7
back to main ().
out..
为什么输出不一样?我还想知道是否有办法让两个编译器具有相同的输出。
最佳答案
在 c++17 之前,运算符 <<
不是排序点,因此std::cout << "value: " << Add (3,4);
可以按任何顺序进行评估。
C++17 保证从左到右求值,这在您的情况下是错误的行为。
我的猜测是您使用的编译器的特定版本具有不同的默认 C++ 版本,并且 MSVC 从右到左计算表达式。
您应该将表达式拆分为多个语句。一般来说,我的建议是将计算与报告分开,即在日志记录或其他条件(如 assert
)部分中不要进行任何计算。
关于c++ - 使用MSVC编译器和GCC编译器得到不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77253370/