我可以假定在未命名命名空间中声明的对象等同于 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/