1. 程式人生 > >令operator=返回一個reference to *this

令operator=返回一個reference to *this

關於賦值,我們可以把它寫成連鎖形式:

int x, y, z;

x = y = z = 15;

賦值採用右結合律,所以上述賦值被解釋為:

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

為了實現"連鎖賦值",賦值操作符必須返回一個reference指向操作符的左側實參。這是你為class實現賦值操作符時應該遵循的協議:

class Widget {

public:

。。。

        Widget& operator=(const Widget &rhs)

        {

                return* this;

                。。。

        }

}

這個協議不僅適合以上標準賦值形式,也適用於所有賦值相關運算,例如:

class Widget {

public:

        Widget& operator+=(const Widget& rhs)

        {

                return *this; 

        }

        Widget& operator=(int rhs)

        {

                return *this; 

        }

}

注意,這只是一個形式,並無強制性。如果不遵循它,程式碼一樣可以通過編譯。然而這個協議被所有內建型別和標準程式庫提供的型別如:string,vector,complex,tr1::shared_ptr共同遵守。因此除非你有一個標新立異的好理由,不然還是隨眾吧。