AUTOSAR C++14 Rule A13-5-3
説明
ルール定義
User-defined conversion operators should not be used.
根拠
ユーザー定義の変換演算子は、必要でもなく、想定してもいないときに呼び出される場合があります。その場合、予期せぬ型変換エラーが発生する可能性があります。たとえばこのコード スニペットでは、ユーザー定義の変換演算子が customType 型を double 型に変換することにより、混合モード表現式を許可します。
class customType
{
public:
customType(int base, int exponent);
//....
operator double() const; // Conversion operator, convert customType to double
};
customType var1(2,5);
double var2 = 0.5 * var1; //Conversion operator called, converts var1 to doublecustomType オブジェクトに operator << を定義せずに cout << var1; を使用して var1 を出力しようとすると、コンパイラはこの変換演算子を使用して暗黙的に var1 を変換し、double として出力します。 このような想定外の変換を回避するには、変換演算子を同等の関数で置き換えます。その関数は、明示的に呼び出す必要があります。アプリケーションで変換演算子の使用を回避できない場合は、AUTOSAR C++14 Rule A13-5-2 のルールを参照してください。
Polyspace 実装
Polyspace® は、変換演算子のすべての呼び出しにフラグを設定します。
トラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: オーバーロード |
| カテゴリ: Advisory、Automated |
バージョン履歴
R2021a で導入