使用具有虚函数的协变返回类型的C ++无效转换错误

时间:2015-07-14 18:39:59

标签: c++ c++11 virtual-functions covariant-return-types

在下面的代码中,我可以将ng-init的返回值指定给指向ng-init的指针,但不指向指向D::clone()的指针。是否可以从基指针的调用中返回实际的多态类型?

B

1 个答案:

答案 0 :(得分:4)

没有。在clone()的基础B上致电D会将D*广告投放回B*

如果您绝对肯定,可以通过static_cast<D*>来解决此问题,如果您不确定,可以执行dynamic_cast<D*>。如果您确定,那么您应该将变量b变为D*

在C ++中,您应该在编译时编码您对程序状态的了解,而不管运行时的情况如何。通过将D*存储到B* b,您告诉编译器“知道”指向的数据“是D”。相反,您说“使用B*b的代码应该对任何指向B的指针有效。显然D* d = b->clone();不能保证对每个指针有效B }}