确切地说,为什么B b = (B&) a
编译和工作,而B b = (B) a
在下面的程序中没有?
#include <iostream>
using namespace std;
class A {public: void f(){ cout<<"A"<<endl;} };
class B : public A { public: void f(){cout<<"B"<<endl;} };
void g(A a){ B b = (B&) a; b.f(); }
int main() {
B b; g(b);
return 0;
}
有没有关于我在这里遗漏的引用转换为派生类型的东西?如果我只是转换为 B,它会给出一个编译时错误,即构造函数 B(A a) 不存在。