Looking for c++ Answers? Try Ask4KnowledgeBase
Looking for c++ Keywords? Try Ask4Keywords

C++名前空間


前書き

複数のライブラリを使用するときの名前の衝突を防ぐために使用されます。名前空間は、関数、クラス、型などの宣言的な接頭辞です。

構文

  • 名前空間識別子opt ){ 宣言-seq }
  • インラインネームスペース識別子opt ){ 宣言-seq } / * C ++ 11以降* /
  • インライン( opt )名前空間属性指定子 - seq 識別子opt ){ 宣言-seq } / * C ++以降17 * /
  • 名前空間enclosing-namespace-specifier :: identifier { declaration-seq } / * C ++以降17 * /
  • 名前空間識別子 = 修飾された名前空間指定子 ;
  • namespace ネストされた名前指定子optnamespace-nameを使用します。
  • name -names-names -specifieroptnamespace-nameを使用した属性指定子 - seq 。 / * C ++ 11以降* /

備考

キーワード namespaceは、文脈によって3つの異なる意味があります。

  1. オプション名と中括弧で囲まれた宣言シーケンスの後には、新しい名前空間を定義するか、それらの宣言で既存の名前空間拡張します 。名前を省略すると、名前空間は名前のない名前空間になります

  2. その後に名前と等号が続くと、 名前空間のエイリアスが宣言されます

  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

名前空間 関連する例