【发布时间】:2014-04-21 23:02:34
【问题描述】:
关于 lambda 函数的快速问题。我看到在使用 gcc 编译器时,如果没有捕获,则隐式转换为 lambda 的 operator() 函数的函数指针。因此,看看下面这个淡化的例子,我应该期望这个函数的生命周期可用于回调? lambda 函数定义在什么范围内?本地范围,包范围,全局范围?在这种情况下,函数退出后调用 lambda 有什么问题吗?我根本不想在这里使用 std::function,所以请不要用 std::function 返回值作为解决方案。我的问题实际上只是为了了解该函数的范围(没有捕获)以及它是否在程序的生命周期内可用。
#include <iostream>
typedef int(*fPtrT)(int,int);
fPtrT fx() {
return static_cast<fPtrT>([](int i, int j){return i+j;});
}
int main()
{
std::cout << fx()(5,2) << std::endl;
}
【问题讨论】:
-
你的
fx()函数创建了一个r-value变量,其作用域持续main()。 -
@cmbasnett 谢谢,但我知道的很多,我在问编译器创建的 lambda 对象本身创建的范围是什么