构造函数或转换被调用?

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();

【讨论】:

以上是关于构造函数或转换被调用?的主要内容,如果未能解决你的问题,请参考以下文章

哪个是第一个被调用的?构造函数或 componentDidMount 或 Render

unity中的构造函数

C++初始化列表构造函数VS普通构造函数

构造函数和析构函数能不能被继承

C++11 中的“转换构造函数”发生了啥变化? [复制]

构造函数的定义和构造函数的重载