У меня возник спор с одним человеком, я говорю что в этом классе создается конструктор по умолчанию, т.е. он создается неявно, а мой оппонент говорит что он не создается, аргументируя это тем что нельзя сделать так :
ex obj;
Компилятор говорит, что нету конструктора по умолчанию.
А ведь он есть, да ?
K>Компилятор говорит, что нету конструктора по умолчанию. K>А ведь он есть, да ?
Как невидимый заяц? Нет уж, умерла так умерла — если компилятор говорит, что конструктора нет, значит его нет.
K>class ex
K>{
K> int a;
K>public:
K> ex(int p) { a = p; }
K>};
K>
K>У меня возник спор с одним человеком, я говорю что в этом классе создается конструктор по умолчанию, т.е. он создается неявно, а мой оппонент говорит что он не создается, аргументируя это тем что нельзя сделать так :
K>
K>ex obj;
K>
K>Компилятор говорит, что нету конструктора по умолчанию. K>А ведь он есть, да ?
Нет его. Если ты определил какой-нить конструктор, компилятор уже не создаёт тривиальный конструктор по-умолчанию.
K>class ex
K>{
K> int a;
K>public:
K> ex(int p) { a = p; }
K>};
K>
K>У меня возник спор с одним человеком, я говорю что в этом классе создается конструктор по умолчанию, т.е. он создается неявно, а мой оппонент говорит что он не создается, аргументируя это тем что нельзя сделать так :
K>
K>ex obj;
K>
K>Компилятор говорит, что нету конструктора по умолчанию. K>А ведь он есть, да ?
Нету его. Если программист определил хоть один конструктор явно, то компилятор "умывает руки".
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Vamp, Вы писали:
LVV>>Если программист определил хоть один конструктор явно, то компилятор "умывает руки". V>Ни фига. А copy-ctor?
Да, конструктор копирования вроде создается всегда — не совсем помню это место.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
D>Нет его. Если ты определил какой-нить конструктор, компилятор уже не создаёт тривиальный конструктор по-умолчанию.
Маленькое уточнение. Создаваемый НЕЯВНО компилятором конструктор по умолчанию не обязательно тривиальный (правильнее сказать всегда нетривиальный — тривиальный он и генерить не станет)
Of course, the code must be complete enough to compile and link.
LVV>Да, конструктор копирования вроде создается всегда — не совсем помню это место.
Не, не всегда. Допустим, вы его явно определите. Или, допустим, конструктор копий базового класса или какого-нибудь из членов закрыт — тут невозможно сгенерировать неявный конструктор копирования.
Of course, the code must be complete enough to compile and link.
Здравствуйте, Lorenzo_LAMAS, Вы писали:
L_L>Маленькое уточнение. Создаваемый НЕЯВНО компилятором конструктор по умолчанию не обязательно тривиальный (правильнее сказать всегда нетривиальный — тривиальный он и генерить не станет)
А что понимается под понятием нетривиальный конструктор по умолчанию ? Побайтовое копирование?
HgLab: Mercurial Server and Repository Management for Windows
Н>А что понимается под понятием нетривиальный конструктор по умолчанию ? Побайтовое копирование?
С какого перепою? Вызов конструкторов копирования для всех членов-объектов.
Здравствуйте, Lorenzo_LAMAS, Вы писали:
LVV>>Да, конструктор копирования вроде создается всегда — не совсем помню это место.
L_L>Не, не всегда. Допустим, вы его явно определите. Или, допустим, конструктор копий базового класса или какого-нибудь из членов закрыт — тут невозможно сгенерировать неявный конструктор копирования.
Не, это понятно! Я имел ввиду, при отсутствии явного определения. А при закрытых членах ошибка выдается? или молча не генерится?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Vamp, Вы писали:
Н>>А что понимается под понятием нетривиальный конструктор по умолчанию ? Побайтовое копирование? V>С какого перепою? Вызов конструкторов копирования для всех членов-объектов.
О-о-о-о, все. На покой, на покой ...
HgLab: Mercurial Server and Repository Management for Windows
LVV>>Не, это понятно! Я имел ввиду, при отсутствии явного определения. А при закрытых членах ошибка выдается? или молча не генерится?
L_L>При попытке инициализации копированием выдается сообщение об ошибке
Спасибо!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>>>Если программист определил хоть один конструктор явно, то компилятор "умывает руки". V>>Ни фига. А copy-ctor? LVV>Да, конструктор копирования вроде создается всегда — не совсем помню это место.
Если явно не указать, то копиктор, присваивание и деструктор (тривиальные) создаются по требованию. Нет требования — нет и методов.