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

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

Links booklink

Contact Us: admin [ a t ] ucptt.com