スポンサードリンク
HOME > C++言語 > デフォルト名前空間 - using

C++言語 - デフォルト名前空間 - using

名前空間内の変数や関数を使う場合には、スコープ解決演算子(::)が必要ですが、

記述量を減らして省略できる書き方があります。

#include <iostream>

using namespace std;

namespace aaa {
   int a = 10;
   void show(void);
   void show(void) {
      cout << "名前空間aaaのグローバル変数a=" << aaa::a << '\n';
   }
}

using namespace aaa; // ここから後のデフォルト名前空間は
           // aaaとなる。

void main(void) {

   // aaa::aと書かなくても良い。
   cout << "名前空間aaaのグローバル変数a=" << a << '\n';

   // aaa::show()と書かなくても良い。
   show();
}


上記の例のようにusingキーワードを使う事により、

デフォルト名前空間が決定され、その地点から後に記述される変数名や関数名は、

デフォルトでaaa::が付加された状態で認識され、

存在しない場合は、グローバル変数、関数と認識されるようになります。



もうひとつのusingキーワードの使い方があります。

それは、名前空間内の変数や関数を個別に指定する機能です。

namespace aaa {
   int a;
   void show(void);
}

using aaa::show; // ここから後に記述されるshowは、
         // aaa::showと認識される。

void main(void) {

   // showと書いたら、aaa::showと認識される。
   show();
}


この例では、名前空間aaashow関数だけに絞ってusing指定されています。

そのため、名前空間aaa内の別の変数や関数、

例えば変数aは、通常通りaaa::aと記述する必要があります。



また、usingキーワードは、関数内に記述する事もできます。

その場合は、usingキーワードを記述した関数内でのみ有効になります。



usingキーワードは、便利なものですが、

複数のusingキーワードを使用する場合には、少しばかり注意が必要です。

namespace aaa {
   int a;
   void show(void);
}

namespace bbb {
   int a;
   void show(void);
}

using namespace aaa;
using namespace bbb;

void main(void) {
   aaa::show();    // 正常
   bbb::show();    // 正常
   show();      // コンパイルエラー
}


この例では、関数main内でshow関数をコールしています。

1番と2番目のshow関数コールは問題ありませんが、

3番目のshow関数コールは、名前空間aaa内のshow関数をコールするのか

名前空間bbb内のshow関数をコールするのか、はっきりしません。

こういった場合には、スコープ解決演算子(::)を使って

aaa::show();bbb::show();のような表現をします。



スポンサードリンク







HOME

言語解説編
プログラミング用語・知識

C言語

C++言語

Java

C#

Visual Basic.NET

アプリケーション編
C言語による
コンソールプログラミング




Copyright (C) プログラミングランド All Rights Reserved