c – 这个用户定义的转换是不是模糊不清?如果是这样,什么规则允许呢?

c – 这个用户定义的转换是不是模糊不清?如果是这样,什么规则允许呢?,第1张

概述[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

[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 – 这个用户定义的转换是不是模糊不清?如果是这样,什么规则允许呢?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1215884.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存