【发布时间】:2015-06-25 04:57:47
【问题描述】:
来自 Scott Meyers Effective C++:
如果你从不调用模拟非本地静态对象的函数,你 永远不会产生构建和破坏对象的成本, 对于真正的非本地静态对象来说,这是不能说的。
功能:
FileSystem& tfs()
{
static FileSystem fs;
return fs;
}
但标准说:
使用静态的块范围实体的常量初始化 (3.6.2) 存储持续时间(如果适用)在其块被执行之前执行 第一次进入。 允许提前执行 使用静态或线程初始化其他块范围变量 在与实现相同的条件下的存储持续时间 允许用静态或线程静态初始化变量 命名空间范围内的存储持续时间 (3.6.2)。
这意味着即使我们不调用函数tfs(),我们也无法确定fs 变量是否已初始化。因为允许实现对具有静态存储持续时间的变量执行早期初始化。
谁是对的,或者我错过了什么?
【问题讨论】:
-
如有疑问,请相信规范。 Effective C++ 于 1992 年发布,也许事情已经发生了变化。
标签: c++ initialization