首页 > 解决方案 > 在 C++ 中查找关闭的成员函数名称

问题描述

我刚刚遇到了一个错误(我自己制造的!),表现如下。我有一个带有虚拟成员函数的类,我需要通过为一些新用例添加一个额外的参数来扩展它。我用默认值添加了它,这样它就不会中断任何当前调用。我错过的是从这个类继承的另一个类,它覆盖了这个不再是覆盖的函数。虽然我知道在添加新代码时使用override关键字来避免这种情况,但我想知道是否有任何方法可以找到所有在词法上足够接近的函数,以便可能出现类似错误的情况。曾经这样做过,有可能我可能在过去的某个时候做过,并且想回顾一下代码库。

标签: c++virtual

解决方案


Clang 有警告标志-Woverloaded-virtual

struct Base
{
    virtual void foo(int = 42) {}
};

struct Derived : Base
{
    virtual void foo() {} // Oups
};

演示

您可能还对带有modernize-use-overrideoverride的clang-tidy 感兴趣,以便将来在任何符合C++11 的编译器中添加和避免此错误。


推荐阅读