2016-03-07 132 views
0

我有类似如下:我可以使用对派生类实例的基类引用初始化派生类引用吗?

class A { ... }; 
class B : public A { ... }; 

// ... 

B b; 
const A& aref(b); 

// ... 

const B& bref(aref); 

,当我编译,我得到:现在

no suitable user-defined conversion from "const A" to "const B" exists 

,如果这些都是指针,而不是引用,我会用

bptr = dynamic_cast<B*>(aptr); 

但引用没有。我该怎么办?切换到指针?别的东西?

回答

5

可以使用dynamic_cast为参考,他们只是抛出一个异常,而不是失败返回nullptr

try { 
    const B& bref(dynamic_cast<const B&>(aref)); 
} 
catch (const std::bad_cast& e) { 
    //handle error 
} 

如果您绝对知道aref实际上是一个B,那么你可以做一个static_cast

const B& bref(static_cast<const B&>(aref));