簡體   English   中英

為什么會這樣? operator =和復制構造函數

[英]why is this happening ? operator= and copy constructor

我有以下課程:

class CRectangle
{
    CRectangle(string color);
    CRectangle(CRectangle &origin);
    /* Some more code */
};

而這個:

class CPlane
{
    /* Some more code */
    CRectangle boundingBox();
};

為什么我能做到這一點?

CRectangle rectangle1;
CRectangle rectangle2=rectangle1;
CRectangle rectangle3(rectangle1); //Copy constructor.

但我不能這樣做:

CPlane plane;
CRectangle rectangle4=plane.boundingBox();
CRectangle rectangle5(plane.boundingBox()); //Copy constructor.

如果我需要最后一項工作,我怎么能這樣做? 我想也許它與operator =但我不確切知道。

編輯:修復復制構造函數。 錯誤仍然存​​在。

復制構造函數請求編譯器的第一個語法,用於無限遞歸。

它應該是:-

CRectangle(const CRectangle& origin);

其次,兩個調用都應該正常工作,因為兩者都是復制構造函數的調用。

CRectangle rectangle4=plane.boundingBox();
CRectangle rectangle5(plane.boundingBox()); 

您不能將rvalues綁定到非const左值引用。

CRectangle rectangle3(rectangle1);

這里rectangle1是一個非const值,所以沒關系。

CRectangle rectangle5(plane.boundingBox());

plane.boundingBox()是一個純rvalue(prvalue),所以CRectangle&不能綁定它。

而是聲明您的復制構造函數采用const引用:

CRectangle(CRectangle const&);

或者另外聲明一個移動構造函數(如果需要)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM