使用指令

關鍵字 using 有三種口味。結合關鍵字名稱空間,你可以編寫使用指令

如果你不想在名稱空間 Foo 中的每個東西前面寫 Foo::,你可以使用 using namespace Foo;Foo 匯入每一個東西。

namespace Foo
{
    void bar() {}
    void baz() {}
}

//Have to use Foo::bar()
Foo::bar();

//Import Foo
using namespace Foo;
bar(); //OK
baz(); //OK

也可以在名稱空間而不是整個名稱空間中匯入所選實體:

using Foo::bar;
bar(); //OK, was specifically imported
baz(); // Not OK, was not imported

需要注意的是:在大多數情況下,標頭檔案中的 using namespaces 被視為壞風格。如果這樣做,則會在包含標頭的每個檔案中匯入名稱空間。由於沒有“un-using”名稱空間,這可能導致名稱空間汙染(全域性名稱空間中更多或意外的符號),或者更糟糕的是衝突。有關問題的說明,請參閱此示例:

/***** foo.h *****/
namespace Foo
{
    class C;
}

/***** bar.h *****/
namespace Bar
{
    class C;
}

/***** baz.h *****/
#include "foo.h"
using namespace Foo;

/***** main.cpp *****/
#include "bar.h"
#include "baz.h"

using namespace Bar;
C c; // error: Ambiguity between Bar::C and Foo::C

一個 using 指令不能在類範圍內發生。