在初始化列表中初始化c++静态数据成员

C++ static data members initialization in initialization list

本文关键字:初始化 静态 数据成员 c++ 列表      更新时间:2023-10-16

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

你错了。它们可以在类定义之外的单个翻译单元中初始化*,也可以在构造函数中将赋值给

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

<子> *例外适用

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

让我们试试这个更具体的

#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();

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