我的代码看起来有点像这样:
struct Ifoo: virtual public Ibar {
...
}
struct foo : public Ifoo, public bar {
...
}
一个声明为:
的函数bool function(Ifoo *&ref);
它的名字如下:
foo *variable = new foo();
bool value = function(dynamic_cast<Ifoo*>(foo));
我收到以下错误:
_No known conversion between types Ifoo* and Ifoo*&_
但是,如果我执行以下操作:
Ifoo *variable = new foo();
bool value = function(foo);
然后它的作品! 我真的不明白为什么。你能帮我个忙吗?
答案 0 :(得分:1)
演员表的结果是暂时的。您不能将临时值与非常量左值引用绑定。
为什么要通过引用传递指针?该功能是否会修改它?如果函数存储指向Ifoo
的不同子类的指针,那么类型安全会发生什么?
答案 1 :(得分:0)
foo*
是Ifoo*
。转换是隐含的。当您不知道您拥有的指针是否属于其他类型并且您想要在运行时通过检查dynamic_cast
是否返回dynamic_cast
来检查时,会使用NULL
。
此外,如果function
无意重新分配您传入的指针,则无需传入*&amp;。只需通过*。
答案 2 :(得分:0)
您的函数签名bool function(Ifoo *&ref);
要求指向引用的指针。这与仅询问普通指针的bool function(Ifoo* ref);
不同。只需使用Ifoo* ref
即可。