Рассмотрим эту программу:
struct Base1 { void *x; virtual ~Base1() { } };
struct Base2 { void *x; virtual ~Base2() { } };
struct Derived : Base1, Base2 { };
int main()
{
Derived d;
return &d == static_cast<void *>(static_cast<Base1 *>(&d));
}
Во всех моих тестах на Clang, G CC и Visual C ++ возвращаемое значение 1
.
Я понимаю, что C ++ не На самом деле это не гарантирует.
Однако, практически говоря , безопасно ли на это полагаться? (Предположим, что нет виртуального наследования. Изменить: Я предполагаю полиморфные c базовые классы.)
Какие реалистичные c ситуации существуют (если есть), в которых указатель на производный класс потребует корректировки, прежде чем его можно будет использовать в качестве указателя на его первый (не виртуальный, полиморфный c) базовый класс?