static_castを、dynamic_castをし、reinterpret_castはの誤用を検出する任意のC ++のツールはありますか?
-
20-09-2019 - |
質問
次の質問への回答はstatic_cast
、dynamic_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、。彼らは主にかかわらず、デフォルトではオフになっています。
ブーストはstatic_castのように振る舞うが、同等のdynamic_castが失敗した場合(通常は唯一のデバッグビルドで)アサートしますpolymorphic_pointer_downcast()とpolymorphic_downcast()関数を提供しています。
http://www.boost.org/docを参照してください。詳細については、/libs/1_61_0/libs/conversion/cast.htmするます。