iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 12
1
Software Development

山姆大叔談 C++:從歷史談起,再給個定義—Modern C++ 解惑系列 第 12

DAY 11:Lambda,卷一:讓 STL 更親民的 Lambda 簡介

路上抓十個 C++ 專家問:「C++11 最棒的新功能是什麼?」十有八九會回答:Lambda!

如此有志一同,原因無他。沒有 Lambda 的年代,使用 STL 裡的 Algorithm 是很痛苦的一件事。Lambda 或許只是一種 Syntatic Sugar(語法糖),而且 Lambda 能做的事,幾乎都能「手寫」出來。但 Lambda 讓撰寫 C++ 程式碼變得更愉悅,也讓越來的 C++ 語言發展有更多可能。

What is Lambda? Or "Lambda Expression"

Lambda(全稱為 Lambda Expression)是一種用來產生「不具名(Anonymous)函數物件(Function Object)」的表示式。長像如下:

初學者可能會被 Lambda 語法嚇到,最常被拿出來笑的是這個完全合法的 Lambda:[](){}

三種括號排一起,也算是合法的 C++ 程式碼?仔細查看上圖的語法定義,確實如此。雖然上圖中的 ->return 不見了,但 C++ 編譯器很聰明,某些情況下會推導遺漏的碼,並自行補充。所以不寫出來也關係。

當然,實務上不太可能這麼寫,那麼就來看看 Lambda 的細部組成。開頭的 [] 稱為 Capture Clause,來表示 Lambda 的定義開始了。接著的 () 等於函數的參數列;其後的 ->return 表示此 Lambda 的回傳值;最後的 {} 即 Lambda 的實作。

延伸閱讀


上一篇
DAY 10:Function Object and std::function,卷一
下一篇
DAY 12:Lambda,卷二:Capture Clause
系列文
山姆大叔談 C++:從歷史談起,再給個定義—Modern C++ 解惑26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
alantsui
iT邦新手 5 級 ‧ 2019-09-14 00:10:47

()[]{}()
lamda 好像這樣也可以......

我一直以為要 [] 帶頭才行?

{}()

我要留言

立即登入留言