static_castを、dynamic_castをし、reinterpret_castはの誤用を検出する任意のC ++のツールはありますか?

StackOverflow https://stackoverflow.com/questions/2465964

質問

次の質問への回答はstatic_castdynamic_cast、およびC ++でのreinterpret_castの推奨使用方法を説明します

をstatic_cast必要があり、dynamic_castを、const_castをそして使用することreinterpret_castは?

あなたはキャストのこれらの種類の誤用を検出するために使用することができる任意のツールを知っていますか? PC-Lintのか、コベリティ静的解析などの静的解析ツールは、これを行うのでしょうか?

この質問を促した特定のケースでは、コンパイラが警告していないポインタを、ダウンキャストするstatic_castの不適切な使用でした。私は、開発者は、このミスをしないことを前提とツールを使用して、このケースを検出し、ないしたいと思います。

役に立ちましたか?

解決

コンパイル時にどのようなタイプのポインタのポイントを伝えるのない信頼性の高い方法がないことを考えると、これはコンパイル時にキャッチするかなり難しい問題です。

最も簡単な方法は、デバッグ中のassertではdynamic_castにコンパイルマクロ「safe_cast」、およびリリースではstatic_castを使用して、実行時にキャッチを行うことです。

キャストが不適切な場合、

さて、デバッグ中に、動的キャストはNULLを返し、アサートします。リリース時のオーバーヘッドもありません。

他のヒント

Visual Studioは、これらのいくつかのための警告を持っています。例えばC4946、。彼らは主にかかわらず、デフォルトではオフになっています。

http://msdn.microsoft.com/en-us/library /23k5d385.aspxする

ブーストはstatic_castのように振る舞うが、同等のdynamic_castが失敗した場合(通常は唯一のデバッグビルドで)アサートしますpolymorphic_pointer_downcast()とpolymorphic_downcast()関数を提供しています。

http://www.boost.org/docを参照してください。詳細については、/libs/1_61_0/libs/conversion/cast.htmするます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top