[effective c++] 讓operator=返回*this的引用

    爲何非要返回 *this 呢? c++

    Effictive c++是這麼解釋的:當定義本身的賦值運算符時,必須返回賦值運算符左邊參數的引用,*this。若是不這樣作,就會致使不能連續賦值,或致使調用時的隱式類型轉換不能進行,或兩種狀況同時發生。 程序員

   這裏使用string類來講明: 數組

string& string::operator=(const string& rhs)
{
   ... //先要判斷是否是同一個對象
   ...
   return *this;	// 返回左邊的對象
}
這是正確的寫法。可是若是下面的寫就錯了,覺得 參數是const類型,返回值是非const類型,c++語法規定沒法把const對象賦值給非const對象,因此編譯不會經過。
string& string::operator=(const string& rhs)
{
...
return rhs;	// 返回右邊的對象
}

     你會說,把函數參數改成非const不行嗎?若是改成非const,第二種狀況會編譯經過,可是在賦值的時候 : 編輯器

    string c = "just" ; "just" 是一個字符數組,類型不匹配,編輯器會產生一個臨時的 函數

    const string temp("just") ; this

    c = temp; code

    注意臨時值是一個const。這很重要,由於它能夠防止傳遞到函數內的臨時值被修改。不然,程序員就會很奇怪地發現,只有編譯器產生的臨時值能夠修改而他們在函數調用時實際傳進去的參數卻不行。 對象

相關文章
相關標籤/搜索