lambda函数的工作域是什么

What is the working domain of the lambda function?

本文关键字:是什么 工作 函数 lambda      更新时间:2024-05-24
{
... ...
std::function<int()> action;
switch (A)
{
case 0:
action = []()->int
{
return 1;
};
break;
case 1:
action = []()->int
{
return 2;
};
break;
default:
break;
}
... ...
}

上面是代码,函数指针指向的lambda函数在开关情况之外是否仍然有效?

一个额外的问题是lambda函数是如何被回收的?如果我像下面这样使用std::move(),lambda函数是否无法在funct()结束时自动回收/解构?

void funct(){
... ...
std::function<int()> action;
switch (A)
{
case 0:
action = std::move([]()->int
{
return 1;
});
break;
case 1:
action = std::move([]()->int
{
return 2;
});
break;
default:
break;
}
... ...
}

因此,我们可以将问题简化为一堆,也可以对以下代码提出相同的问题:

std::function<int()> action;
{
action = std::move([]()->int  {
return 1;
});
}

在这种情况下,你基本上有这样的:

Type default_init_value_type;
{
default_init_value_type = SomeConvertableType{};
}

因此,实际上,您正在转换类型并将lambda对象复制到std::function中。原始临时对象将正常销毁。由于编译器选择如何实现std库和lambda(在标准条件下(,因此如何实现以及销毁什么可能取决于编译器。

至于你的第二个例子。这里的std::move什么也不做。您的类型已经是r值,所以std::move(实际上只是r值类型的强制转换(没有任何作用。

相关文章: