为何代码行首输出4?C++ cout执行顺序问题咨询
C++ cout输出顺序异常问题解答
问题描述
我编写了一段C++代码,预期输出为Testing 6 1 4,但实际在cmd中输出的是4 Testing 6 1,行首莫名出现了4,请问这是怎么回事?
代码示例
#include <iostream> using namespace std; class learning { public: static int func(int var) { return var; } inline bool func(bool var=2 > 1) { bool& va = var; int num = func(3); num += va; cout << num << " "; return num; } }; int main() { learning len; cout << "Testing " << learning::func(6) << " " << len.func(); return 0; }
原因分析
核心问题在于C++标准没有规定函数参数(包括cout链式调用中的各个表达式)的求值顺序,不同编译器可以自由选择求值的先后顺序。
具体到你的代码:
main函数中的cout << "Testing " << learning::func(6) << " " << len.func();这行,编译器选择了先计算最右侧的len.func()。len.func()内部执行时,会先调用func(3)得到3,加上默认参数2>1(结果为true,转成int是1),得到num=4,然后执行cout << num << " ";,这就直接输出了4,也就是你看到的行首的4。- 之后编译器才会依次处理前面的表达式:输出
Testing、learning::func(6)的返回值6、空格,最后输出len.func()的返回值1(因为bool类型的返回值在cout输出时会被转为1)。
所以最终输出顺序就变成了4 Testing 6 1,和你的预期不符。
内容的提问来源于stack exchange,提问作者dukan
相关产品推荐
相关产品推荐

