AUTOSAR C++14 Rule A12-1-2
Both NSDMI and a non-static member initializer in a constructor shall not be used in the same type
説明
ルール定義
Both NSDMI and a non-static member initializer in a constructor shall not be used in the same type.
根拠
クラスの非静的データ メンバーは、次のいずれかの方法で初期化できます。
非静的データ メンバー初期化子 (NSDMI) を使用することにより、クラス本体のメンバーの宣言で行う。
コンストラクターの非静的メンバー初期化子を使用して行う。
クラスで、一部の非静的データ メンバーを NSDMI を使用して初期化し、残りの非静的データ メンバーをコンストラクターを使用して初期化すると、コードの読みやすさが損なわれます。このようなコード パターンは、各データ メンバーで実際に使用される初期値について混乱を招く可能性があります。クラスのすべての非静的データ メンバーの初期化を NSDMI とコンストラクターのいずれかを使用して行うことにより、このような混乱の発生を避けられます。
移動コンストラクターとコピー コンストラクターはこのルールの適用対象外です。このようなコンストラクターではデータ メンバーの初期化で他のオブジェクトの既存の値を使用することによる特殊な動作が行われるからです。通常、これらのコンストラクターで混乱が起きることはありません。
Polyspace 実装
クラスの一部の非静的データ メンバーを NSDMI を使用して初期化し、残りの非静的データ メンバーをコンストラクターを使用して初期化すると、チェッカーはコンストラクター、および関連する NSDMI 初期化子にフラグを設定します。
チェッカーは、このルールに違反する移動コンストラクターとコピー コンストラクターに対してはフラグを設定しません。
トラブルシューティング
ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: 特殊なメンバー関数 |
| カテゴリ: Required、Automated |