準確地說,爲什麼B b = (B&) a
編譯和工作,而B b = (B) a
不在下面的程序?在C++中,爲什麼要引用派生類型的引用?
#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)不存在。
你這是什麼MEAM的 「爲什麼」?你是否需要標準中的引用來指定這種行爲?或者一個深刻的哲學理由,爲什麼這樣做會是一個壞主意? –
顯然是第一個。我不知道爲什麼標準允許轉換爲派生類型引用,但不能派生類型實例。如果引用是通過標準解釋爲指針,那將是有意義的。 –
當你需要的是''\ n''時,不要使用'std :: endl'。 –