C++11 添加了 override
以确保您编写的打算覆盖基类虚函数的成员函数实际执行(或不会编译)。
但是在大型对象层次结构中,有时您可能会意外地编写一个覆盖基类虚拟的成员函数,而您并不打算这样做!例如:
struct A {
virtual void foo() { } // because obviously every class has foo().
};
struct B : A { ... };
class C : B {
private:
void foo() {
// was intended to be a private function local to C
// not intended to override A::foo(), but now does
}
};
是否有一些编译器标志/扩展至少会在 C::foo
上发出警告?为了可读性和正确性,我只想强制所有覆盖都使用 override
。
原文由 Barry 发布,翻译遵循 CC BY-SA 4.0 许可协议
看起来 GCC 5.1 版本添加了我正在寻找的 警告:
使用
-Wsuggest-override
-Werror=suggest-override
编译将强制所有覆盖使用override
。