Я столкнулся с некоторыми вопросами о списке инициализации конструктора, когда я столкнулся с этим.
Рассмотрим это:
class Student {
public:
Student() {
id = 0;
}
Student(int i) {
id = i;
}
private:
int id;
};
Теперь, проверьте это:
К тому моменту, когда вы попадаете в тело конструктора, все поля уже построены; если у них есть конструкторы по умолчанию, они уже вызывались. Теперь, если вы назначили им значение в теле конструктора, вы вызываете конструктор копирования. Это неэффективно, потому что два конструктора в конечном итоге вызывают вместо одного.
Источник: Что делает двоеточие после имени конструктора С++?
Итак, означает ли это, что когда я вызываю конструктор без параметров, конструктор копирования также вызывается?
Пожалуйста, объясните. Это действительно запутывает.
В частности, значение первой строки:
К тому моменту, когда вы попадаете в тело конструктора, все поля уже построены