C の余分な括弧 : 演算子の優先順位を超えて
C では、括弧は演算子の優先順位に影響を与えるためだけでなく、他のさまざまな目的でも使用されます。 。予期しない動作を回避するには、これらの追加コンテキストを理解することが重要です。
括弧によって意味が変わるコンテキスト:
引数依存の名前検索の防止:
括弧を使用すると、関数呼び出しでの引数に依存する名前の検索が禁止される場合があります。たとえば、(fun)(arg) は、 fun(arg).
リスト コンテキストでのカンマ演算子の有効化とは異なり、 fun が呼び出しスコープ内の関数に解決されるのを防ぎます:
リスト (関数の引数、初期化子リストなど) 内では、括弧を使用するとカンマ演算子が有効になります。たとえば、a、(b、c)、d は、括弧内でカンマ演算子が適用されるため、a、b、c、d とは異なる動作をします。
曖昧さの解決厄介な解析:
括弧を使用すると、「最も厄介な解析」などの複雑な構文の曖昧さを解消できます。括弧がないと、宣言と関数呼び出しの両方に似た構造は宣言として解釈される可能性があります。
decltype 式の参照性の推定:
decltype(e)と decltype((e)) は異なる結果を生成します。通常、前者は右辺値参照を表し、後者は左辺値参照に対応することがよくあります。この動作はかっこで制御します。
プリプロセッサ マクロ エラーの防止:
かっこを使用すると、マクロの使用に関連する問題を軽減できます。これらは、パラメータ リストを区切ることにより、不要な演算子の優先順位を防ぎ、マクロ引数内のカンマを有効にします。
使用上のガイドライン:
一方、余分な括弧は一般にそうではありません。コードに害を及ぼさないように、慎重に使用することが重要です。不必要なネストを避け、必要に応じて最新の C 11 構文などの代替手法の使用を検討してください。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3