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
将一次又一次地创建和销毁?
是的,这不仅对于lambda对象是特殊的,而且对于其他具有块范围的对象也是如此。对于每次迭代,您都会得到一个全新的对象,该对象在定义时创建,并在代码块的末尾销毁。
(重点是我的)
iteration-statement中的子语句隐式地[定义每次通过循环进入和退出的块scope。