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

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

有大佬知道吗?
...全文
265 2 点赞 打赏 收藏 举报
写回复
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()>都可以适配
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言
加入

6.0w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2019-12-17 10:57
社区公告
暂无公告