왜 정적 데이터 멤버의 기본 초기화가 발생하지 않습니까? 우리가 data_member m
에서 static
지정을 삭제하면 다음 예에서정적 데이터 멤버 초기화
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
하지만 기본 초기화 될 것입니다.
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 : _ 정적 데이터 멤버는 초기화되지 않고 비 로컬 변수와 똑같이 파괴됩니다. 이는 기본 초기화가 수행되어야 함을 의미합니다. –
당신이 해보지 못한 정의를 제공하는 한 말 그대로입니다. –