6

static_cast例外をスローしません。ただし、成功しない場合は、未定義の結果が生成されます。キャストが成功したかどうかを確認する最も適切な方法は何ですか?

これは役に立ちますか?

NewType new_typ_obj = static_cast<NewType>(obj); 

if (new_typ_obj)
    new_typ_obj.do();
4

4 に答える 4

10

static_castは、成功に関する情報を提供しません。動的な型キャストを行う必要がある場合は、dynamic_cast または boost any などのライブラリを使用します。

于 2013-04-22T12:22:40.797 に答える
1

static_castキャストしたい型がキャストしたい型に関連していない場合、コンパイルされません。それを除いてvoid *、すべてのタイプに関連しています。したがって、 static_cast は、コンパイル時に依然として優れた保証です。

間違ったダウンキャストを行う危険性は依然としてあります。

私の個人的なルールは次のとおりです。

  • アップキャストに static_cast を使用することを好む (意図を示す)
  • ダウンキャストに dynamic_cast を使用し、戻り値を確認することをお勧めします。

ダウンキャストの static_cast が危険でない場合、後者のルールは廃止できます。

于 2013-04-22T12:29:40.380 に答える