[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;}
我错过了什么?
解决方法 在这种情况下,演员表示法(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&)
>隐式定义的复制构造函数B :: B(const B&)
>隐式定义的移动构造函数B :: B(B&&)
由于从A到const A& A的隐式转换,转换构造函数赢得了重载决策.是一个完全匹配.
总结以上是内存溢出为你收集整理的c – 这个用户定义的转换是不是模糊不清?如果是这样,什么规则允许呢?全部内容,希望文章能够帮你解决c – 这个用户定义的转换是不是模糊不清?如果是这样,什么规则允许呢?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)