iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 17
1

Structured Binding 是 C++17 納入的新功能,目前主流的編譯器都支援了這個功能。

以往麻煩的寫法,Structured Binding 搭配 auto 關鍵字,讓 C++ 程式碼更加精簡,也導出新的設計手法。以下示例:

struct TeaShopOwner {
    int         id;
    std::string name;
};

auto GetTeaShopOwner() -> TeaShopOwner
{
    TeaShopOwner owner { 87, "1Shit"};
    return owner;
}

auto [id, name] = GetTeaShopOwner();

留意上述程式碼最後一行,GetTeaShopOwner() 的回傳值為 TeaShopOwner struct,透過 Structured Binding 其回傳值改為兩個相應型別的變數。如此寫法,在許多場合讓程式碼更精簡,而且語義更加明確。

另一個更能突顯 Structured Binding 好處是搭配 Ranged-based for Loop:

struct TeaShopOwner {
    int         id;
    std::string name;
};

std::vector<TeaShopOwner> owners {{1, "COCO"}, {2, "1Shit"}};

// OLD
for (const auto& owner : owners) {
    printf("Owner id = %d\n", owner.id);
}

// Using Structured Binding
for (const auto& [id, _] : owners) {
    printf("Owner id = %d\n", id);
}

留意上面的 Ranged-based for-loop 接住 owners 時,將第二個變數名稱取為 _,利用這個手法來表示 name 在迴圈裡不受「重視」。

以往 C++ 函數的回傳值多是單一型別,如 bool, int。有了 Structured Binding 再搭配其他技巧,在處理回傳值時更有彈性。


上一篇
DAY 15:好用的小功能
下一篇
DAY 17:為類別設計的新關鍵字們
系列文
山姆大叔談 C++:從歷史談起,再給個定義—Modern C++ 解惑26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言