加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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;} 我错过了什么

[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的隐式转换,转换构造函数赢得了重载决策.是一个完全匹配.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读