は、構造体の次の階層を考えてみましょう:オーバーロードされた仮想関数を隠す
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
、または-Woverloaded-virtual
とg++
を使用して)これをコンパイルするには、私に警告を与えます以下の場合、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
という2つのバージョンがあることをコンパイラーに知らせるのに十分だと思っていました。
どのコンパイラを使用していますか?私はgccやMSVSで警告を得ることができませんが、私はclangで行います。 – NathanOliver
はい、あなたはそれを隠しています。あなたの質問は何ですか?どのように冗長な警告を排除するには? – songyuanyao
@ NathanOliver私はclangを使用しましたが、g ++を使用して警告を表示すると、動作が異なります。 – phimuemue