名前のない名前空間
グローバル静的変数の宣言の使用に代わる上位の代替手段として、名前なし名前空間を宣言できます。
namespace { declaration-list }
解説
上に示す構文を持つ名前なし名前空間定義は、以下によって置き換えられたように動作します。
namespace unique { declaration-list }
using namespace unique;
名前なし名前空間にはそれぞれ、プログラムによって割り当てられ、保持され、ここでは unique によって表され、プログラム全体の他のすべての識別子とは異なる識別子があります。 次に例を示します。
// unnamed_namespaces.cpp
// C2872 expected
namespace { int i; } // unique::i
void f() { i++; } // unique::i++
namespace A {
namespace {
int i; // A::unique::i
int j; // A::unique::j
}
}
using namespace A;
void h()
{
i++; // C2872: unique::i or A::unique::i
A::i++; // A::unique::i++
j++; // A::unique::j++
}
名前なし名前空間は、変数の静的宣言に代わる上位の手段です。 これにより、変数と関数は翻訳単位全体の内部では見えますが、外部からは見えません。 名前なし名前空間のエンティティに外部リンケージが存在している可能性はありますが、それは翻訳単位に一意の名前で実質的に修飾されるため、他の翻訳単位からは見えません。