C++11 lambda 创建销毁

Posted

技术标签:

【中文标题】C++11 lambda 创建销毁【英文标题】:C++11 lambda create destroy 【发布时间】:2019-12-24 10:54:18 【问题描述】:
for(int i = 0 ; i < 10 ; i++)

   auto func_1 = [a] (int a)  return a > 1; 
   func_1();

func_1会一次又一次地创造和毁灭吗?

void forFunc()

    for(int i = 0 ; i < 10 ; i++)
    
       auto func_2 = [a] (int a)  return a > 1; 
       func_2();
    

for(int i = 0 ; i < 10 ; i++)

    forFunc();

func_2会一次又一次地创造和毁灭吗?

【问题讨论】:

a 不在其中任何一个捕获的范围内。您也未能将参数传递给func_1func_2。你的意思是[i] () return i &gt; 1; 还是[] (int a) return a &gt; 1; ?您也忽略了返回值。 请发布可编译的代码。 【参考方案1】:

是的,这不仅对于 lambda 对象是特殊的,对于其他具有块范围的对象也是如此。对于每次迭代,您都会获得一个全新的对象,该对象在定义点创建并在块结束时销毁。

[stmt.iter]/2

(强调我的)

iteration-statement 中的子语句隐式定义了一个块 scope,每次通过循环进入和退出该块

【讨论】:

以上是关于C++11 lambda 创建销毁的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能在 C++11 中创建一个 lambda 向量(相同类型)?

lambda 表达式

在 C++11 中按值或引用使用 lambda 默认捕获的缺点?

线程池,lambda表达式

主网001提案|销毁Lambda研发团队持有的7亿LAMB投票通过

AWS Lambda 容器销毁事件