看板 C_and_CPP 關於我們 聯絡資訊
不是很確定C++版本 不過應該是C++11以後的 題目問 [](){}() 是甚麼意思? 想不透。。。 我只能硬回如果是[](){}的話代表是一個甚麼都不做的lambda 但是改成[](){}()我真的想不透是甚麼意思 請大大們賜教 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 98.221.196.175 (美國) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1595732170.A.DC6.html
TitanEric: lambda 07/26 11:04
TitanEric: 咦 有點不太一樣 07/26 11:04
loveme00835: [](){} 是 lambda expr, 它的功用就是建立 closure 07/26 11:08
loveme00835: 物件, 在 lambda expr 後面直接加上 () 是針對這個 07/26 11:09
loveme00835: function object 直接呼叫, 所以整個敘述的型別取決 07/26 11:10
loveme00835: 於 lambda expr 裡的 return statement, 這個常被用 07/26 11:10
loveme00835: 於物件的初始化, 某些物件必須要在建構的時候就完全 07/26 11:11
loveme00835: 給足參數, 沒辦法先用 default ctor 建構之後才用 07/26 11:11
uranusjr: 一個什麼都不做的 lambda 建立後馬上被呼叫 07/26 11:11
loveme00835: init() 之類的成員去預備好物件狀態, 所以常會在這個 07/26 11:12
loveme00835: lambda expr 裡做好需要的判斷, 所以你會經常看到 if 07/26 11:13
loveme00835: /switch 語句在裡頭, 通常回傳的物件會是 movable, 07/26 11:18
loveme00835: 這時候的 closure 起到的就是 inline factory method 07/26 11:18
loveme00835: 的角色 07/26 11:18
Dracarys: 如果你有個object的初始化邏輯很複雜就可以包在裡面, 07/26 20:40
Dracarys: 這樣不僅限制了初始化中間產物的scope,你也可以把被初 07/26 20:40
Dracarys: 始化的對象宣告為const(適用的話)。 07/26 20:40
Dracarys: BS的書有講到 07/26 20:41
lovejomi: Immediately invoked function expression 07/28 20:07
lovejomi: Immediately invoked function expression 07/28 20:07
james732: 請問Dracarys提到的書是哪一本呢? 07/28 20:22
Dracarys: A tour of C++ 第二版 6.3.3 07/28 21:54
james732: 謝謝回答!! 07/28 21:58
Killercat: 這我還真的想不太到use case.... 07/29 08:34
wawi2: 謝謝大家的回答 了解了 另外給一個例子(從lovejomi來的) 07/29 09:59
wawi2: shorturl.at/oMRV2 07/29 10:00