我试图将基类对象转换为派生类对象dynamic_cast
,但dynamic_cast
返回null。是否有可能使用dynamic_cast
倒置?使用dynamic_cast向下转换返回null
struct A {
virtual ~A() {}
};
struct B : A {};
int main()
{
A* a = new A();
B* b = dynamic_cast<B*>(a);
if(b){
std::cout << "b has value" << std::endl;
}else{
std::cout << "no value" << std::endl;
}
}
此代码打印出“没有值”。
FYI铸造*向下*继承链被称为向下铸造。 – NathanOliver
你不能从A那里得到一个B,这个语言会怎么做,例如, B实例拥有比A实例更多的数据成员? –
你不能将'a'降为'B *',因为它不指向'B',它指向'A':'A'不是'B'。然而,你可以将'B *'转换为'A *',因为'B *'会指向一个B,这个“是一个”A(继承的定义) – KABoissonneault