首页 > 后端开发 > C++ > 为什么'[]{}”启用 C 中的 Lambda 表达式编译?

为什么'[]{}”启用 C 中的 Lambda 表达式编译?

Barbara Streisand
发布: 2024-12-24 18:21:18
原创
632 人浏览过

Why Does

用 Lambda 表达式揭开“ ”的神秘面纱:“[]{}”

在之前的 Stack Overflow 问题中,一个看似简单的 lambda 表达式无法编译。然而,通过在 lambda 之前添加 ' ' 运算符,代码奇迹般地获得了编译能力。这个有趣的观察提出了一个问题:为什么“[]{}”有效?

关键在于“”运算符的重载行为。当应用于由非捕获 lambda 生成的闭包对象时,它会调用内置转换函数,将闭包转换为普通函数指针。

此转换至关重要,因为 ' ' 运算符有一个候选将任何类型转换为指针的重载。因此,将 ' ' 应用于闭包对象会产生一个指向 lambda 的函数指针。

声明第一个 lambda 后,'test' 的类型变为 void(*)(),它是一个函数指针void 返回类型并且没有参数。这允许将第二个 lambda 分配给“test”,尽管闭包类型不同。

因此,代码的功能可以解释如下:

  1. 第一个 lambda 是使用 ' ' 运算符转换为函数指针。
  2. 'test' 的类型变为函数指针void(*)().
  3. 第二个 lambda 也转换为函数指针,确保与 'test' 兼容。
  4. 对 'test' 的赋值成功,因为两个函数指针兼容.

此行为完全符合 C 标准,使“[]{}”成为 lambda 有效且非常有用的技巧表达式。

以上是为什么'[]{}”启用 C 中的 Lambda 表达式编译?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板