複数のライブラリを使用するときの名前の衝突を防ぐために使用されます。名前空間は、関数、クラス、型などの宣言的な接頭辞です。
キーワード namespace
は、文脈によって3つの異なる意味があります。
オプション名と中括弧で囲まれた宣言シーケンスの後には、新しい名前空間を定義するか、それらの宣言で既存の名前空間を拡張します 。名前を省略すると、名前空間は名前のない名前空間になります 。
その後に名前と等号が続くと、 名前空間のエイリアスが宣言されます 。
名前空間名using
して後に続けると、 usingディレクティブが形成されます。これにより、指定された名前空間内の名前が修飾されていない名前検索によって検出されます(しかし、現在のスコープ内の名前は再宣言されません)。クラススコープでusingディレクティブを使用することはできません。
using namespace std;
落胆している。どうして? namespace std
は巨大なので!これは、名前が衝突する可能性が高いことを意味します。
//Really bad!
using namespace std;
//Calculates p^e and outputs it to std::cout
void pow(double p, double e) { /*...*/ }
//Calls pow
pow(5.0, 2.0); //Error! There is already a pow function in namespace std with the same signature,
//so the call is ambiguous