程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 《Effective C++ 》學習筆記——條款10

《Effective C++ 》學習筆記——條款10

編輯:C++入門知識

《Effective C++ 》學習筆記——條款10


 

 

 

二、Constructors,Destructors and Assignment Operators

 

Rule 10:Have assignment operators return a reference to *this

規則10:令operator= 返回一個 reference to *this

 

 

關於賦值,有一個很有趣的連鎖代碼:

 

int x,y,z;
x = y = z = 15;    // 賦值的連鎖形式

而且,C++采用右結合律,如果用括號來代表優先計算順序,就是這樣的:

 

 

x = ( y = ( z = 15 ) ) ;


 

C++中,為了實現“連鎖賦值”,賦值操作符必須返回一個reference指向操作符的左側實參。(注意,這是classes 實現賦值操作符時應該遵循的協議)

 

class Widget  {
public:
    ...
    Widget& operator=( const Widget& rhs )		// 返回類型是個reference
    {
        ...
        return* this;					// 返回左側對象
    }
    ...
};

而且這個協議不僅適用於以上的標准賦值形式,也適用於所有賦值相關的運算,比如+=、-=、*= 等:

 

 

Widget& operator+=( const Widget& rhs )
{
    ...
    return *this;
}

但是,要注意這只是一個協定,並無強制性,如果不遵循它,代碼一樣可以通過編譯。然而這份協議被所有內置類型和標准程序庫提供的類型,如 string、vector、complex,trl::shared_ptr 等共同遵守。

 

所以除非有足夠的理由去另類一下,不然還是從眾吧。

 

☆請記住

令 assignment(賦值) 操作符返回一個 reference to *this。

 

 

 

***************************************轉載請注明出處:http://blog.csdn.net/lttree********************************************

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved