Копирование базовых подобъектов
От: Bork СССР  
Дата: 13.08.04 02:23
Оценка:
Здравствуйте, sergey_shandar, Вы писали:

Определение типа B:

struct C;
struct B
{
    B() {}
    B(const B &) { std::cout << "copy constructor" << std::endl; }
    B(const C &) { std::cout << "[cencored] constructor" << std::endl; }
};

--
ПК

_>Тип C, третий случай:

_>
_>struct C: B {};
_>

_>Вывод GCC 3.3.1, IMHO, правильно:
_>
_>copy constructor
_>

_>Вывод VC 7.1, IMHO, неправильно, бред какой то:

1. а не бред объявит в базовом классе конструктор, принимающий на вход экземпляр производного класса ?
2. компилятор естественно вызывает конструктор B(C), т.к. ему в этом случае не нужно преобразования типа (т.е. его поведение вполне соответствует стандарту), а если хочется другого (не стандартного)поведения, то сделай сам явное преобразование (твой пример выше это и демонстрирует). а вот поведение GCC мягко говоря некоректно.


26.08.04 02:07: Ветка выделена из темы Рекурсивный вызов конструктора на VC 7.1.
Автор: sergey_shandar
Дата: 11.08.04
— Павел Кузнецов
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.