【发布时间】:2014-09-01 04:06:28
【问题描述】:
为什么不发生静态数据成员的默认初始化?在下面的例子中
struct data_member
{
data_member(){ cout << "data_member\n"; }
~data_member(){ cout << "~data_member\n"; }
};
struct Y
{
static data_member m;
Y(){ cout << "Y\n"; }
~Y(){ cout << "~Y\n"; }
};
Y y; //call constructor of Y
但如果我们从data_member m 中删除static 说明符,它将被默认初始化。
struct data_member
{
data_member(){ cout << "data_member\n"; }
~data_member(){ cout << "~data_member\n"; }
};
struct Y
{
data_member m;
Y(){ cout << "Y\n"; }
~Y(){ cout << "~Y\n"; }
};
Y y; //call Y() and data_member()
【问题讨论】:
-
因为您没有提供
m的定义。 -
@CaptainObvlious 9.4.2/6:静态数据成员的初始化和销毁与非局部变量完全一样。这意味着必须执行默认初始化。
-
完全正确,只要你为它提供一个你没有做过的定义。
-
@CaptainObvlious 为什么非静态数据成员初始化?
-
@DmitryFucintv 非静态成员显然需要在构造对象时构造。静态成员声明不会导致构造,因为它只是声明成员的存在。
标签: c++ storage-duration