Здравствуйте, AlexTAI, Вы писали:
ATA>Почему следующий код
ATA>[ccode]
...
ATA>скомпилированный g++ выдает
ATA>ATA>BBBBBBBB
ATA>CCCCCCC
ATA>DDDDDD
ATA>Есть идеи почему???
ATA>Почему компайлер ставит оба вызова (порядок мало интересен — он понятен)? Вроде должен быть или один или ошибка компиляции.
ATA>(Если кто то знает по какому правилу стандарта оно себя так ведет — был бы рад узнать номер правила)
Хм... А как это может по-другому работать, просто у меня даже идей на этот счет нет?
Ну смотри, ты один объект класса D присваиваешь другому объекту того же класса. Соответствующего оператора копирования в D нет, потому используется оператор копирования по умолчанию. Это означает, что будут просто вызваны операторы копирования для всех членов класса. В результате, мы видим на экране строки:BBBBBBBB и CCCCCCC. Полет идет нормально. Далее, ты присваиваешь объекту класса D объект класса C, но на этот раз в классе D есть подходящий оператор копирования, он и вызывается. Результат — строка DDDDDD. В чем проблема?