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

时间:2010-02-24 05:39:12

标签: c++

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

答案将受到高度赞赏。

感谢。

5 个答案:

答案 0 :(得分:26)

静态成员变量与类的每个对象都没有关联。它由所有对象共享。如果在ctor中初始化,则表示您尝试与特定的类实例关联。由于这是不可能的,因此不允许这样做。

答案 1 :(得分:5)

我认为你指的是在构造函数的初始化列表中使用它。静态数据成员在类的所有实例之间共享。它可以初始化一次(通过初始化的定义),因此为每个实例初始化它是没有意义的。

但是,您可以在构造函数体中为其赋值(或改变现有值)。或者,如果数据成员是常量,则可以在构造函数之外静态初始化它。

答案 2 :(得分:0)

静态变量不能在任何方法中定义(即使方法是静态的),但是您可以在构造函数外部定义静态变量,并在构造函数内部赋值。但通过这样做,变量将可供全班使用。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

成员初始化列表表示初始化static成员已在程序开头(main之前)初始化。如果你可以按照你的意思行事,那么你将会重新初始化" static成员包含您创建的每个对象,但对象仅初始化一次。

相反,如果要在初始化对象后更改对象的值,则必须指定