【问题标题】:Reverse order when using std::cout [duplicate]使用 std::cout 时颠倒顺序 [重复]
【发布时间】:2013-08-08 06:16:14
【问题描述】:

下面的程序输出 10。我希望它首先打印 0(函数 f 的 else 分支),然后打印 1。为什么顺序颠倒了?

#include <iostream>     
using namespace std;

int f(bool& b){
    if (b==true){
        return 1;
    } else {
        b=true;
        return 0;
    }
}

int main () {
    bool b=false;
    cout<<unitbuf<<f(b)<<unitbuf<<f(b);

  return 0;
}

输出

10

【问题讨论】:

    标签: c++ cout


    【解决方案1】:

    未指定函数参数的评估顺序。所以,你在左边有这个论点:

    (cout << unitbuf << f(b) << unitbuf)
    

    还有右边这个:

    f(b)
    

    两者都被传递给operator&lt;&lt;(最后一个)。任何一个都可以先评估。如果首先计算左边的那个,那么左边的f(b) 的调用将首先发生,并返回0。然后右边的那个将被调用并返回1,从而产生01 的输出。如果首先计算右边的那个,那么 it 将返回 0,然后调用左边的那个,返回 1,导致 10 的反向输出。

    【讨论】:

    • 我认为原因并不是真正的“函数参数的求值顺序”,而是“表达式中操作数的求值顺序”。因为“cout
    猜你喜欢
    • 1970-01-01
    • 2021-06-10
    • 2015-04-07
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    相关资源
    最近更新 更多