AUTOSAR C++14 Rule A13-5-2
All user-defined conversion operators shall be defined explicit
説明
ルール定義
All user-defined conversion operators shall be defined explicit.
根拠
ユーザー定義の変換演算子を定義する際に explicit 指定子を使用しなかった場合、コンパイラは暗黙的で、しばしば意図的ではない型変換をクラス型との間で実行することがあり、予期せぬ結果が生じる可能性があります。
たとえば、引数として渡したクラス型とは異なる型のパラメーターを関数が受け取る場合は、暗黙的変換が行われる可能性があります。一例として、以下の func の呼び出しでは、myClass 型から int 型への暗黙的変換が行われます。
class myClass {} {
...
operator int() {...}
};
myClass myClassObject;
void func(int) {...}
func(myClassObject);
Polyspace 実装
チェッカーは、explicit 指定子が適用されていないユーザー定義の変換演算子の、宣言またはクラス内定義にフラグを設定します。
たとえば、operator int() {} は、現在のクラス型の変数を暗黙的と明示的の両方で int 変数に変換できますが、explicit operator int() {} は明示的変換しか実行できません。
トラブルシューティング
ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: オーバーロード |
| カテゴリ: Required、Automated |
バージョン履歴
R2020a で導入