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 创建销毁的主要内容,如果未能解决你的问题,请参考以下文章