c++ - 在静态上使用未命名的命名空间

标签 c++ static namespaces

我可以假定在未命名命名空间中声明的对象等同于 static 吗?

namespace { int x; };//  #1

static int x; // #2

FWIK,在这两种情况下,x 将具有静态存储持续时间和内部链接。
那么声明为 static 的对象的所有规则是否适用于未命名命名空间中的对象?

例如:

  • 构造和破坏的顺序是什么?会一样吗?
  • 我可以在未命名的命名空间中将 extern 关键字与 x 一起使用吗?

最佳答案

您的大部分问题都已得到解答 here.其余的:

What will be the order of construction and destruction? will it be same?

顺序与常规全局变量相同。所以它与静态不同。

话虽如此,我强烈敦促您编写不关心顺序的代码。对任何全局变量的特定初始化顺序的依赖越少越好。

Can I use extern keyword with x in unnamed namespace?

没有。为了extern 某些东西,你必须能够输入它的名字。未命名命名空间的神奇之处在于您不能键入它的名称。该名称由编译器分配。你不知道。因此,如果您尝试 extern 它,您将取而代之的是 externing 其他东西。

如果您在 header 中放置一个未命名的命名空间,则包含它的每个翻译单元都将获得该变量的不同版本。它们都是 extern,但它们会谈论一个不同的外部变量。

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

相关文章:

JavaParser提取注释参数值

php - PHP 函数可以返回对静态对象的引用吗?

c++ - 压缩成员的引用地址不等于压缩成员的地址?

c++ - 转换到较窄的 const 位置时是否暗示转换到 const?

java - 如果静态方法的定义不能被派生类覆盖/更改,为什么以及何时需要在派生类中重新声明静态方法?

C++,跨不同 namespace 的名称冲突

namespaces - 如何通过使用来模拟 "load-file"行为?

c++ - Clion 无法解析模板

c++ - 继承非默认

c# - var 关键字和使用 namespace