【问题标题】:Is there a lint tool that checks a child class virtual function matches the parent class definition?是否有检查子类虚函数与父类定义匹配的 lint 工具?
【发布时间】:2017-07-24 02:56:33
【问题描述】:

我刚刚在一个重要的代码库中更改了一堆虚拟方法,以支持 64 位可移植性。我在代码库中进行了多次搜索,寻找需要编辑以更改虚函数参数类型的派生类。不幸的是,编译器(VS2013)没有警告我该函数的派生类版本的类型错误并且不会被调用。我一直在寻找我错过的实例。除了非常彻底之外,我还想在它上面运行一个工具来为我完成所有检查。

这样的工具存在吗?

【问题讨论】:

    标签: c++


    【解决方案1】:

    有一个更简单的解决方案:使用override specifier。如果在子类虚函数的末尾加上override,当你改变基类虚函数的参数时,除非你也改变子类虚函数,否则会出现编译错误。

    您也可以使用final specifier 表示子类无法实现虚函数。

    【讨论】:

    • 这对于新代码来说非常棒,我会从现在开始使用它。但是我有很多不使用 override 关键字的现有代码。
    • @immibis "error-prone" 应该暗示两种或多种技术之间的比较;你有什么更好的建议?
    • @M.M,是的,我正在慢慢地这样做,但是有很多代码需要审查,而且说实话,C4263 方法要快很多。
    【解决方案2】:

    启用warning C4263,由于某些奇怪的原因,默认情况下即使在/W4 也禁用它。

    'function' : 成员函数不覆盖任何基类虚成员函数

    类函数定义与基类中的虚函数具有相同的名称,但参数的数量或类型不同。这有效地隐藏了基类中的虚函数。

    此警告默认关闭。有关详细信息,请参阅默认关闭的编译器警告。

    作为记录,等效的 gcc/clang 标志是-Woverloaded-virtual

    【讨论】:

    • 这很好用。在现有代码中发现了很多这类虚函数原型的错误。甚至是我最近所做的更改之前的那些。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多