我是否可以假设在未命名的命名空间中声明的对象与static
相同?
namespace { int x; };// #1
static int x; // #2
FWIK,在这两种情况下,x
都将具有静态存储持续时间和内部链接
声明为static
的对象的所有规则是否也适用于未命名的命名空间中的对象?
例如:
extern
关键字和x
吗? 答案 0 :(得分:8)
您的大部分问题都已得到解答here.其他问题:
建筑和破坏的顺序是什么?它会一样吗?
顺序与常规全局变量相同。所以它与静态不同。
话虽如此,我强烈敦促您编写不关心订单的代码。你依赖于任何全局变量的特定初始化顺序越少越好。
我可以在未命名的命名空间中使用带有x的extern关键字吗?
没有。为了extern
某事,您必须能够输入其名称。未命名的命名空间的神奇之处在于无法键入其名称。该名称由编译器分配。你不知道。因此,如果您尝试extern
,那么您将改为将其他内容包括在外。
如果在标题中放入未命名的命名空间,则包含它的每个翻译单元都将获得该变量的不同版本。他们都是extern
,但他们会谈论不同的外部变量。
答案 1 :(得分:2)
两者都有内部链接(仅在c ++ 11中未命名的命名空间中的链接),但未命名的命名空间中的链接不是全局命名空间的成员。例如,您可以将x放入未命名的命名空间和全局命名空间,它们不会发生冲突。