struct B1{
int d;
void fb(){};
};
struct B2 : B1{
using B1::d;
using B1::fb;
int d; // why this gives error?
void fb(){} // and this does not?
};
int main(){}
是不是因为,B1::fb()
被视为B1::fb(B1*)
and B2::fb()
像...一样对待B2::fb(B2*)
?也就是说,隐式参数是否有助于区分这些?
$13.3.1/4-
对于非转换函数引入
通过使用声明到派生
类,该函数被认为是
是派生类的成员
定义类型的目的
隐式对象参数。
C++ 标准 (C++03 §7.3.3/12) 解释道:
When a 使用声明将基类中的名称引入派生类作用域,派生类中的成员函数覆盖和/或隐藏基类中具有相同名称和参数类型的成员函数(而不是冲突)。
在你的例子中,B2::fb()
隐藏B1::fb()
由 using 声明引入。
至于为什么同时拥有两者是不正确的using B1::d;
and int d;
在定义中B2
,C++ 标准 (C++03 §7.3.3/10) 解释道:
Since a 使用声明是一个声明,对同一声明区域中同名声明的限制也适用于使用声明。
因此,它的格式错误与以下格式错误的原因相同:它会在单个声明区域中产生两个具有相同名称的对象:
struct S { int d; int d; };
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)