不建议虚函数的参数有默认值
6.5.5 ID_deprecatedDefaultArgument
虚函数参数的默认值不受多态规则控制,通过基类指针或引用调用派生类重写的虚函数时,默认值仍采用基类中的定义,易造成混淆,故不建议虚函数的参数有默认值。
示例:
class A {
public:
virtual int foo(int i = 0); // Bad
};
应尽量去掉默认参数值,或改用重载函数的方式:
class A {
public:
virtual int foo(); // OK
virtual int foo(int i); // OK
};
相关
依据
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