static_cast
例外をスローしません。ただし、成功しない場合は、未定義の結果が生成されます。キャストが成功したかどうかを確認する最も適切な方法は何ですか?
これは役に立ちますか?
NewType new_typ_obj = static_cast<NewType>(obj);
if (new_typ_obj)
new_typ_obj.do();
static_cast
例外をスローしません。ただし、成功しない場合は、未定義の結果が生成されます。キャストが成功したかどうかを確認する最も適切な方法は何ですか?
これは役に立ちますか?
NewType new_typ_obj = static_cast<NewType>(obj);
if (new_typ_obj)
new_typ_obj.do();
static_castは、成功に関する情報を提供しません。動的な型キャストを行う必要がある場合は、dynamic_cast または boost any などのライブラリを使用します。
static_cast
キャストしたい型がキャストしたい型に関連していない場合、コンパイルされません。それを除いてvoid *
、すべてのタイプに関連しています。したがって、 static_cast は、コンパイル時に依然として優れた保証です。
間違ったダウンキャストを行う危険性は依然としてあります。
私の個人的なルールは次のとおりです。
ダウンキャストの static_cast が危険でない場合、後者のルールは廃止できます。