AUTOSAR C++14 Rule A8-5-2
Braced-initialization {}, without equals sign, shall be used for variable initialization
説明
ルール定義
変数の初期化では、等号のない中かっこ {} による初期化を使用するものとします。
根拠
中かっこによる初期化:
classType Object{arg1, arg2, ...};doubleからfloatへの変換などの暗黙的な狭い型への変換を防ぐことが可能。最も厄介な解析の問題につながるあいまいな構文の回避が可能。
たとえば、次の宣言を考えます。
ResourceType aResource();
aResourceがResourceType型の変数を返す関数なのか、ResourceType型のオブジェクトなのか、すぐには理解できません。詳細は、
不明瞭な宣言の構文を参照してください。
このルールは初期化での = 記号の使用も禁止しています。= 記号は、実際には呼び出されていない状況でも代入またはコピー コンストラクターが呼び出されている印象を与える可能性があるためです。
Polyspace 実装
一般的に、チェッカーは次のような形式を使用したデータ型 Type のオブジェクト obj1 の初期化にフラグを設定します。
Type obj1 = obj2;
Type obj1(obj2);
チェッカーは、次のようなケースの例外を許容します。
定数、変数、ラムダ式、標準初期化子リスト、または関数呼び出しへの単純な代入を使用した
auto型の変数の初期化。単純な代入を使用した参照型の初期化
Type a()の形式を使用したグローバル スコープの宣言。ここで、Typeは既定のコンストラクターを使用したクラス型です。解析では、aがType型を返す関数として解釈されます。OpenMP 並列
forループ内、つまり、#pragma omp parallel forの直後のforループ ステートメント内のループ変数の初期化
チェッカーは、C++11 以降の C++ バージョンを指定した場合にのみ有効になります。C++ 標準バージョン (-cpp-version) を参照してください。
トラブルシューティング
ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: 宣言子 |
| カテゴリ: Required、Automated |
バージョン履歴
R2019a で導入