标签:c inheritance type-conversion reference
下图显示了针对此问题的三个独立测试:
(我只关注声明而不是函数的定义~~)
我想知道为什么正确的人得到错误的“’A’是’B’的难以接近的基础”.
为什么g似乎用派生类初始化对基类的引用(由于受保护的继承而导致错误),
而不是像中间一样使用转换运算符将B转换为A并传入(这是0错误和0警告)?
这是图片中右边的代码:
struct A {
A &operator=( const A & ) { return *this; }
}a;
struct B : protected A {
operator A() { return A(); };
}b;
int main( void )
{
a = b;
return 0;
}
谢谢你的帮助!〜
解决方法:
第12.3.2节:
A conversion function is never used to convert a (possibly cv-qualified) object to the (possibly cv-qualified) same object type (or a reference to it), to a (possibly cv-qualified) base class of that type (or a reference to it), or to (possibly cv-qualified) void.
此外,除少数例外情况外,公共/受保护/私人的选择很少改变程序的作用,只是程序是否有效.因此,初始化会在可能的情况下直接绑定对子对象的引用,而不是使用用户定义的转换,在进行该选择之后,编译器会检查访问权限.
标签:c,inheritance,type-conversion,reference 来源: https://codeday.me/bug/20190826/1724611.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。