メインコンテンツ

AUTOSAR C++14 Rule A5-3-1

Evaluation of the operand to the typeid operator shall not contain side effects

説明

ルール定義

Evaluation of the operand to the typeid operator shall not contain side effects.

根拠

typeid 演算子は、オペランドが多様型への参照を返す関数への呼び出しである場合にのみ、そのオペランドを評価します (多様型はバーチャル関数を含むクラス型です)。それ以外のすべての場合は、typeid 演算子に与えられた式が評価されません。

保守が容易なコードの場合は、typeid 演算子を使用するときに、二次的影響のある式をすべて回避します。開発者は、式の構成要素の定義の特定と、実際に二次的影響が発生したかどうかの決定を行わずに済みます。

Polyspace 実装

チェッカーは、二次的影響がある式を伴う typeid 演算子にフラグを設定します。関数呼び出しには二次的影響があると想定されます。

チェッカー メッセージは、式が評価されるか無視されるかを示します。式が評価され、別のステートメントで評価を実行する代わりに typeid 演算内の式を保持する場合は、他のレビューを回避するためのコメントを結果またはコードに追加します。詳細は、以下を参照してください。

トラブルシューティング

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

すべて展開する

#include <iostream>
#include <typeinfo>

class Base
{
public:
    virtual ~Base();
};

class Derived: public Base
{
public:
    ~Derived();
};

Base& getObj();

void main()
{

    Base& b = getObj();

    std::cout << "Dynamic type:" << typeid(getObj()).name(); //Noncompliant
    std::cout << "Dynamic type:" << typeid(b).name(); //Compliant
}

typeid オペランドが関数呼び出しを伴う場合は、このルールに違反します。

チェック情報

グループ:
カテゴリ: Required、Non-automated

バージョン履歴

R2020b で導入