gpt4 book ai didi

c++ - 使用引用向下转换非指针

转载 作者:行者123 更新时间:2023-11-30 01:54:07 27 4
gpt4 key购买 nike

我想知道父类的子类型。问题是我得到的父类是通过引用 & 从函数返回的。我无法解决它。下面是一段代码示例:

class A : public B { ... }

B& getB() { return _b; }

main ()
{
...
B aux = getB(); //this already gives me problems
// ?? now what I have to do to know if B is a an A?
}

谢谢

最佳答案

看到你定义aux成为B , 它真的会是一个 B , 即使getB实际上返回了对 A 的引用.这称为切片,几乎肯定不是您想要的;无法撤消它。

发生的原因是你复制了getB的返回值.相反,如果您像这样绑定(bind)引用

B& aux = getB();

然后 aux会简单地引用任何getB回来了。如果您确定引用 getB返回绑定(bind)到 A你可以使用 static_cast<A&>(aux)访问 A它的一部分。如果您不确定,但如果您知道 B至少有一个虚函数,可以用dynamic_cast<A&>(aux) ;如果失败,它将抛出异常。

也就是说,如果您有一个指向基类型的引用或指针,试图找出它 secret 引用的派生类型通常是糟糕设计的标志。如果该值属于您还不知道的类型,会发生什么情况?您很可能想将此逻辑放入虚拟成员函数中,或者可能想要更多 union-like structure .

关于c++ - 使用引用向下转换非指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22376944/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com