4

私の理解では、名前空間の前に追加::すると、using ステートメントや親名前空間に関係なく、グローバル名前空間が参照されます。それが事実であり、私が何も誤解していない場合、なぜそのようなコードはコンパイルされるのですか (少なくとも Visual Studio では):

namespace Foo {
    namespace Bar {
        class X;
    }
}

using namespace Foo;
int main(void)
{
    ::Bar::X x;
}
4

1 に答える 1

6

using namespace Foo;のすべての内容をnamespace Foo現在の名前空間のコンテキストに取り込みます。

namespace Barの内容の中にあり、ステートメントnamespace Fooのある行の現在の名前空間はグローバル名前空間であるため、グローバル名前空間のコンテキストに持ち込まれます。usingnamespace Bar

于 2013-08-09T20:51:22.060 に答える