c – 这个用户定义的转换是不是模糊不清?如果是这样,什么规则允
发布时间:2020-12-16 09:51:07 所属栏目:百科 来源:网络整理
导读:[C++11: 12.3/2]: User-defined conversions are applied only where they are unambiguous. [..] 然而,以下compiles just fine in GCC和Clang主干: struct B;struct A{ A(); operator B();};struct B{ B(const A);};int main(){ A a; (B)a;} 我错过了什么
然而,以下compiles just fine in GCC和Clang主干: struct B; struct A { A(); operator B(); }; struct B { B(const A&); }; int main() { A a; (B)a; } 我错过了什么? 解决方法
在这种情况下,演员表示法(B)a等同于static_cast< B>(a)(§5.4/ 4).这又与初始化B t(a)具有相同的语义,其中t是临时的(§5.2.9/ 4).由于B具有类类型,并且初始化是直接初始化,因此只考虑B的构造函数(§8.5/ 16).适用的构造函数是:
>转换构造函数B :: B(const A&) 由于从A到const A& A的隐式转换,转换构造函数赢得了重载决策.是一个完全匹配. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |