作者wawi2 (@@)
看板C_and_CPP
标题[问题] C++考题 - [](){}()是甚麽意思
时间Sun Jul 26 10:56:08 2020
不是很确定C++版本 不过应该是C++11以後的
题目问 [](){}() 是甚麽意思?
想不透。。。
我只能硬回如果是[](){}的话代表是一个甚麽都不做的lambda
但是改成[](){}()我真的想不透是甚麽意思
请大大们赐教 谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 98.221.196.175 (美国)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1595732170.A.DC6.html
1F:推 TitanEric: lambda 07/26 11:04
2F:→ TitanEric: 咦 有点不太一样 07/26 11:04
3F:→ loveme00835: [](){} 是 lambda expr, 它的功用就是建立 closure 07/26 11:08
4F:→ loveme00835: 物件, 在 lambda expr 後面直接加上 () 是针对这个 07/26 11:09
5F:→ loveme00835: function object 直接呼叫, 所以整个叙述的型别取决 07/26 11:10
6F:→ loveme00835: 於 lambda expr 里的 return statement, 这个常被用 07/26 11:10
7F:→ loveme00835: 於物件的初始化, 某些物件必须要在建构的时候就完全 07/26 11:11
8F:→ loveme00835: 给足参数, 没办法先用 default ctor 建构之後才用 07/26 11:11
9F:→ uranusjr: 一个什麽都不做的 lambda 建立後马上被呼叫 07/26 11:11
10F:→ loveme00835: init() 之类的成员去预备好物件状态, 所以常会在这个 07/26 11:12
11F:→ loveme00835: lambda expr 里做好需要的判断, 所以你会经常看到 if 07/26 11:13
12F:→ loveme00835: /switch 语句在里头, 通常回传的物件会是 movable, 07/26 11:18
13F:→ loveme00835: 这时候的 closure 起到的就是 inline factory method 07/26 11:18
14F:→ loveme00835: 的角色 07/26 11:18
15F:推 Dracarys: 如果你有个object的初始化逻辑很复杂就可以包在里面, 07/26 20:40
16F:→ Dracarys: 这样不仅限制了初始化中间产物的scope,你也可以把被初 07/26 20:40
17F:→ Dracarys: 始化的对象宣告为const(适用的话)。 07/26 20:40
18F:→ Dracarys: BS的书有讲到 07/26 20:41
19F:推 lovejomi: Immediately invoked function expression 07/28 20:07
20F:→ lovejomi: Immediately invoked function expression 07/28 20:07
21F:→ james732: 请问Dracarys提到的书是哪一本呢? 07/28 20:22
22F:推 Dracarys: A tour of C++ 第二版 6.3.3 07/28 21:54
23F:推 james732: 谢谢回答!! 07/28 21:58
24F:推 Killercat: 这我还真的想不太到use case.... 07/29 08:34
25F:→ wawi2: 谢谢大家的回答 了解了 另外给一个例子(从lovejomi来的) 07/29 09:59
26F:→ wawi2: shorturl.at/oMRV2 07/29 10:00