CWARN.OVERRIDE.CONST
const 修飾子の不一致により、関数のオーバーライドは失敗しました
CWARN.OVERRIDE.CONST チェッカーは、子クラスの仮想関数と基本クラスの対応する関数間の const 修飾子に不一致があるインスタンスを検出します。
脆弱性とリスク
子クラスの仮想関数が基本クラスの対応する関数と異なる場合、実際にはオーバーライドは行われません。通常、子関数は基本関数のオーバーライドを意図しているため、設計の意図は達成されません。
脆弱コード例
コピー
class Base {
virtual void foo() const { }
virtual void bar() = 0;
};
class Child : public Base {
void foo() {}
void bar() const {}
};
この例では、Klocwork は、子クラスの仮想関数が基本クラスの仮想関数と一致しないため、7 行目と 8 行目にフラグを立てます。