phi*_*mue 10 c++ virtual overloading member-hiding
考虑以下结构层次结构:
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 {}
};
Run Code Online (Sandbox Code Playgroud)
编译它(使用clang或g++使用-Woverloaded-virtual)会给我一个警告:
'Derived::doit' hides overloaded virtual function [-Woverloaded-virtual]
Run Code Online (Sandbox Code Playgroud)
但是,如果我更改I12为以下内容,它会编译得很好clang,同时g++ -Woverloaded-virtual仍会发出警告:
struct I12 : I1, I2 {
using I1::doit;
void doit(int) override = 0;
};
Run Code Online (Sandbox Code Playgroud)
using I2::doit和之间的区别在哪里void doit(int) override = 0?天真地,我会认为前者足以告知编译器我知道有两个版本的doit.
它抱怨doit隐藏在Derived. 修复:
struct Derived : I12 {
using I12::doit; // Bring all doit declarations from I12 into this scope.
void doit(int) override {}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3596 次 |
| 最近记录: |