小编典典

为什么要使用未命名的命名空间,它们有什么好处?

all

我刚刚加入了一个新的 C++ 软件项目,我正在尝试了解该设计。该项目经常使用未命名的命名空间。例如,类定义文件中可能会出现这样的情况:

// newusertype.cc
namespace {
  const int SIZE_OF_ARRAY_X;
  const int SIZE_OF_ARRAY_Y;
  bool getState(userType*,otherUserType*);
}

newusertype::newusertype(...) {...

可能导致使用未命名命名空间的设计注意事项有哪些?有什么优点和缺点?


阅读 88

收藏
2022-04-18

共1个答案

小编典典

未命名的命名空间是一种使标识符翻译单元本地化的实用程序。它们的行为就像您为命名空间的每个翻译单元选择一个唯一名称:

namespace unique { /* empty */ }
using namespace unique;
namespace unique { /* namespace body. stuff in here */ }

使用空主体的额外步骤很重要,因此您已经可以在命名空间主体中引用在该命名空间::name中定义的标识符,因为 using 指令已经发生。

这意味着您可以拥有(例如)help可以存在于多个翻译单元中的自由函数,并且它们不会在链接时发生冲突。效果几乎与使用staticC
中使用的关键字相同,您可以将其放入标识符的声明中。未命名的命名空间是一个更好的选择,甚至可以使类型转换单元成为本地的。

namespace { int a1; }
static int a2;

两者a都是本地翻译单元,不会在链接时发生冲突。但不同的是,a1匿名命名空间中的 获得了唯一的名称。

2022-04-18