构造函数或转换被调用?
Posted
技术标签:
【中文标题】构造函数或转换被调用?【英文标题】:Constructor or conversion is called? 【发布时间】:2017-03-19 13:11:52 【问题描述】:例如
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构造或转换?
【问题讨论】:
我不这么认为;重载决议选择1 【参考方案1】:按照您编写的方式,重载决议选择了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();
【讨论】:
以上是关于构造函数或转换被调用?的主要内容,如果未能解决你的问题,请参考以下文章