使用指令
关键字 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 指令不能在类范围内发生。