【问题标题】: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

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


【解决方案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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 2016-07-12
    • 2011-02-12
    • 2012-07-19
    • 1970-01-01
    相关资源
    最近更新 更多