0

例如

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;

这里是否发生隐式转换?

4

1 回答 1

3

这里编译器不会隐式进行转换

因为intfloat不相关的类型。像访问另一个一样访问一个(类型双关语)是未定义的行为。

为什么这里会发生隐式转换

因为通过 base 类型的指针访问派生对象是运行时多态性工作的基本机制。

于 2021-05-13T07:06:09.727 回答