[問題] C++考題 - [](){}()是甚麼意思

看板C_and_CPP (C/C++)作者 (@@)時間5年前 (2020/07/26 10:56), 編輯推噓6(6020)
留言26則, 8人參與, 5年前最新討論串1/1
不是很確定C++版本 不過應該是C++11以後的 題目問 [](){}() 是甚麼意思? 想不透。。。 我只能硬回如果是[](){}的話代表是一個甚麼都不做的lambda 但是改成[](){}()我真的想不透是甚麼意思 請大大們賜教 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 98.221.196.175 (美國) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1595732170.A.DC6.html

07/26 11:04, 5年前 , 1F
lambda
07/26 11:04, 1F

07/26 11:04, 5年前 , 2F
咦 有點不太一樣
07/26 11:04, 2F

07/26 11:08, 5年前 , 3F
[](){} 是 lambda expr, 它的功用就是建立 closure
07/26 11:08, 3F

07/26 11:09, 5年前 , 4F
物件, 在 lambda expr 後面直接加上 () 是針對這個
07/26 11:09, 4F

07/26 11:10, 5年前 , 5F
function object 直接呼叫, 所以整個敘述的型別取決
07/26 11:10, 5F

07/26 11:10, 5年前 , 6F
於 lambda expr 裡的 return statement, 這個常被用
07/26 11:10, 6F

07/26 11:11, 5年前 , 7F
於物件的初始化, 某些物件必須要在建構的時候就完全
07/26 11:11, 7F

07/26 11:11, 5年前 , 8F
給足參數, 沒辦法先用 default ctor 建構之後才用
07/26 11:11, 8F

07/26 11:11, 5年前 , 9F
一個什麼都不做的 lambda 建立後馬上被呼叫
07/26 11:11, 9F

07/26 11:12, 5年前 , 10F
init() 之類的成員去預備好物件狀態, 所以常會在這個
07/26 11:12, 10F

07/26 11:13, 5年前 , 11F
lambda expr 裡做好需要的判斷, 所以你會經常看到 if
07/26 11:13, 11F

07/26 11:18, 5年前 , 12F
/switch 語句在裡頭, 通常回傳的物件會是 movable,
07/26 11:18, 12F

07/26 11:18, 5年前 , 13F
這時候的 closure 起到的就是 inline factory method
07/26 11:18, 13F

07/26 11:18, 5年前 , 14F
的角色
07/26 11:18, 14F

07/26 20:40, 5年前 , 15F
如果你有個object的初始化邏輯很複雜就可以包在裡面,
07/26 20:40, 15F

07/26 20:40, 5年前 , 16F
這樣不僅限制了初始化中間產物的scope,你也可以把被初
07/26 20:40, 16F

07/26 20:40, 5年前 , 17F
始化的對象宣告為const(適用的話)。
07/26 20:40, 17F

07/26 20:41, 5年前 , 18F
BS的書有講到
07/26 20:41, 18F

07/28 20:07, 5年前 , 19F
Immediately invoked function expression
07/28 20:07, 19F

07/28 20:07, 5年前 , 20F
Immediately invoked function expression
07/28 20:07, 20F

07/28 20:22, 5年前 , 21F
請問Dracarys提到的書是哪一本呢?
07/28 20:22, 21F

07/28 21:54, 5年前 , 22F
A tour of C++ 第二版 6.3.3
07/28 21:54, 22F

07/28 21:58, 5年前 , 23F
謝謝回答!!
07/28 21:58, 23F

07/29 08:34, 5年前 , 24F
這我還真的想不太到use case....
07/29 08:34, 24F

07/29 09:59, 5年前 , 25F
謝謝大家的回答 了解了 另外給一個例子(從lovejomi來的)
07/29 09:59, 25F

07/29 10:00, 5年前 , 26F
shorturl.at/oMRV2
07/29 10:00, 26F
文章代碼(AID): #1V7F3At6 (C_and_CPP)
文章代碼(AID): #1V7F3At6 (C_and_CPP)