有人可以向我解释为什么我不能在类中初始化一个静态变量?编译时间到底发生了什么?
例如:
class Object {
static int numberOfObjects = 0; // This gives the error
Object(){
nummberOfObjects++;
}
};
谢谢!
答案 0 :(得分:0)
这只是编译器实现的标准规则。事实上它是一个规则并不意味着相反是不可能的,因为新的C ++ 11标准和编制者的变化显示。
答案 1 :(得分:-2)
在C ++ 11之前的C ++版本中,语言标准根本不允许您在类声明中执行静态变量定义。换句话说,您无法初始化它,因为它不是常量。由于它可以在执行期间更改,因此编译器需要在某处分配一些内存以实际保留值。由于这是一个类声明,它实际上并没有为您分配内存。这个问题对于const值并不存在,因为它们不需要分配内存 - 它们实际上是"硬编码的"就像你用文字(或旧的' C'样式#define)替换它们一样。
你需要在类声明之外的一行代码基本上说:
int Object::numberOfObjects = 0;
这一行不仅仅是初始化静态类变量,而是实际分配一个用于存储值的静态int。类声明中的代码行不会这样做 - 它只是告诉编译器这样的值存在于某处。
请注意,从C ++ 11开始,这种行为是不同的。该语言现在足够聪明,可以确定您是否希望定义该内存,因此您不再需要手动执行此操作。