为什么要调用构造函数?
为什么s1()
在这里调用构造函数?
#include<iostream>
struct s1 {
s1(int tmp) {
}
s1() {
std::printf("s1 invoked");
}
};
struct s2 {
s1 s;
s2(s1& s) {
this->s = s;
}
};
int main() {
s1 o1(5);
s2 o2(o1);
return 0;
}
结果:
s1 invoked
为什么在s2(s1& s)
调用s1()
构造函数中按引用传递?
回答
鉴于实施s2(s1&)
:
s2(s1& s) {
this->s = s;
}
数据成员s
首先通过默认构造函数进行默认初始化,然后在构造函数体内分配。
您应该直接在成员初始值设定项列表中对其进行初始化。
s2(s1& s) : s(s) // direct-initialize data member s from parameter s
{}