使用指令
關鍵字 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 namespace
s 被視為壞風格。如果這樣做,則會在包含標頭的每個檔案中匯入名稱空間。由於沒有“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 指令不能在類範圍內發生。