玩具代码如下:
class DD {
public:
int a{0};
int b{0};
DD(int a, int b): a(a), b(b) {}
};
void main() {
DD d1;
DD d2(d1);
}
这不会通过编译检查,因为我定义了DD(int a, int b)
的构造函数,编译器将不会使用该构造函数生成默认构造函数。但是,它似乎不影响DD(DD& d)
class DD {
public:
int a{0};
int b{0};
DD(int a, int b): a(a), b(b) {}
};
void main() {
DD d1(1, 2);
DD d2(d1);
}
为什么可以工作?似乎在定义DD(int, int)
时,编译器不会生成其他默认构造函数,但是为什么我仍然可以使用DD(DD&)
构造对象?