lambda函数的工作域是什么
What is the working domain of the lambda function?
{
... ...
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值类型的强制转换(没有任何作用。
相关文章:
- 当我从下面的代码中删除关键字 virtual 时,它可以正常工作,否则会出现错误。在这里"virtual"字的意义是什么?
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- C++,()运算符重载,它的工作是什么
- 我的C++程序的工作目录是什么
- PRNG种子到底是什么,它在c ++中是如何工作的?
- 在 Xcode 中工作的 CMake 中启用地址清理器的正确方法是什么
- 在Qt中使用工作线程将数据写入文件的正确方法是什么?
- 打开文件的正确模式是什么,以便 seekp() 的工作方式与在默认模式下打开的文件相同
- 其中一些工作而另一些工作无效的确切原因是什么?
- 该代码将如何工作以及输出的输出是什么
- 在 c++ 的文件处理中什么是 tellg(),它是如何工作的?
- 在工作中遇到这个"operator ClassName *".这是什么意思?
- std::multiset<A>的模板参数 A、B 分别是什么意思,它是如何工作的?
- 仅在标头中的外部变量意外工作,原因是什么
- c在这两种情况下是如何工作的以及有什么不同
- 当我们使用右值引用时究竟会发生什么,std::move是如何工作的
- 停止QThread工作进程处理即将删除的资源的正确方法是什么
- 让c++项目在android中工作的完整过程是什么
- OpenMP线程多于工作对性能的影响是什么?
- 在C++参数中的引用和指针如何实际工作?他们的固定协议/"rule"是什么?