继承层次结构中指针到指针的转换
考虑以下 C 代码:
<code class="cpp">class Base { }; class Child : public Base { }; int main() { Child *c = new Child(); Base *b = c; // Allowed Child **cc = &c; Base **bb = cc; // Error: Conversion not allowed }</code>
转换限制的基本原理
最后一行中的编译器错误突出显示了从 Child** 到 Base** 的隐式转换的限制。施加此限制是为了维护类型安全。
如果允许此转换,则可能会导致意外和错误的情况。例如,可以编写:
<code class="cpp">*bb = new Base;</code>
这将创建 Base 的一个实例并将其地址存储在 bb 中,从而有效地覆盖 c 指向的原始 Child* 引用。这可能会导致数据损坏和不可预测的程序行为。
隐式转换的替代方案
虽然没有直接的方法可以将 Child** 隐式转换为 Base** 而无需依靠C风格或reinterpret_cast,有一些替代方法可以在保持类型安全的同时实现所需的功能。
以上是为什么在 C 继承中禁止从'Child”到'Base”的隐式转换?的详细内容。更多信息请关注PHP中文网其他相关文章!