【发布时间】:2011-11-21 15:03:35
【问题描述】:
在我们的项目中,在派生类中,基类中的非虚拟方法会被具有相同原型的方法隐藏(很少但会发生)。在这种情况下,编译器(在我们的例子中是 g++ 4.4)保持安静。虽然我可以看到没有警告对私有方法有用,但对于受保护或公共方法,这至少应该是一个可配置的警告。
如果存在这样的东西,我找不到它。
这是我想让 g++ 抱怨的一个小例子(请放心,这种代码模式永远不会一次性写成这样,通常工作在某个时间点是 A 中的一个虚拟方法,并且是后来莫名其妙改了):
class A
{
public:
void work(int p)
{ /* do something */ }
};
class B : public A
{
public:
void work(int p)
{ /* do something different */ }
};
结果:即使使用 -Wall -Wextra 也没有警告。
【问题讨论】:
-
从编译器的角度来看,您的示例没有任何可疑之处,因此没有警告。但是,我同意找到这些重载可能会很好,因此某种信息消息的标志可能会很好。
-
GCC 4.7 最终将实现新的 C++11
final/override关键字,这应该会有所帮助...
标签: c++ compilation g++