[C++11: 12.3/2]:用户定义的转换仅在明确无误的情况下应用.[..]
struct B;
struct A
{
A();
operator B();
};
struct B
{
B(const A&);
};
int main()
{
A a;
(B)a;
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
(B)a在这种情况下,演员符号与static_cast<B>(a)(§5.4/ 4)相同.这又与初始化具有相同的语义B t(a),其中t是临时的(§5.2.9/ 4).由于B具有类类型,并且初始化是直接初始化,因此只B考虑构造函数(§8.5/ 16).适用的构造函数是:
B::B(const A&)B::B(const B&)B::B(B&&)转换构造胜由于从隐式转换重载解析A到const A&是完全匹配.