[英]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.