簡體   English   中英

賦值運算符的返回類型是什么?

[英]what is return type of assignment operator?

我剛開始使用C ++。 我對賦值和取消引用運算符的返回類型有些困惑。 我正在關注《 C ++ Primer》一書。 作者在各種場合都說賦值運算符的返回類型是指左操作數的類型,但后來,他說返回類型是左操作數的類型。 我已經提到了C ++ 11 Standard Sec。 5.17,其中返回類型描述為“引用左操作數的左值”。

同樣,我無法弄清楚取消引用返回的是指向對象還是對該對象的引用。

這些陳述是否等效? 如果是這樣,那又如何? 任何解釋將不勝感激。

該標准正確定義了賦值運算符的返回類型。 實際上,賦值操作本身並不依賴於返回值-這就是為什么返回類型不容易理解的原因。

返回類型對於鏈接操作很重要。 考慮以下結構: a = b = c; 這應該等於a = (b = c) ,即c應該分配給bb應該分配給a 將其重寫為a.operator=(b.operator=(c)) 為了使對a的賦值正常工作, b.operator=(c)的返回類型必須引用內部賦值結果(它也可以與copy一起使用,但這只是不必要的開銷)。

取消引用運算符的返回類型取決於您的內部邏輯,以適合您需求的方式對其進行定義。

它們都可以是任何東西,但是通常 operator =通過引用返回當前對象,即

A& A::operator = ( ... )
{
   return *this;
}

是的,“引用左操作數的類型”和“引用左操作數的左值”含義相同。

取消引用運算符基本上可以具有任何返回類型。 它主要取決於程序的邏輯,因為您正在重載適用於對象而不是對象指針的運算符。 通常,這用於智能指針或迭代器,並返回它們環繞的對象:

struct smart_ptr
{
   T* innerPtr;
   T* smart_ptr::operator* ()
   {
      return innerPtr;
   }
}

smart_ptr p; 
T* x = *p;  

我曾見過類似的問題,但我認為最好使用

X& X::operator=(const X&);

使用此功能,您將能夠在鏈分配中重用該對象。

暫無
暫無

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

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