0

为什么静态数据成员不能在构造函数的初始化列表中初始化,而可以在构造函数的定义中完成?

4

3 回答 3

10

你理解错了。它们可以在类定义*之外的单个翻译单元中初始化,并且可以在构造函数中分配给它们。

您只能static在构造函数的初始化列表中初始化当前的非类成员。

*有例外情况

于 2013-04-10T05:36:22.360 回答
0

静态成员在类范围内,即它们是类变量而不是实例变量。我们通过构造函数初始化实例。由于静态变量不是针对实例而是针对整个类,因此静态变量不会由构造函数初始化。谢谢

于 2013-04-10T06:42:13.607 回答
0

让我们更具体地尝试一下

#include <iostream>

using namespace std;

class classWithStaticVariable
{

    static int aStaticVariable;

    int aNormalInstanceVariable;
public:
    classWithStaticVariable(int aParameter)
    {

        aNormalInstanceVariable=aParameter;

        aStaticVariable=aNormalInstanceVariable;/////It is possible to assign value to static data member in constructor but not possible to init it.

    }

    void aTestFunctionJustToPrint()
    {


        cout<<aStaticVariable<<aNormalInstanceVariable;
    }



};
int classWithStaticVariable::aStaticVariable=1;

int main()
{

    classWithStaticVariable t(2);

    t.aTestFunctionJustToPrint();


}

静态变量是类变量而不是实例变量。所以这些静态变量必须用类定义初始化。同样,构造函数用于在创建对象时初始化对象的实例变量。仅此而已。谢谢

于 2013-04-24T10:44:47.130 回答