【发布时间】:2014-07-13 01:19:10
【问题描述】:
我尝试下面的代码,并得到一个编译错误。
class A {};
class B : public A {};
void f(A*& p) {}
int
main()
{
B* pB;
f(pB); // cannot convert argument 1 from 'B *' to 'A *&'
return 0;
}
如何让 f(pB) 调用 f(A*&p) 函数?
【问题讨论】:
-
我的两分钱,但它想要超越下面的噪音。不能像这样转换引用类型的原因与不能像这样转换指针类型的原因是一样的。 A** 是指向指针的指针,B** 是指向指针的指针。虽然您可以将 B* 转换为 A*,但这并不意味着您可以将指针转换为它们。这就像试图将
int32_t*转换为uint32_t*:仅仅因为您可以将 int32_t 转换为 uint32_t(没有字节更改),它们的指针就会失去这种关系。
标签: c++ reference polymorphism pass-by-reference upcasting