Bruce Eckel の声明は、ヘッダー ファイルに "using namespace" を含めることの潜在的な危険性を強調しています。その理由を理解するために、例を見てみましょう。
次のコードを含む "header.h" という名前のヘッダー ファイルがあるとします。
<code class="c++">#include <string> using namespace std; struct string { const char* p; }; // Beware: another string!</code>
このヘッダーは、次の新しい文字列構造体を定義します。標準ライブラリの std::string とは異なります。
次に、「header.h」を含むソース ファイル「source.cpp」を考えてみましょう。
<code class="c++">#include "header.h" int main() { string x; // Error: ambiguous - which string is wanted? }</code>
このコードをコンパイルすると、コンパイラは、どの文字列定義を使用するかを決定できないため、エラーが発生します。このあいまいさは、「名前空間 std; を使用する」ために発生します。ヘッダー ファイル内のディレクティブは、ヘッダーを含むファイルを含む後続のすべてのコードに影響します。
この例では、ユーザー定義の文字列構造体の名前を変更するか、「using namespace std;」を配置することで問題を簡単に解決できます。クラスまたは関数のスコープ内のディレクティブ。ただし、より複雑なシナリオでは、このような潜在的な競合を特定して解決するのが難しい場合があります。
ヘッダー ファイルに "using namespace" を配置する場合の懸念は、名前の競合の可能性を超えて広がります。また、「
そのため、ヘッダー ファイルで「名前空間を使用する」の使用を避けることをお勧めします。代わりに、名前の衝突や標準ライブラリ ヘッダーへの変更による潜在的な影響を十分に理解している特定のクラスまたは関数の範囲内で使用してください。
以上がC ヘッダー ファイルで「using namespace」を使用するのはなぜ悪い考えなのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。