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 行目にフラグを立てます。