为什么在创建newA期间不使用我定义的任何构造函数? 我认为复制和转换构造函数的非显式调用看起来很相似,但我猜错了。
struct B;
struct A
{
A(){ cout<<"Default\n"<<flush; }
A(const B&){ cout<<"Convert\n"<<flush; }
A(const B&&){ cout<<"Convert rvalue\n"<<flush; }
A(const A&&){ cout<<"Copy rvalue\n"<<flush; }
A(const A&){ cout<<"Copy\n"<<flush; }
};
struct B
{
operator A(){ A k; return k; }
};
int main()
{
B newB;
//Prints nothing
A newA(B());
//Prints "Convert rvalue"
A newerA = A(B());
return 0;
}