gcc错过了“隐藏的重载虚拟功能”警告

时间:2019-09-26 04:19:36

标签: gcc clang const virtual-functions

我不小心从虚拟方法的派生类实现中删除了const限定符。我通常使用clang发出警告。当我使用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;
}

这是gcc和clang的编译输出:

$ 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

0 个答案:

没有答案