【发布时间】:2015-03-09 06:19:27
【问题描述】:
对于变量初始化,我总是优先阅读初始化列表而不是构造函数主体。我也知道静态变量可以在定义它们时在类之外初始化。
但我的问题是为什么我们不能在构造函数初始化列表中初始化静态变量,但我们可以在构造函数体中
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){}
它给出了错误。为什么?
【问题讨论】:
-
你没有在构造函数体中初始化它。您正在为它分配一个值。
-
因为C++是这样定义的:只能在
:之后和{之前初始化非静态成员变量 -
大家有没有看错问题?他们想知道为什么你不能在成员初始化列表中初始化一个静态成员。
标签: c++ constructor