名前空間と C ヘッダーでの「名前空間の使用」の危険性
Bruce Eckel は、著書「Thinking in C」の中で、次のように警告しています。ヘッダー ファイルに「using namespace」ディレクティブを含めます。このディレクティブは名前空間の保護を排除し、名前空間のシンボルがコンパイル単位内でグローバルにアクセスできるようにします。
説明例
次のプログラムを考えてみましょう:
<code class="cpp">#include <string> using namespace std; // Custom definition of a struct named "string" struct string { const char* p; }; int main() { string x; // Error: Ambiguous, which "string" is intended? }</code>
コンパイルしようとすると、コンパイラーはあいまいさの問題に遭遇します。main 関数の識別子 "string" は、ユーザー定義の構造体または標準ライブラリ クラスのいずれかを参照できます。
ヘッダー ファイルへの影響
プログラムの先頭部分 (1 行目から 5 行目まで) が別のヘッダー ファイルに抽出され、main 関数を含むソース ファイルに含まれる場合、あいまいさの問題が残ります。 。これは、「using namespace」ディレクティブが、非修飾名前解決の影響を、問題のあるヘッダーを直接的または間接的に含むすべてのヘッダーを含むコンパイル単位全体に拡張するためです。
結果と制限事項
ヘッダーで「using namespace」を使用すると、いくつかの問題が発生する可能性があります。
とはいえ、ヘッダー ファイル内の特定のクラスまたは関数スコープ内での「名前空間の使用」の使用は、この指令の効果はそれが現れる範囲に限定されるため、同じリスクが生じます。
以上がC ヘッダー ファイルで「using namespace」の使用を避けるべき理由は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。