lambda表达式的类型应该是什么?

zerozerg2006 2019-12-17 10:57:01
网上都是一套auto就没了
比较好奇,如果我不用auto去声明一个lambda表达式,那这个式子的类型应该是怎样的?
按照编译器里面写的结构去掉,发现没有lambda这个类型,也没有lambda这个头文件。

有大佬知道吗?
...全文
419 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdghchj 2019-12-17
  • 打赏
  • 举报
回复
lambda表达式是一种特殊的匿名函数类型,没有具体的类型名。


//gcc 的一个有参构造函数
template<typename _Functor,
	       typename = _Requires<__not_<is_same<_Functor, function>>, void>, //要求_Functor不能是function类型,因为已经有另一个拷贝构造
	       typename = _Requires<_Callable<_Functor>, void>> //重点是这行的_Callable模板类
	function(_Functor);


再看_Callable模板类,关键是__check_func_return_type模板类
template<typename _Func,
	       typename _Res2 = typename result_of<_Func&(_ArgTypes...)>::type>
	struct _Callable : __check_func_return_type<_Res2, _Res> { };

再看__check_func_return_type模板类,看这个名字就好懂:is_void is_same  is_convertible
template<typename _From, typename _To>
    using __check_func_return_type
      = __or_<is_void<_To>, is_same<_From, _To>, is_convertible<_From, _To>>;

zerozerg2006 2019-12-17
  • 打赏
  • 举报
回复
std::function<int()> x8 = [this] { return i_++; }; 大概了解了,lambda表达式的类型是一个函数 不过比较奇怪,在这个类型里,function<int()> 和 function<void()>都可以适配

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧