如果我没有指定显式转换到Base **,为什么会出现编译错误?铸造到派生类ptr到ptr
我可以在处理派生类时使用指针指针吗?
class Base { };
class Child : public Base { };
void SomeFunction(Base** ppoObj) {}
void SomeFunction(Base* poObj) {}
int main()
{
Child *c = new Child();
// This passed.
SomeFunction(c);
SomeFunction((Base**)&c);
// CompilationError
SomeFunction(&c);
return 0;
}
当我使用SomeFunction((Base **)&c)时,我的程序运行良好。 运行时可能会出现哪些问题? @Wyzard –
对,没有*隐式*演员。你的显式强制覆盖了编译器的类型检查 - 就像你可以将一个Child1 *转换为一个Child2 *一样,即使它们是不相关的类型。将'Child **'强制转换为'Base **'应该可以,只要你只指定兼容类型的指针(即不要做我在这个例子中做的)。 – Wyzard