7

&&C++11 より前のバージョンでは、次の理由により、演算子には短絡と評価順序が必要であることがわかっています。

1.9.18

次の式の評価では

a && b
a || b
a ? b : c
a , b

これらの式の演算子の組み込みの意味を使用すると、最初の式の評価の後にシーケンス ポイントがあります(12)。

しかし、C++11 にはシーケンス ポイントが存在しなくなったため、次の標準部分はどこにありますか。

if (ptr && ptr->do_something())
{
}

安全ですか?

4

1 に答える 1

14

[expr.log.and]

演算子は&&左から右にグループ化します。オペランドは両方とも文脈上bool(節 4) に変換されます。両方のオペランドが true の場合、結果は true になり、それ以外の場合は false になります。とは異なり&&&左から右への評価が保証されます。最初のオペランドが false の場合、2 番目のオペランドは評価されません。

結果はbool. 2 番目の式が評価される場合、最初の式に関連付けられたすべての値の計算と副作用は、2 番目の式に関連付けられたすべての値の計算と副作用の前に並べられます。

于 2014-11-15T05:44:47.387 に答える