c 11下面的lambda函数的范围是什么
发布时间:2020-12-16 10:09:31 所属栏目:百科 来源:网络整理
导读:关于lambda函数的快速问题.我看到当使用 gcc编译器时,如果没有捕获,则会对lambda的operator()函数的函数指针进行隐式转换.结果看下面这个淡化的例子我应该期望这个函数的生命时间可用于回调? lambda函数的定义范围是什么?本地范围,包装范围,全球范围?在这
关于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; } 解决方法
lambda表达式返回匿名定义的类的实例(该类型仅为编译器所知).此类重载operator()作为
function object.
最重要的是,不关闭任何状态的lambda表达式具有添加的规范,它们可以隐式转换为C风格的函数指针.在这些情况下,假设operator()只调用一个静态函数(隐式转换是指向该静态函数的指针). 了解了所有这些,我们可以说出您发布的代码的以下内容: >每次调用fx函数时,都会创建一个匿名类的实例 >这个例子是一个r值;因此它只存在于声明结束之前 > fx函数返回的函数指针实际上是指向静态函数的指针>拥有它的人可以安全地使用函数指针(因为它是一个没有共享状态的静态函数) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |