关于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()
函数执行期间一直存在。 - Colin Basnett