メインコンテンツ

AUTOSAR C++14 Rule A5-2-4

reinterpret_cast を使用してはなりません。

説明

ルール定義

reinterpret_cast を使用してはなりません。

根拠

reinterpret_cast は通常、無関係な 2 つのデータ型間で明示的に変換を行うために使用します。たとえば、次の例では、reinterpret_caststruct S* 型を int* に変換します。

struct S { int x; } s;
int* ptr = reinterpret_cast<int*> (&s);

ただし、型の安全性に違反せずに reinterpret_cast を使用するのは困難です。reinterpret_cast の結果がポインターの場合、そのポインターをキャストして元の型に戻してから、ポインターをデリファレンスするのが安全です。

Polyspace 実装

ルール チェッカーでは、reinterpret_cast キーワードのすべての使用にフラグを設定します。

安全であると考えている reinterpret_cast の使用に対してルール チェッカーがフラグを設定する場合は、結果を正当化するコメントを追加します。詳細は、以下を参照してください。

トラブルシューティング

ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。

すべて展開する

class A {
    int x;
    int y;
    public:
      void getxy();
};

class B {
    int z;
    public:
      void getz();
};

void func (B* Bptr) {
    A* Aptr = reinterpret_cast<A*>(Bptr); // Noncompliant
}

reinterpret_cast の使用はこのルールに違反します。AB は無関係なクラスであるため、reinterpret_cast の結果をデリファレンスするのは安全ではありません。AptrA* ポインターであるかのようにデリファレンスすると、不適切なメモリ アクセスが発生する可能性があります。

チェック情報

グループ:
カテゴリ: Required、Automated

バージョン履歴

R2019a で導入