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