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_1
或func_2
。你的意思是[i] () return i > 1;
还是[] (int a) return a > 1;
?您也忽略了返回值。
请发布可编译的代码。
【参考方案1】:
是的,这不仅对于 lambda 对象是特殊的,对于其他具有块范围的对象也是如此。对于每次迭代,您都会获得一个全新的对象,该对象在定义点创建并在块结束时销毁。
[stmt.iter]/2
(强调我的)
iteration-statement 中的子语句隐式定义了一个块 scope,每次通过循环进入和退出该块。
【讨论】:
以上是关于C++11 lambda 创建销毁的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不能在 C++11 中创建一个 lambda 向量(相同类型)?
在 C++11 中按值或引用使用 lambda 默认捕获的缺点?