今天的守則很簡單,可以直接來看看。
這個守則是:
Have assignment operators return a reference to *this
這是什麼意思呢?首先assignemnts的特性是我們可以把它們chain起來,像這樣
int x, y, z;
int x = y = z = 15;
而assignment是right-associative的(右結合?右關聯?右相依??whatever),總之是從右邊開始:
x = (y = (z = 15));
而這怎麼做到的呢?assign的時候,回傳的其實是left-hand argument的reference,因此才能達到chain的效果。
有鑑於此,我們在實作assignment operator的時候,應該也要follow這個convention。
例如:
class Widget
{
public:
Widget& operator= (const Widget& rhs)
{
...
return *this;
}
}
不只是一般典型的assignment operator, 所有的operator都應該要遵守:
class Widget
{
public:
Widget& operator+= (const Widget& rhs)
{
...
return *this;
}
Widget& operator= (int rhs)
{
...
return *this;
}
}
最後,這只是一個convention,所以就算違反還是能編譯;但最好遵守他,因為所有built-ini tpyes跟standard library都有遵守。
貼心重點提醒:(很重要所以再重複一遍??)
- Have assignment operators return a reference to *this
感覺這則是下一則的熱身...
補充一下為什麼return *this會return 這個object的reference: