gpt4 book ai didi

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

转载 作者:bug小助手 更新时间:2023-10-28 01:30:41 26 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

The use of the static keyword isdeprecated when declaring objects in anamespace scope, the unnamed-namespaceprovides a superior alternative.

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

编辑:

不赞成使用 static 关键字(影响翻译单元中变量声明的可见性)的决定已被撤销(ref)。在这种情况下,使用 static 或未命名的 namespace 本质上是两种做同样事情的方式。更多讨论请见 this所以问题。

未命名的namespace 仍然具有允许您定义翻译单元本地类型的优势。请看 this SO问题了解更多详情。

归功于 Mike Percy为了引起我的注意。

关于c++ - 未命名/匿名命名空间与静态函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/154469/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com