[英]C++ function returning value as reference and return *this
如果我想從類成員函數返回“this”作為引用,這段代碼是否正確?
Record& operator=(const Record& that) { m_name = that.m_name; return *this; }
我不應該只使用“歸還”嗎?
感謝幫助 :)
是的,這是對的。
返回this
不起作用,因為this
是一個指針。 (它是一個指針而不是引用的原因是因為引用在類之后才被引入語言。)
在這種特定情況下,如果您只是要分配成員,則不應編寫復制賦值運算符; 默認情況也是如此。 當您管理某些資源(並調用Rule of Three )時,您需要使用復制和交換習慣用法 。
你的代碼是正確的,但你的評論shouldn't I just use "return this"
是錯誤的(或者,更確切地說,答案是“不,你不應該,如果你嘗試,任何編譯器甚至可以正常工作編譯器會阻止你並給出錯誤信息。“)
鑒於以下類:
class T {
void X() {}
void Y() const {}
};
在T::X
, this
將有類型T *const
,並在T::Y
, this
將有類型T const *const
。 無論哪種方式,它都是指向 T的指針 ,而不是對T的引用 。要獲得對T的引用(用於返回或任何其他目的),您需要使用*this
。
對於這種特定情況可能無關緊要,但在復制賦值運算符中使用自我賦值保護是一種好習慣。
Record& operator=(const Record& that) {
if( &that != this ) {
m_name = that.m_name;
}
return *this;
}
這可以防止像這樣的陳述
Record r;
// do something with r
r = r; // this is protected
當類正在做一些資源(例如動態分配的內存)管理時,這很重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.