为什么我不能在构造函数中初始化静态数据成员

25

我在Parashift上读到了答案,但我需要更详细的解释,为什么编译器不允许在构造函数中定义静态成员变量。

我阅读了Parashift上的答案,但我需要更详细的说明,为什么编译器不允许在构造函数中定义静态成员变量。
5个回答

39

静态成员变量不与类的每个对象相关联,它是由所有对象共享的。如果你在构造函数中初始化,则意味着你正在尝试与类的特定实例相关联。由于这是不可能的,所以是不被允许的。


5
我猜您是指将其用于构造函数的初始化列表。静态数据成员在类的所有实例之间共享。它可以通过“初始化”的定义进行一次初始化,因此为每个实例进行初始化是没有意义的。但您可以在构造函数体中给它赋值(或更改现有值), 如果数据成员是一个常量,则可以在构造函数之外静态地初始化。

0

静态变量不能在任何方法内定义(即使该方法是静态的),但您可以在构造函数外部定义静态变量并在构造函数内部分配值。但是,这样做将使变量对整个类可访问。


0

1) 静态变量是类的属性,而不是对象的属性。 2) 任何静态变量都会在创建任何对象之前进行初始化。

  • 这就是为什么编译器不允许在构造函数内定义静态变量,因为构造函数将在创建对象时调用。

0
成员初始化列表表示初始化。一个静态成员在程序开始时(在主函数 main 之前)已经被初始化。如果你能做你所建议的,你将会对每个创建的对象"重新初始化"静态成员,但是对象只会被初始化一次。
相反,如果你想要在对象被初始化后改变它的值,你必须给它赋值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接