MISRA C++:2023 Rule 15.1.5
A class shall only define an initializer-list constructor when it is the only constructor
R2024b 以降
説明
ルール定義
A class shall only define an initializer-list constructor when it is the only constructor. 1
根拠
クラスに std::initializer_list 型のパラメーターを取るコンストラクターと、パラメーターを
classType obj {0,1}std::initializer_list パラメーターを使用するコンストラクターを優先しますが、開発者は別の想定をする可能性があります。Polyspace 実装
チェッカーは、第 1 パラメーターが std::initializer_list 型であるコンストラクターを含み、別のコンストラクター (特殊なメンバー関数コンストラクターを除く) も含まれているクラス定義にフラグを設定します。ルール違反に続けて、std::initializer_list コンストラクターとの混同を生じさせる可能性がある、他のコンストラクターの場所を指すイベントが示されます。
このルールに違反しない std::initializer_list パラメーターのコンストラクターがあるクラス定義には、既定のコピー コンストラクターと移動コンストラクター (およびコピー代入演算子と移動代入演算子) のみが含まれています。パラメーターを持つ第 2 のコンストラクターを避けられない場合は、このルール違反を正当化できます。この場合、リストを使用する初期化で次のような構文を使用します。
classType obj ({0,1})std::initializer_list パラメーターのコンストラクターが呼び出されることが明確になります。他のコンストラクターでの初期化では次のような構文を使用します。classType obj (0,1)
() を使用した初期化にはフラグが設定されますが、このような std::initializer_list パラメーターのコンストラクターと他のコンストラクターを共に使用するクラスの初期化は許可されます。トラブルシューティング
ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: 特殊なメンバー関数 |
| カテゴリ: 必要 |
バージョン履歴
R2024b で導入
1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.
The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:
MISRA C:2004
MISRA C:2012
MISRA C:2023
MISRA C++:2008
MISRA C++:2023
MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.