gcc遗漏了一个“;隐藏重载虚函数“;警告

gcc遗漏了一个“;隐藏重载虚函数“;警告,gcc,clang,constants,virtual-functions,Gcc,Clang,Constants,Virtual Functions,我意外地从虚拟方法的派生类实现中删除了一个const限定符。我通常使用叮当声发出警告。当我用Wall切换到gcc时,事情完全没有被注意到。为什么呢?这是我的档案: $ cat main.cpp #include <iostream> class Father { public: virtual int get() const { return 8; } }; class Son : public Father { public: virtual int get()

我意外地从虚拟方法的派生类实现中删除了一个
const
限定符。我通常使用叮当声发出警告。当我用
Wall
切换到gcc时,事情完全没有被注意到。为什么呢?这是我的档案:

$ cat main.cpp
#include <iostream>

class Father {
public:
    virtual int get() const { return 8; }
};

class Son : public Father {
public:
    virtual int get() /* const */ { return 6; }
};

int main(int argc, char **argv)
{
    Father *f = new Son;
    std::cout << f->get() << "\n";
    return 0;
}

$ clang++ -Wall main.cpp -o main
main.cpp:10:14: warning: 'Son::get' hides overloaded virtual function
      [-Woverloaded-virtual]
        virtual int get() /* const */ { return 6; }
                    ^
main.cpp:5:14: note: hidden overloaded virtual function 'Father::get' declared
      here: different qualifiers ('const' vs unqualified)
        virtual int get() const { return 8; }
                    ^
1 warning generated.
$ g++ -Wall main.cpp -o main
$ ./main
8