Приведение базового класса в конструкторе потомка
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 02.09.19 14:22
Оценка:
Компиляторы MS VC++ на такой вот код:

struct Base {
  int a;
  int b;
};

struct Derived : public Base {
  Derived (Base const B) { *this = B; }
};

Derived f (Base const B) {
  return B;
}


стабильно жалуются на то, что конструктор Derived получается рекурсивным за счет того, что для преобразования Base к Derived используется он же.

Это особенность компиляторов MS, или оно везде так?

Если бы данных в классе было много, можно было бы копировать через приведение указателей, но структуры до 64 разрядов укладываются в "интегральный тип", хорошо обрабатываются в константных выражениях, и без проблем передаются на регистрах.

Можно ли как-то заставить компилятор приводить типы совсем тупо? Ни reinterpret_cast, ни function-style cast, ни C-style cast не помогают.

Знаю, что можно включить Base в Derived вместо наследования, и наделать операторов преобразования, но хотелось бы именно с наследованием.
base derived constuctor type conversion cast базовый потомок тип приведение преобразование
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.