2012-12-20 9 views
10

次のコードは受け入れられますか?C++でベクトル境界をチェックするために短絡評価に頼ることはできますか?

if(vector.size() > 0 && vector[0] == 3) { 
} 

または、ベクターが空のときにクラッシュする可能性はありますか?私はこれが起こっていることに気づいていないが、まだ可能であることを心配している。

+7

いいです。あなたが言ったように、短絡評価が機能します。しかし、代わりに '!vector.empty()'を最初の部分に使うこともできます。 – chris

+1

はい。短絡は、規格によって正確に定義されています。 –

+0

可能な複製[Javaでのように短絡回路の評価がC++で保証されていますか?](http://stackoverflow.com/questions/2108467/is-short-circuit-evaluation-guaranteed-in-c-as-it- is-in-java) – DazzaL

答えて

11

はい、それは動作しますが、!vector.empty() && vector[0] == 3といっても意味がありません。それは最大限の効率を持つすべてのコンテナで動作するため、悪化することはなく、時には常に優れています。

14

はい、組み込み演算子&&を使って短絡することができます。これは仕様の一部です。

+0

Upvote。 Sidenote:この「2ステップ」と「演算子&&」は、私が最も嫌う言語の特徴の1つです。率直に言って、委員会は&&と||のオーバーロードを決して許さないでください。ビルトインオペレータまたはオーバーロードされたオペレータが呼び出されているかどうかにかかわらず、同じセマンティクスが適用されることを保証することができない場合。 –

+0

Nik Bougalisは何かのように曖昧であればそれをしません。演算子++に負の値を設定して減算すると同じです。 – Beached

関連する問題