考虑结构的层次结构如下:遮盖力重载虚函数
struct I1 {
virtual void doit() = 0;
};
struct I2 {
virtual void doit(int) = 0;
};
struct I12 : I1, I2 {
using I1::doit;
using I2::doit;
};
struct Derived : I12 {
void doit(int) override {}
};
编译这个(使用clang
,或g++
与-Woverloaded-virtual
)给了我一个警告:
'Derived::doit' hides overloaded virtual function [-Woverloaded-virtual]
但是,如果我改变I12
到下面,它在clang
下编好,而g++ -Woverloaded-virtual
仍然给出警告:
struct I12 : I1, I2 {
using I1::doit;
void doit(int) override = 0;
};
using I2::doit
和void doit(int) override = 0
之间的区别是哪里?天真地说,我会认为前者足以通知编译器,我知道doit
有两个版本。
你使用什么编译器?我无法在gcc或MSVS中发出警告,但我在叮当中做了。 – NathanOliver
是的,你隐藏它。那么你的问题是什么?如何消除详细的警告? – songyuanyao
@NathanOliver我用clang,但是用g ++和警告显示不同的行为。 – phimuemue