【发布时间】:2017-07-24 02:56:33
【问题描述】:
我刚刚在一个重要的代码库中更改了一堆虚拟方法,以支持 64 位可移植性。我在代码库中进行了多次搜索,寻找需要编辑以更改虚函数参数类型的派生类。不幸的是,编译器(VS2013)没有警告我该函数的派生类版本的类型错误并且不会被调用。我一直在寻找我错过的实例。除了非常彻底之外,我还想在它上面运行一个工具来为我完成所有检查。
这样的工具存在吗?
【问题讨论】:
标签: c++
我刚刚在一个重要的代码库中更改了一堆虚拟方法,以支持 64 位可移植性。我在代码库中进行了多次搜索,寻找需要编辑以更改虚函数参数类型的派生类。不幸的是,编译器(VS2013)没有警告我该函数的派生类版本的类型错误并且不会被调用。我一直在寻找我错过的实例。除了非常彻底之外,我还想在它上面运行一个工具来为我完成所有检查。
这样的工具存在吗?
【问题讨论】:
标签: c++
有一个更简单的解决方案:使用override specifier。如果在子类虚函数的末尾加上override,当你改变基类虚函数的参数时,除非你也改变子类虚函数,否则会出现编译错误。
您也可以使用final specifier 表示子类无法实现虚函数。
【讨论】:
启用warning C4263,由于某些奇怪的原因,默认情况下即使在/W4 也禁用它。
'function' : 成员函数不覆盖任何基类虚成员函数
类函数定义与基类中的虚函数具有相同的名称,但参数的数量或类型不同。这有效地隐藏了基类中的虚函数。
此警告默认关闭。有关详细信息,请参阅默认关闭的编译器警告。
作为记录,等效的 gcc/clang 标志是-Woverloaded-virtual。
【讨论】: