はい、保証されています。そうしないと、そのような演算子はその有用性の多くを失うことになります。
重要な注意: これは組み込みのandに対してのみ有効です。一部の犯罪者がそれらをオーバーロードした場合、それらは「通常の」オーバーロードされた二項演算子として扱われるため、この場合、両方のオペランドが常に評価され、通常どおり不特定の順序で評価されます。このため、それらを過負荷にしないでください。プログラムの制御フローに関する非常に重要な前提が崩れます。&&
||
関連する標準見積
組み込み&&
で、||
短絡動作が保証されています
§5.14 ¶1
とは異なり&
、&&
は左から右への評価を保証します。最初のオペランドが の場合、2 番目のオペランドは評価されませんfalse
。
§5.15 ¶1
とは異なり|
、||
左から右への評価が保証されます。さらに、最初のオペランドが に評価される場合、2 番目のオペランドは評価されませんtrue
。
オーバーロードされた場合、それらは「通常の」二項演算子として動作します (評価の短絡または保証された順序はありません)。
§13.5 ¶9
13.5.3 節から 13.5.7 節で明示的に言及されていない演算子は、13.5.1 または 13.5.2 の規則に従う通常の単項および二項演算子として機能します。
およびは&&
、||
これらの節で明示的に言及されていないため、通常の §13.5.2 が保持されます。
§13.5.2 ¶1
二項演算子は、1 つのパラメーターを持つ非静的メンバー関数 (9.3) または 2 つのパラメーターを持つ非メンバー関数によって実装されます。したがって、任意の二項演算子@
について、はまたはx@y
として解釈できます。x.operator@(y)
operator@(x,y)
片側だけを評価したり、特定の順序で評価したりするための特別な規定はありません。
(すべて C++11 標準からの引用)