我编写以下测试代码:
#include <iostream>
using namespace std;
class Date {
int d;
int m;
int y;
public:
static Date default_date;
public:
Date(int d, int m, int y) {
default_date.display();
this->d = d ? d : default_date.d;
this->m = m ? m : default_date.m;
this->y = y ? y : default_date.y;
}
void display() { std::cout << d << "-" << m << "-" << y << std::endl; }
};
Date Date::default_date(25, 12, 2018);
int main() {
Date d = Date(0, 0, 0);
d.display();
Date::default_date.display();
}
,输出为:
0-0-0
25-12-2018
25-12-2018
25-12-2018
好的,这是我的问题。
静态成员default_date
在类定义之外并使用类的构造函数进行了初始化。
但是,当调用构造函数时,似乎default_date
已经存在。我什至执行default_date.display()
并获得输出0-0-0
。
为什么default_date
可以在构造/初始化之前访问?
答案 0 :(得分:2)
首次调用构造函数是default_date
的初始化点。在此构造函数内部,在为成员分配其假定值之前,构造函数构造函数调用display()
,该函数将打印成员的零初始化值。