gpt4 book ai didi

c++ - 这个用户定义的转换没有歧义吗?如果可以,什么规则允许这样做?

转载 作者:太空狗 更新时间:2023-10-29 20:13:17 26 4
gpt4 key购买 nike

[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&是完全匹配。

关于c++ - 这个用户定义的转换没有歧义吗?如果可以,什么规则允许这样做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22444835/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com