簡體   English   中英

C ++函數返回值作為引用並返回* this

[英]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::Xthis將有類型T *const ,並在T::Ythis將有類型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.

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