考虑:
struct Base{};
struct Derived: Base{};
int main() {
Derived *d{};
Base *&b = d; // Error: non-const reference to rvalue.
(void)b;
return 0;
}
如注释所示,赋值尝试将非const引用存储到rvalue。我了解rvalue是d
转换为Base *
。但是,如何解决此问题,以便通过分配到d
来更改b
?
答案 0 :(得分:1)
为了说明问题的原因,想象一下你有另一个结构
struct OtherDerived : Base
{};
现在考虑如果在定义b
之后添加以下行会发生什么b = new OtherDerived();
这个(如果允许的话)必须将d(其类型为Derived *)分配给OtherDerived *,这是无效的,因为OtherDerived不是从Derive派生的。
要解决此问题,您可以决定实际引用的指针是否需要是派生指针。如果不是,它可以是一个基指针,那么你对基指针的引用就可以了。
Derived *d{};
Base* pointerToABase = d;
Base*& refToAPointerToABase = pointerToABase;
否则,如果您引用的指针必须是Derived *而不是Base *,那么您可以更改引用的类型:例如用。替换b的声明。
Derived*& refToAPointerToADerived = d;
我知道这不是你在问题的标题中实际要求的 - 但正如所描述的那样,你不能这样做。
如果不知道为什么需要引用指针,很难建议另一种方法。