我明白了,我不应该在头文件中使用它:
using namespace foo;
因为它为任何使用我的头文件的人带来了全局范围内的命名空间foo。
如果我在自己的命名空间中执行此操作,是否可以防止这种情况发生?例如:
namespace my_lib
{
using namespace foo;
// my stuff
// ...
}
现在,使用命名空间foo应该限制在命名空间my_lib的范围内,对吗?
答案 0 :(得分:7)
是。这比在全球范围内使用using namespace foo
要好。
如果使用foo::name
语法,那就更好了。
现在,使用命名空间foo应该限制在命名空间my_lib的范围内,对吗?
是。它将名称空间foo
中的所有名称带入名称空间my_lib
,这可能会导致my_lib
中的名称冲突。这就是为什么foo::name
是最优选的方法。
答案 1 :(得分:0)
是的,如果您这样做,那么它只会将foo
中的所有名称带入my_lib
- 正如其他人所指出的那样,这可能是也可能不合适。
除了其他人所说的,我还会观察到的一件事是你可以使用'命名空间中的using指令'作为模拟限制为类范围的using指令的方法。请注意,这是非法的:
class C
{
using namespace boost; // for example
// ...
};
但你可以这样做:
namespace C_Namespace {
using namespace boost;
class C
{
};
}
using C_Namespace::C; // bring C itself back into the global namespace
如果您真正想要的是能够定义某些内容(如类)而不是一直编写特定的名称空间前缀,那么您可能会觉得它很有用。