10

次のコードがあるとしましょう:

std::vector<T> R;
if (condition) R = generate();
...
for (int i = 0; i < N; ++i) {
    const auto &r = (R.empty() ? generate() : R);
}

に関係なく、generate が呼び出されるようですR.empty()。それは標準的な動作ですか?

4

1 に答える 1

20

C++ 11 標準のパラグラフ 5.16/1 から:

条件式は右から左にグループ化されます。最初の式は、コンテキストに応じて bool に変換されます (条項 4)。それが評価され、真であれば条件式の結果は 2 番目の式の値になり、それ以外の場合は 3 番目の式の値になります。2 番目と 3 番目の式の 1 つだけが評価されます。最初の式に関連付けられたすべての値の計算と副作用は、2 番目または 3 番目の式に関連付けられたすべての値の計算と副作用の前に並べられます。

于 2013-02-07T23:33:34.753 に答える