C ++ 11 lambda create destroy

问题描述 投票:-1回答:1
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将一次又一次地创建和销毁?

c++ loops c++11 lambda
1个回答
2
投票

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

[stmt.iter]/2

(重点是我的)

iteration-statement中的子语句隐式地[定义每次通过循环进入和退出的块scope

© www.soinside.com 2019 - 2024. All rights reserved.