★名前空間★


ここで「名前空間」について少し説明します。

C++の標準ライブラリの多くは「名前空間std」に所属していると書きました。

「cout」や「cin」も「std」に所属しています。

1つ前のプログラムを再度書きます。

<sample program cpp003-02>

#include <iostream>

int main()
{
    char str[100];

    std::cin >> str;

    std::cout << "str = " << str << std::endl;

    return 0;
}

<実行結果>

abc
str = abc
続行するには何かキーを押してください・・・

↑の書き方は、所属するストリームの前に毎回「std::」と書いていますが、別の書き方もあります。

<sample program cpp004-01>

#include <iostream>

using namespace std;

int main()
{
    char str[100];

    cin >> str;

    cout << "str = " << str << endl;

    return 0;
}

<実行結果>

abc
str = abc
続行するには何かキーを押してください・・・

  using namespace std;

と書く事で「名前空間stdを使います」という宣言になり、「std::」を毎回付けなくても実行出来るようになります。


名前空間を作ってみる


前に「名前空間」は新しいスコープと書きました。

大きなプロジェクトなどで、変数や関数などに同じ名前が付いてしまい、バグが発生する事を防ぐためのものです。

変数名や関数名が同じでも「名前空間」が異なれば、違うものとして認識されます。

次のサンプルを書いて、実行してみてください。

<sample program cpp004-02>

#include <iostream>

using namespace std;

namespace MyNamespaceA
{
    int value;
}

namespace MyNamespaceB
{
    int value;
}

int main()
{
    MyNamespaceA::value = 12;

    cout << "value = " << MyNamespaceA::value << endl;

    MyNamespaceB::value = 25;

    cout << "value = " << MyNamespaceB::value << endl;

    return 0;
}

<実行結果>

value = 12
value = 25
続行するには何かキーを押してください・・・

valueという変数が2つありますが、別の「名前空間」に所属しています。

所属が異なるため、この2つの変数は競合しません。

「名前空間」には関数や定数(const)なども所属させる事が出来ます。

ただし、次のように書いた場合はエラーになります。

<sample program cpp004-03>

#include <iostream>

using namespace std;

namespace MyNamespaceA
{
    int value;
}

namespace MyNamespaceB
{
    int value;
}

using namespace MyNamespaceA;
using namespace MyNamespaceB;

int main()
{
    value = 12;

    cout << "value = " << value << endl;

    return 0;
}

<コンパイル結果>

error C2872: 'value': あいまいなシンボルです。
note: 'int MyNamespaceA::value' の可能性があります
note: または 'int MyNamespaceB::value'
error C2872: 'value': あいまいなシンボルです。
note: 'int MyNamespaceA::value' の可能性があります
note: または 'int MyNamespaceB::value'

using namespaceを使って、名前空間名を省略出来るようにしました。

この場合「value」と書くと、MyNamespaceAの「value」なのかMyNamespaceBの「value」なのか区別が付かなくなります。

きちんと所属を書く事をお勧めします。


次へ

戻る

目次へ