提问人:pat._ 提问时间:7/17/2023 更新时间:7/17/2023 访问量:47
函数未正确打印,首先打印每个函数的值,最后打印返回值
Functions aren't printing properly, couts of each function are printed first and the returned values are printed last
问:
我有一段 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 4225
int 4 double 4 int 4225
我尝试在Visual Studio Code的C++中编译,但我仍然得到.代码似乎在在线编译器上正确打印。int double int 4 4 4225
答:
3赞
Jarod42
7/17/2023
#1
在 C++17 之前,操作数的计算顺序是未排序的。operator <<
所以,在
std::cout << " " << square(2.)
square(2.)
可能会在之前进行评估(及其打印副作用)。std::cout << " "
从 C++ 17 开始,添加了具有“预期”行为的新规则:
- 在移位算子表达式 E1 << E2 和 E1 >> E2 中,E1 的每个值计算和副作用在 E2 的每个值计算和副作用之前进行排序。
评论
operator <<