происходит ли неявное преобразование указателя во время назначения?

Например,

int x = 3;
float * ptr = (float*)&x;  // here compiler does not implicitly do conversion, but we have to manually convert to float*   

поэтому мой вопрос, почему здесь нам не нужно конвертировать его вручную.

Base_Class * ptr = Derived_Class pointer;

здесь происходит неявное преобразование?


person sparsh goyal    schedule 13.05.2021    source источник
comment
Да, преобразование производного указателя в базовый указатель может происходить неявно. В отличие от int * -> float *, потому что это несвязанные типы.   -  person HolyBlackCat    schedule 13.05.2021


Ответы (1)


здесь компилятор неявно не выполняет преобразование

Поскольку int и float являются несвязанными типами. Доступ к одному, как если бы это был другой (каламбур), — это неопределенное поведение.

Почему здесь происходит неявное преобразование

Потому что доступ к производному объекту через указатель базового типа является фундаментальным механизмом, с помощью которого работает полиморфизм времени выполнения.

person bolov    schedule 13.05.2021