令operator=返回一個reference to *this
阿新 • • 發佈:2018-12-02
關於賦值,我們可以把它寫成連鎖形式:
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共同遵守。因此除非你有一個標新立異的好理由,不然還是隨眾吧。