C and C++


LANG.CAST.PC.VBASE : Cast: Virtual Base to Derived

要旨

A pointer to virtual base class is cast to a pointer to a derived class by some means other than dynamic_cast.

プロパティ

クラス名 Cast: Virtual Base to Derived
日本語クラス名 Cast: Virtual Base to Derived
クラス分類 信頼性 (reliability)
ニーモニック LANG.CAST.PC.VBASE
カテゴリー
Misra2004 Misra2004:11.4 A cast should not be performed between a pointer to object type and a different pointer to object type
AUTOSARC++14 AUTOSARC++14:M5-2-2 A pointer to a virtual base class shall only be cast to a pointer to a derived class by means of dynamic_cast.
  AUTOSARC++14:A5-2-4 reinterpret_cast shall not be used.
MisraC++2008 MisraC++2008:5-2-2 A pointer to a virtual base class shall only be cast to a pointer to a derived class by means of dynamic_cast.
  MisraC++2008:5-2-7 An object with pointer type shall not be converted to an unrelated pointer type, either directly or indirectly.
MisraC++2023 MisraC++2023:8.2.1 A virtual base class shall only be cast to a derived class by means of dynamic_cast
  MisraC++2023:8.2.5 reinterpret_cast shall not be used
CWE CWE:704 Incorrect Type Conversion or Cast
TS17961 TS17961:5.1-ptrcomp 5.1. Accessing an object through a pointer to an incompatible type
CERT-C CERT-C:EXP36-C Do not cast pointers into more strictly aligned pointer types
JSF++ JSF++:178 Down casting (casting from base to derived class) shall only be allowed through certain mechanisms.
  JSF++:179 A pointer to a virtual base class shall not be converted to a pointer to a derived class.
  JSF++:182 Type casting from any type to or from pointers shall not be used.
  JSF++:183 Every possible measure should be taken to avoid type casting.
対応言語 C++ のみ利用可能です。 C は利用できません。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Cast: Virtual Base to Derived"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

class Base {
  public:
    virtual void polymorphic(void);
};

class Derived : public virtual Base { };

Derived d;
Derived *pD1;
Derived *pD2;

void virtual_base_cast(void) {
    Base * pB = &d;
    pD1 = reinterpret_cast< Derived * >( pB ); // 'Cast: Virtual Base to Derived' warning issued here
    pD2 = dynamic_cast< Derived * >( pB );                   // ok: casting with dynamic_cast
}

関連のある設定ファイルパラメータ

設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。