派生类和基类之间指针指针的转换?
关于下面的C ++程序:
class Base { }; class Child : public Base { }; int main() { // Normal: using child as base is allowed Child *c = new Child(); Base *b = c; // Double pointers: apparently can't use Child** as Base** Child **cc = &c; Base **bb = cc; return 0; }
GCC在最后的赋值语句上产生以下错误:
error: invalid conversion from 'Child**' to 'Base**'
我的问题分两部分:
- 为什么没有从Child **到Base **的隐式转换?
- 我可以使这个例子使用C风格的转换或
reinterpret_cast
。 使用这些铸件意味着扔掉所有types的安全。 有没有什么我可以添加到类定义,使这些指针隐式static_cast
转换,或至less短语转换的方式,使我可以使用static_cast
?
如果这是允许的,你可以这样写:
*bb = new Base;
而c
最终会指向Base
一个实例。 坏。