2011-08-30 56 views
15

私が読んだことによると、間違った実行時のdynamic_castを実行すると、bad_cast例外がスローされるか、ゼロが返されます。dynamic_castはどのように失敗しますか?

ポインタをキャストしている場合、ゼロが返されるとはいいですか?

すなわち:

class Base { virtual void a(){} }; 
class Derived: public Base {}; 

int main() { 
    Base *base = new Base(); 
    dynamic_cast<Derived*>(base); 
    return 0; 
} 

やオブジェクトをキャストするとき、それはbad_cast例外がスローされますこと?

すなわち:

class Base { virtual void a(){} }; 
class Derived: public Base {}; 

int main() { 
    Base base; 
    Base& ref = base; 
    dynamic_cast<Derived&>(ref); 
    return 0; 
} 

答えて

26

dynamic_castあなたはポインタをキャストしている場合、悪いキャストにNULLを返します。鋳造時にstd::bad_castを投じます参照オブジェクトをdynamic_cast(たとえば、dynamic_cast<Derived>(base))とキャストしようとすると、コンパイル時にエラーが発生する

+0

[OK]をクリックします。ありがとう。私は基本クラスを多相(仮想関数を追加する)にし、例外をスローするための参照キャストを使うためにメッセージを編集しました。 – NIGO

関連する問題