Код игрушки выглядит следующим образом:
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&)
?