EN JP CN

CWARN.OVERRIDE.CONST

CWARN.OVERRIDE.CONST

const 修飾子の不一致により、関数のオーバーライドは失敗しました

CWARN.OVERRIDE.CONST チェッカーは、子クラスの仮想関数と基本クラスの対応する関数間の const 修飾子に不一致があるインスタンスを検出します。

脆弱性とリスク

子クラスの仮想関数が基本クラスの対応する関数と異なる場合、実際にはオーバーライドは行われません。通常、子関数は基本関数のオーバーライドを意図しているため、設計の意図は達成されません。

脆弱コード例

1  class Base {
2    virtual void foo() const { }
3    virtual void bar() = 0;
4  };
5  
6  class Child : public Base {
7    void foo() {}       
8    void bar() const {} 
9  };

この例では、Klocwork は、子クラスの仮想関数が基本クラスの仮想関数と一致しないため、7 行目と 8 行目にフラグを立てます。