名前の検索、カンマ演算子の動作、または式の評価を操作するために C で追加の括弧を使用する場合とその方法

Mary-Kate Olsen
リリース: 2024-10-24 03:37:30
オリジナル
394 人が閲覧しました

When and How to Use Extra Parentheses in C   to Manipulate Name Lookup, Comma Operator Behavior, or Expression Evaluation?

C の余分な括弧 : 演算子の優先順位を超えて

余分な括弧は通常、C プログラムの意味を変更しませんが、特定の状況では、括弧によって意味が変更されることがあります。基本的な演算子の優先順位を上書きする効果:

1。引数に依存する名前検索の防止

(fn)(arg) などの関数呼び出しを囲むかっこは、引数に依存する名前検索 (ADL) を防止します。括弧がないと、fn(arg) は、一致する可能性のある関数を囲む名前空間内で検索します。

2.リスト コンテキストでのカンマ演算子の有効化

関数の引数や初期化子リストのようなリスト コンテキストでは、a、(b、c)、d を使用すると、標準の a とは異なり、カンマ演算子を (b, c) に個別に適用できます。 b、c、d表記。

3.厄介な解析におけるあいまいさの解決

余分な括弧を使用すると、宣言のような構文が関数または式ステートメントと衝突するコードの曖昧さを解消できます。たとえば、S w(int(a)); S y((int)a); と S y((int)a); では、括弧によって、関数宣言ではなくオブジェクト宣言であることが明確になります。

4. decltype 式の参照性の推定

decltype(e) は、オペランドが左辺値参照であるか右辺値参照であるかを推定します。 decltype((e)) のように括弧を追加すると、オペランドは強制的に右辺値参照として扱われます。

5.プリプロセッサ マクロ エラーの防止

マクロ定義内で括弧を使用すると、演算子の優先順位の問題を回避し、マクロ引数をコンマで保護し、ヘッダーでのマクロ展開を防ぐことができます。たとえば、 #define TIMES(A, B) (A) * (B); TIMES(1 2, 2 1) が 9 に評価されることを保証します。

以上が名前の検索、カンマ演算子の動作、または式の評価を操作するために C で追加の括弧を使用する場合とその方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!