[问题] 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