iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0
自我挑戰組

Effective C++ 讀書筆記系列 第 14

[Day 14] Have assignment operators return a reference to *this

  • 分享至 

  • xImage
  •  

前言

今天的守則很簡單,可以直接來看看。

assignment operator請return *this

這個守則是:

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 argumentreference,因此才能達到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:


上一篇
[Day 13] Never call virtual functions during construction and destruction
下一篇
[Day 15] Handle assignment to self in operator= (1)
系列文
Effective C++ 讀書筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言