探索 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中文网其他相关文章!