[解決済み] 論理演算子の短絡は必須ですか?また、評価順序は?
質問
ANSI規格は を義務づけています。 は、C または C++ のいずれにおいても、論理演算子を短絡させることを義務付けていますか?
K&R の本で、これらの演算が短絡していることにコードを依存すべきではないと書かれていたのを思い出して、混乱しています。どなたか、標準のどこで論理演算が常に短絡されていると言っているのか指摘していただけませんか。私は主に C++ に興味がありますが、C にも回答があると助かります。
私はまた、評価順序は厳密に定義されていないので、コードは式内の関数が特定の順序で実行されると依存または仮定すべきではないと読んだことを覚えています (場所は思い出せません)。
規格はこの式の評価順序を示していますか?
if( functionA() && functionB() && functionC() ) cout<<"Hello world";
どのように解決するのですか?
はい、演算子には短絡と評価順序が必要です。
||
と
&&
は、CとC++の両方の規格に含まれています。
C++標準では(C標準に同等の条項があるはずです。)
1.9.18
以下の式の評価において
a && b a || b a ? b : c a , b
のように、これらの式に含まれる演算子の組み込みの意味を使っています。 の評価後にシーケンスポイントが存在します。 (12).
C++では、追加のトラップがあります:短絡は、次のことを行います。
ではない
は演算子をオーバーロードする型には適用されません。
||
と
&&
.
脚注12: この段落で示される演算子は、第5節で説明されるように組み込み演算子である。これらの演算子の1つが有効な文脈でオーバーロード(第13項)され、したがってユーザ定義演算子関数を指定する場合、式は関数呼び出しを指定し、オペランドは引数リストを形成する。 を形成し、オペランドはそれらの間に暗黙のシーケンスポイントなしで
C++でこれらの演算子をオーバーロードすることは、非常に特殊な要件がない限り、通常は推奨されません。特に、これらの演算子をオーバーロードした型のテンプレートをインスタンス化することによって、これらの演算子が間接的に使用される場合、オーバーロードすることは可能ですが、他の人のコードで期待される動作が壊れる可能性があります。
関連
-
[解決済み] テスト
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み] Pythonはショートカットに対応していますか?
-
[解決済み] Pythonのif文における&&(論理和)に相当する機能
-
[解決済み】Bashの簡単な論理演算子
-
[解決済み】||と!||の演算子で、あらゆる論理式が可能か?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない