我总是读取初始化列表,而不是使用构造函数进行变量初始化。我也知道静态变量可以在类外进行初始化。
但是我的问题是为什么我们不能在构造函数初始化列表中初始化静态变量,而可以在构造函数主体中初始化
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] 删除。
我来说两句