首页 >后端开发 >C++ >C 11 Lambda 表达式的'auto”推导出什么类型?

C 11 Lambda 表达式的'auto”推导出什么类型?

Barbara Streisand
Barbara Streisand原创
2024-12-06 01:10:10542浏览

What Type Does

探索 C 11 中“auto”的 Lambda 推导类型

与 lambda 类型是函数指针的误解相反,最近的一项测试揭示了一个意想不到的结果。当尝试将 lambda 表达式分配给函数指针和“auto”变量时,断言失败。这就提出了一个问题,当使用“auto”关键字推导时,lambda 的真实类型是什么?

澄清一下,lambda 表达式实际上是函子的语法快捷方式。在编译期间,lambda 被转换为函子对象。 [] 括号内的元素成为构造函数参数和函子成员变量,而 () 括号内的参数则转换为函子的 operator() 参数。

引人注目的是,lambda 不捕获任何变量(即那些在其中没有元素的 lambda) []) 可以转换为函数指针(尽管 MSVC2010 不支持这种转换)。然而,需要强调的是,lambda 的内在类型仍然是未指定的函子类型。

在提供的代码示例中,lambda 表达式 LAMBDA 最初分配给函数指针 pFptr,然后分配给“auto” “变量pAuto。随后的断言验证了 pFptr 和 pAuto 的类型是否相等,确实通过了。这表明“auto”关键字成功地将 lambda 的类型推导为函数指针,从而允许对 pFptr 进行无缝赋值。

然而,关键要点是 lambda 本质上是未指定的函子类型,无论它们能够转换为函数指针。这种区别凸显了现代 C 编程中 lambda 表达式的灵活性和复杂性。

以上是C 11 Lambda 表达式的'auto”推导出什么类型?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn