小编典典

未命名/匿名命名空间与静态函数

all

C++ 的一个特性是能够创建未命名(匿名)命名空间,如下所示:

namespace {
    int cannotAccessOutsideThisFile() { ... }
} // namespace

你会认为这样的特性是没有用的——因为你不能指定命名空间的名称,所以不可能从外部访问其中的任何内容。但是这些未命名 的命名空间可以在创建它们的文件中
访问,就好像您对它们有一个隐含的 using 子句一样。

我的问题是,为什么或什么时候这比使用静态函数更可取?或者他们本质上是做同样事情的两种方式?


阅读 153

收藏
2022-03-06

共1个答案

小编典典

C++ 标准在第 7.3.1.1 节未命名命名空间,第 2 段中写道: ~~~~

在命名空间范围内声明对象时,不推荐使用 static 关键字,未命名命名空间提供了更好的选择。

静态仅适用于对象、函数和匿名联合的名称,不适用于类型声明。

编辑:

弃用关键字的这种使用static(影响翻译单元中变量声明的可见性)的决定已被撤销(ref)。在这种情况下,使用 astatic
unnamednamespace本质上是两种做同样事情的方式。

Unnamednamespace仍然具有允许您定义翻译单元本地类型的优势。

2022-03-06