调用构造函数或转换

Constructor or conversion is called?

本文关键字:转换 构造函数 调用      更新时间:2023-10-16

例如

struct A
{
    A(B const& b) {}  // function 1
};
struct B
{
    operator A() const { return A(); } // function 2
};

B b;
A a(b); // function 1 is called.

有什么方法可以使a通过函数 2 构造或转换?

按照你编写它的方式,重载分辨率选择了A的 ctor。如果你写得稍微不同:

A a = b

这将导致转换不明确的错误。如果将A 的 ctor 更改为显式:

explicit A(const B&) {}

然后它会选择B的转换运算符,而不是A的ctor,并用行A a = b调用A的ctor A a(b)

如果真的想强制B的转换运算符,可以随时显式调用它:

A a = b.operator A();