转换构造函数未调用它应该在的位置

时间:2017-06-27 20:04:18

标签: c++ constructor

为什么在创建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;
}

0 个答案:

没有答案