【发布时间】:2012-11-04 00:10:23
【问题描述】:
从 C++11 标准的角度来看,对象状态/属性之间是否存在技术差异:
namespace
{
int foo;
const int bar = 42;
}
和
namespace
{
static int foo;
static const bar = 42;
}
?
从这里的问题和答案中,我相信匿名命名空间中的对象是隐式静态的,但是有人告诉我它只是内部的链接,编译器不会将对象视为标记为静态的对象,其含义类似于它的含义将实现对象构造。所以我需要一些关于它真正含义的细节,如果在匿名命名空间中使用和不使用静态之间存在差异。
【问题讨论】:
-
理论上,在匿名
namespace中声明的extern变量是简单的static变量的优越 替代方案。这就是为什么“静态全局变量”在 C++11 之前被弃用的原因。然而,“未命名命名空间内的外部变量”并不是“静态全局变量”的确切替换,它们是在 C++11 之后被带回来的!