使用类似原型隐藏非虚拟方法没有警告(G ++ 4.4)

时间:2011-11-21 15:03:35

标签: c++ compilation g++

在我们的项目中,它很少发生(很少会发生)在派生类中,来自基类的非虚方法被具有相同原型的方法隐藏。在这种情况下,编译器(在我们的例子中是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也没有警告。

1 个答案:

答案 0 :(得分:1)

你没有覆盖这个方法,你正在隐藏它。这是一个C ++功能。

您可以查看this link

另外,一个有趣的摘录:

  

注意:警告不是标准的一部分,因此您的编译器可能或   可能不会给出上述警告。