例如
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
?
答案 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();