Unnamed/anonymous namespaces vs. static functions未命名/匿名命名空间 vs 静态函数
Unnamed/anonymous namespaces vs. static functions未命名/匿名命名空间 vs 静态函数
C++的一项特性是能够创建无名(匿名)命名空间,像这样:
namespace { int cannotAccessOutsideThisFile() { ... } } // namespace
你可能会认为这样的功能是无用的 - 由于无法指定命名空间的名称,因此无法从外部访问其中的任何内容。但是,在创建它们的文件中,这些无名命名空间可以像隐式使用它们一样被访问。
我的问题是,为什么或何时使用这种方法比使用静态函数更可取?或者它们本质上是使用完全相同的方法?
admin 更改状态以发布 2023年5月22日
C++标准在第7.3.1.1节未命名的命名空间的第2段中写道:
声明位于命名空间范畴内的对象时,
static
关键字的使用已过时,未命名命名空间提供了一种更好的替代方法。
static
关键字只适用于对象、函数和匿名联合体的名称,而非类型声明。
编辑:
严格控制使用static
关键字(影响翻译单元中变量声明的可见性)的决策已被撤销(参见)。在这种情况下,使用static
或无名namespace
都是基本相同的两种方法。更多讨论请参见这个SO问题。
未命名的namespace
仍然具有允许定义翻译单元本地类型的优势。有关详细信息,请参见这个SO问题。
Mike Percy在此处提到,对此表示感谢。