【发布时间】:2014-11-21 09:16:31
【问题描述】:
假设你有这个Base 类:
class Base
{
public:
virtual void foo();
};
您可以在派生自Base 的类中覆盖foo():
class Derived : public Base
{
public:
virtual void foo();
};
但是,如果您在 Derived::foo() 的声明中“忘记”了“virtual”:
class Derived : public Base
{
public:
void foo();
};
你得到完全相同的语义:Derived::foo() 是虚拟的,尽管没有明确声明。
现在,假设您的编码标准规定在这种情况下应明确提及“virtual”。
你知道检测Derived::foo()声明中缺少的'virtual'的简单方法吗(在Linux + gcc 环境中)?
我不知道任何检测到这一点的 gcc 警告。
【问题讨论】:
-
g++功能请求在这里:gcc.gnu.org/bugzilla/show_bug.cgi?id=31397 -
我想修复损坏的编码标准不是一种选择?这似乎是比破坏编译器匹配更好的方法。
-
clang-modernize允许在代码中添加override。