为什么我们不能在构造函数初始化列表中初始化静态变量,但可以在构造函数主体中初始化

德瓦什·阿格劳瓦尔(Devesh Agrawal)

我总是读取初始化列表,而不是使用构造函数进行变量初始化。我也知道静态变量可以在类外进行初始化。

但是我的问题是为什么我们不能在构造函数初始化列表中初始化静态变量,而可以在构造函数主体中初始化

class sample
{
    static int i;
public:
    sample (int ii=20) { i=ii;}
    void show()
    {
        cout << i << endl;
    }

};

int sample::i=12;

int main()
{
    sample s;
    s.show();
    return 0;
}

可以正常工作并打印20。但是我将构造函数替换为

sample (int ii=20): i(ii){}

它给出了错误。为什么?

约瑟夫·曼斯菲尔德

成员初始化列表表示初始化一个static部件在你的程序(之前的年初已经初始化main)。如果可以执行建议的操作,则将使用sample您创建的每个对象“重新初始化”静态成员,但是对象仅被初始化一次。

相反,如果要在初始化后更改对象的值,则必须分配给它。这就是您的第一个代码正在执行的操作i = ii;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我们不能调用servlet构造函数而不是init方法来初始化config参数?

在构造函数中初始化日历

为什么我们不能使用构造函数本身来初始化servlet?

在构造函数中初始化静态变量时,为什么Java不给出错误?

我们可以在构造函数内部初始化静态变量吗?

构造函数执行顺序/顺序:函数中静态变量(类实例)的依赖初始化

构造函数是否需要初始化静态变量?

为什么我不能通过Groovy中的构造函数内部的闭包来初始化最终类变量?

C ++入门说我们可以对“ = default”构造函数使用初始化列表

模板函数中的C ++静态变量初始化

在构造函数中初始化静态函数指针

是否可以在构造函数体内而不是初始化列表中初始化成员变量?

为什么final可以在构造函数中初始化?

为什么我的值未由初始化(参数化)构造函数初始化?

我们能否在Trie构造函数中初始化引用数组

我可以检查构造函数主体中在初始化列表中设置的变量吗?

在具有私有构造函数的类中初始化静态变量

为什么我们在构造函数中初始化对象

构造函数主体中的对象初始化

在构造函数中初始化静态字段

在构造函数中初始化的变量未保持初始化状态(C ++)

在构造函数中初始化流

在静态构造函数中初始化静态变量而不是直接赋值的好处是什么?

在类本身中初始化 TypeScript 变量与在构造函数中初始化的区别

我们不能在构造函数中初始化一个变量,如下所示?[角度2]

为什么我们不能使用scanf直接初始化struct中的变量?

我如何在初始化列表中的构造函数之后初始化变量/对象?

为什么我们不能延迟使用非默认构造函数初始化类成员?

为什么我不能使用构造函数初始化列表来初始化类内结构?