我刚刚犯了一个错误(我自己制作的!),其表现如下.我有一个带有虚拟成员函数的类,我需要通过为一些新的用例添加额外的参数来扩展它.我使用默认值添加它,这样它就不会破坏任何当前调用.我错过的是有一个继承自这个类的另一个类,它具有这个函数的覆盖,不再是一个覆盖.虽然我知道在添加新代码时要避免使用override关键字,但我想知道是否有任何方法可以找到所有在词法上足够接近可能出现类似错误的函数.做过这一次之后,我有可能在过去的某个时间做过这件事,并且想要追溯检查代码库.
Clang有警告标志 -Woverloaded-virtual
struct Base
{
virtual void foo(int = 42) {}
};
struct Derived : Base
{
virtual void foo() {} // Oups
};
Run Code Online (Sandbox Code Playgroud)
您可能还会对clang-tidy with modernize-use-override感兴趣,以便override在将来的任何符合C++ 11的编译器中添加并避免此错误.