MISRA C++:2008 Rule 8-3-1
Parameters in an overriding virtual function shall either use the same default arguments as the function they override, or else shall not specify any default arguments.
説明
ルール定義
Parameters in an overriding virtual function shall either use the same default arguments as the function they override, or else shall not specify any default arguments. 1
根拠
バーチャル関数の既定のパラメーターが、オーバーライド関数でのパラメーターと異なる場合、その関数を階層の異なるクラスを使用して呼び出すと、関数呼び出しで異なる値が使用されます。このような動作は、クラス階層で予期される動作ではありません。次のクラス階層について考えます。
class Base{
public:
virtual foo(int x = 0);
//...
};
class Derived: public Base{
public:
virtual foo(int x = 1) override; //Noncompliant
};foo() の既定のパラメーターは、base::foo() または Derived::foo() のどちらが呼び出されるかによって異なります。これは予期しない動作であり、予期しない結果につながる可能性があります。Polyspace 実装
オーバーライド元のバーチャル関数の既定のパラメーターが、その関数がオーバーライドするバーチャル関数のパラメーターとは異なる場合、Polyspace® はこのルールの違反を報告します。既定のパラメーターを指定しないことはこのルールに準拠しているため、オーバーライド元のバーチャル関数が既定のパラメーターを指定していない場合、Polyspace は違反を報告しません。
トラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: Declarators |
| カテゴリ: 必要 |
バージョン履歴
R2013b で導入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.