0

以下のプログラムは 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
4

1 に答える 1

5

関数の引数の評価順序は規定されていません。したがって、左側に次の引数があります。

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

そして、これは右側にあります:

f(b)

operator<<両方とも(最後のもの)に渡されます。どちらを先に評価しても構いません。左側のものを最初に評価すると、左側の への呼び出しがf(b)最初に行われ、0 が返されます。次に、右側のものが呼び出されて 1 が返され、結果として が出力されます01。右側が最初に評価されると 0 が返さ、次に左側が呼び出されて 1 が返され、 の逆の出力が得られます10

于 2013-08-07T02:48:03.253 に答える