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&)
。]
答案 0 :(得分:5)
你要做的是非法的。 g_b
不是D
。
答案 1 :(得分:2)
没有合适的演员。这实际上是未定义的行为。
有关详细信息,请参阅此主题:Downcasting a base type
注意:当您将基类转换为派生类时,术语是向下转换;当您将派生类型转换为基类时,将使用术语 upcast 。
答案 2 :(得分:1)
这是未定义的行为。
您可以使用dynamic_cast
执行基类指针/对派生类指针/引用的引用的安全向下转换。它在指针的情况下返回null,或者在引用的情况下抛出异常。