namespace
カテゴリ
説明
実在のアプリケーションの大半は、複数のソース ファイルで構成されています。 ファイルは、複数の開発者によって作成され保守される可能性があります。 やがては、個々のファイルがまとめられリンクされて最終的なアプリケーションが生成されます。 従来、ファイル構成の必要上、定義済みの名前空間(関数またはクラスの本体や翻訳単位など)の中にカプセル化されない名前はすべて、同じグローバルな名前空間を共有しなければなりません。 そのため、個々のモジュールのリンク中に名前の定義が複数見つかった場合には、それぞれの名前を区別する何らかの方法が必要になります。 C++ の名前空間メカニズムは、グローバル スコープにおける名前の衝突(競合)の問題に対する解決策を提供します。
名前空間メカニズムにより、アプリケーションはいくつかのサブシステムに分割することができます。 各サブシステムは専用のスコープを定義でき、その中で動作できます。 各開発者は、他の開発者が使用するかどうかを気にせずに、都合の良い識別子は何でもサブシステム内に自由に導入することができます。 サブシステムのスコープは、一意な識別子によってアプリケーション全体を通して区別されます。
名前空間を使用するには:
namespace
キーワードを使って名前空間を定義し、その内部のコードを作成します。- 定義済みの名前空間に含まれているシンボルにアクセスするには、
using(宣言)
キーワードを使用するか、名前空間をスコープ解決演算子で指定します。
- 例:
struct A { void foo(); }; // #1 struct B { void foo(); }; // #2 struct C : A, B { void callfoo() { foo(); //error: ambiguous B::foo(); // picks #2 } };