2011-01-26 24 views
2

在沒有任何虛擬功能的類層次結構中,由於dynamic_cast沒有爲RTTI存儲任何信息,它會表現爲簡單的static_cast,否則會出現錯誤?如果沒有單個虛函數,dynamic_cast是否像static_cast一樣工作?

+0

這個問題有一個簡單的答案:嘗試一下。這個特定問題的測試是微不足道的。 – 2011-01-26 15:13:53

+0

是的,這就是我對vitaut給出的答案所評論的。 – rkb 2011-01-26 15:21:39

回答

8

可以很容易地檢查:

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

int main(int argc, char **argv) { 
    A* a = new B(); 
    B* b = dynamic_cast<B*>(a); 
} 

G ++說:

error: cannot dynamic_cast 'a' (of type 'class A*') to type 'class B*' (source type is not polymorphic) 

BTW對於這種問題我覺得online llvm-gcc demo有用。

相關問題