函数未正确打印,首先打印每个函数的值,最后打印返回值

Functions aren't printing properly, couts of each function are printed first and the returned values are printed last

提问人:pat._ 提问时间:7/17/2023 更新时间:7/17/2023 访问量:47

问:

我有一段 c++ 代码,它是我在 CodeBlocks 中编写的:

#include <iostream>
using namespace std;
double square(double arg) {
    cout<<"double ";
   return arg * arg;
}
int square(int arg) {
    cout<<"int ";
   return arg * arg;
}
int main(void) {
   cout << square(2) << " " << square(2.) << " " << square('A') << endl;
   return 0;
}

出于某种原因,打印是:而不是:int double int 4 4 4225int 4 double 4 int 4225

我尝试在Visual Studio Code的C++中编译,但我仍然得到.代码似乎在在线编译器上正确打印。int double int 4 4 4225

C++ 函数 打印 返回 cout

评论

4赞 Jarod42 7/17/2023
您必须使用 C++17,它添加了 “排序”。operator <<
2赞 Jarod42 7/17/2023
有关详细信息,请参见 eval order (19)。

答:

3赞 Jarod42 7/17/2023 #1

在 C++17 之前,操作数的计算顺序是未排序的。operator <<

所以,在

std::cout << " " << square(2.)

square(2.)可能会在之前进行评估(及其打印副作用)。std::cout << " "

从 C++ 17 开始,添加了具有“预期”行为的新规则

  1. 在移位算子表达式 E1 << E2 和 E1 >> E2 中,E1 的每个值计算和副作用在 E2 的每个值计算和副作用之前进行排序。