AUTOSAR C++14 Rule A15-4-1
説明
ルール定義
Dynamic exception-specification shall not be used.
根拠
動的例外指定は、関数宣言で throw(<list of exceptions>) ステートメントを使用して、例外が発生した場合の関数の動作を指定する手法です。動的例外指定の使用には、以下の問題が伴います。
パフォーマンス コスト:動的例外指定は実行時にチェックされることから、オーバーヘッドが増え、コードのパフォーマンスが低下する可能性があります。
汎用のプログラミングに適していない:通常、関数またはクラス テンプレートによって報告される例外の正確なタイプを事前に知ることはできないため、汎用のコードでは
throwステートメントの使用が難しくなる可能性があります。
これらの理由から、throw(<list of exceptions>) ステートメントを使用して例外を指定しないようにしてください。代わりに、noexcept キーワードを使用します。noexcept ステートメントはコンパイル時にチェックされるため、汎用プログラミングに適しており、通常は throw ステートメントよりもパフォーマンスが向上します。C++11 規格では、将来的に動的例外指定を C++ から除去すると規定しています。
Polyspace 実装
throw(<list of exceptions>) ステートメントが関数宣言で使用されている場合、Polyspace® は throw ステートメントにフラグを設定します。Polyspace は、例外を報告するために使用されている throw ステートメントにはフラグを設定しません。
トラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: Exception handling |
| カテゴリ: Required、Automated |
バージョン履歴
R2021a で導入