【发布时间】:2013-02-16 07:10:35
【问题描述】:
如果我有课:
Object.h
class Object
{
public:
static int number;
};
Object.cpp
int Object::number = 5;
Object::number 的范围是否保证比任何已创建的Object 实例的范围更持久?即使它是在另一个源文件中全局声明的?
【问题讨论】:
-
类静态和非静态实例的链接是有意的和不同的。即使
Object的没有 个实例存在,Object::number也会存在,更不用说任何Object的特定实例的寿命。只有一个(除非它是一个模板,但从技术上讲,这不是同一个 class,因为它是一个生成的推论)。 -
顺便说一句,您要问的是“终身”,而不是“范围”。范围是源文件中名称可见的部分。生命周期是对象存在的运行时间。
-
@WhozCraig:另一方面,我相信在初始化
Object::number之前,可以构造和使用Object的实例... -
@MooingDuck - 我认为这回答了 OP 的确切问题。
-
@MooingDuck 在我确认或否认这是可能的之前,我必须认真地将自己包装到标准中的对象生命周期和全局初始化及其格式定义中,但这丝毫不会让我感到惊讶如果它是。全局初始化对我来说总是很容易出错,所以我尽量避免它。
标签: c++ class static global-variables