在头文件中使用“using”

时间:2011-05-03 11:38:15

标签: c++ namespaces using

我明白了,我不应该在头文件中使用它:

using namespace foo;

因为它为任何使用我的头文件的人带来了全局范围内的命名空间foo。

如果我在自己的命名空间中执行此操作,是否可以防止这种情况发生?例如:

namespace my_lib
{
    using namespace foo;

    // my stuff
    // ...
}

现在,使用命名空间foo应该限制在命名空间my_lib的范围内,对吗?

2 个答案:

答案 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

如果您真正想要的是能够定义某些内容(如类)而不是一直编写特定的名称空间前缀,那么您可能会觉得它很有用。