☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

虚函数参数的默认值应与基类中声明的一致

6.5.4 ID_inconsistentDefaultArgument
目录 › next › previous

虚函数参数的默认值不受多态规则控制,通过基类指针或引用调用派生类重写的虚函数时,默认值仍采用基类中的定义。

示例:

class A {
public:
    virtual int foo(int i = 0) {
        return i;
    }
};

class B: public A {
public:
    int foo(int i = 1) override {  // Non-compliant
        return i + 1;
    }
};

A* p = new B;
cout << p->foo() << '\n';  // What is output?

输出 1,这种虚函数的非多态行为是非常令人困惑的。

相关

ID_deprecatedDefaultArgument

依据

ISO/IEC 14882:2003 8.3.6(10) ISO/IEC 14882:2011 8.3.6(10) ISO/IEC 14882:2017 11.3.6(10)

参考

CWE-628 C++ Core Guidelines C.140 MISRA C++ 2008 8-3-1
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.