为什么会这样?operator =和复制构造函数

Izo*_*eak 3 c++ constructor operator-overloading

我有以下课程:

class CRectangle
{
    CRectangle(string color);
    CRectangle(CRectangle &origin);
    /* Some more code */
};
Run Code Online (Sandbox Code Playgroud)

而这个:

class CPlane
{
    /* Some more code */
    CRectangle boundingBox();
};
Run Code Online (Sandbox Code Playgroud)

为什么我能做到这一点?:

CRectangle rectangle1;
CRectangle rectangle2=rectangle1;
CRectangle rectangle3(rectangle1); //Copy constructor.
Run Code Online (Sandbox Code Playgroud)

但我不能这样做:

CPlane plane;
CRectangle rectangle4=plane.boundingBox();
CRectangle rectangle5(plane.boundingBox()); //Copy constructor.
Run Code Online (Sandbox Code Playgroud)

如果我需要最后一项工作,我怎么能这样做?我想也许它与运营商有关=但我不确切知道.

编辑:修复复制构造函数.错误仍然存​​在.

rav*_*avi 5

复制构造函数请求编译器的第一个语法,用于无限递归.

它应该是:-

CRectangle(const CRectangle& origin);
Run Code Online (Sandbox Code Playgroud)

其次,两个调用都应该正常工作,因为两者都是复制构造函数的调用.

CRectangle rectangle4=plane.boundingBox();
CRectangle rectangle5(plane.boundingBox()); 
Run Code Online (Sandbox Code Playgroud)