在头文件中使用 "using"

Use of "using" in header files

本文关键字:using 文件      更新时间:2023-10-16

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

using namespace foo;

因为它将命名空间foo带入全局作用域,对于任何使用我的头文件的人。

如果我在自己的命名空间中这样做,我能防止这种情况发生吗?例如:

namespace my_lib
{
    using namespace foo;
    // my stuff
    // ...
}

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

是。这比在全局级别使用using namespace foo要好。

如果使用foo::name语法就更好了。

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

是的。它将名称空间foo中的所有名称都带到了名称空间my_lib中,这可能会导致名称空间my_lib中的名称冲突。这就是为什么foo::name是最优选的方法。

是的,如果您这样做,那么它只是将所有名称从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

只是认为如果您真正想要的是能够定义某些东西(如类)而无需一直编写特定的命名空间前缀,则可能会发现它很有用。