初始化列表中的C ++静态数据成员初始化

时间:2013-04-10 05:34:03

标签: c++

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

3 个答案:

答案 0 :(得分:9)

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

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

*例外适用

答案 1 :(得分:0)

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

答案 2 :(得分: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();


}

静态变量是类变量而不是实例变量。因此,必须使用类定义初始化这些静态变量。构造函数再次用于在创建对象时初始化对象的实例变量。全部说明。感谢