[英]C++ Programming: How do references work in operator overloading?
我試圖理解為什么在重載 C++ 運算符時使用引用。 例如,在下面的一段代碼中:
GenericObject& operator=(const GenericObject &rhs)
{
if (&rhs == this)
return *this;
objectAttribute = GenericObject.objectAttribute;
return *this;
}
我有三個問題:
盡我所能,您的問題的答案是:
您返回一個引用,因為它將在稍后的構造函數/析構函數調用中保存您。 我的一位教授使用的一個很好的經驗法則是“如果有疑問,按照整數做。” 當你看一個像int x = 1, y = 2, z = 3; x = y = z;
int x = 1, y = 2, z = 3; x = y = z;
,通過引用返回允許您獲取z
的值,將其分配給y
,然后獲取(新的) y
的值並將其分配給x
。 按值返回要求您創建z
的副本,使用它來分配y
,刪除z
的副本,然后創建(新的) y
的副本以在刪除此副本之前分配x
。 對於整數可能不是什么大問題,但它可能意味着更長的程序和更大的數據。
你完全正確! 出於同樣的原因,我們試圖在第一部分中節省時間和精力,我們通過引用傳遞右側項目以避免必須進行重復(這需要構造函數/析構函數調用)並將其設為const
以便我們不能無意中更改它,因為這與operator=
不合邏輯。 作為旁注,如果您在某些情況下不小心,額外的構造函數/析構函數調用可能是危險的(有關此示例,請參閱深拷貝與淺拷貝)。
當您撥打x = y;
類的電話時x = y;
, 邏輯上等價於x.operator=(y);
. 因為 x 是某個對象,所以我們需要一種方法來引用整個事物,而關鍵字this
允許此功能。 然而, this
是一個指針,所以因為我們試圖比較一個指針和一個對象,所以我們需要指向rhs
(或在我的例子中是y
)持有的對象,我們通過使用&
獲得這個地址。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.