将基对象返回到向上转换的派生类的最合适方法是什么

What is the most suitable way to return base object to up-casted derived class?

本文关键字:派生 是什么 方法 转换 对象 返回      更新时间:2023-10-16
struct B {};  // B contains data members
struct D : B {};  // D doesn't contain ANY data member
B g_b;  // global object
D& fun ()  // want to return by reference ONLY
{
  return <???>(g_b);  // how ???
}

[注意:我想避免重载构造函数(或赋值),例如D(const B&)

你想做的事情是非法的。 g_b不是D.

没有合适的演员阵容。这实际上是未定义的行为。

有关详细信息,请参阅本主题:向下转换基类型

注意:当您将 base 强制转换为派生类时,该术语

向下转换的;当您将派生类转换为基类时,将使用术语 upcast

这是

未定义的行为。
可以使用 dynamic_cast 对派生类指针/引用执行基类指针/引用的安全向下转换。它在指针的情况下返回 null,或者在引用的情况下引发异常。