[英]what is return type of assignment operator?
我剛開始使用C ++。 我對賦值和取消引用運算符的返回類型有些困惑。 我正在關注《 C ++ Primer》一書。 作者在各種場合都說賦值運算符的返回類型是指左操作數的類型,但后來,他說返回類型是左操作數的類型。 我已經提到了C ++ 11 Standard Sec。 5.17,其中返回類型描述為“引用左操作數的左值”。
同樣,我無法弄清楚取消引用返回的是指向對象還是對該對象的引用。
這些陳述是否等效? 如果是這樣,那又如何? 任何解釋將不勝感激。
該標准正確定義了賦值運算符的返回類型。 實際上,賦值操作本身並不依賴於返回值-這就是為什么返回類型不容易理解的原因。
返回類型對於鏈接操作很重要。 考慮以下結構: a = b = c;
。 這應該等於a = (b = c)
,即c
應該分配給b
, b
應該分配給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.