构造函数或转换被称为?

时间:2017-03-19 13:11:52

标签: c++ c++11 constructor type-conversion

例如

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.

是否可以通过功能2构建或转换a

1 个答案:

答案 0 :(得分:2)

你编写它的方式,重载决策选择A的ctor。如果你的写作略有不同:

A a = b

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

explicit A(const B&) {}

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

如果你真的想强制使用B的转化运算符,你可以随时明确地调用它:

A a = b.operator A();