在之前的 Stack Overflow 问题中,一个看似简单的 lambda 表达式无法编译。然而,通过在 lambda 之前添加 ' ' 运算符,代码奇迹般地获得了编译能力。这个有趣的观察提出了一个问题:为什么“[]{}”有效?
关键在于“”运算符的重载行为。当应用于由非捕获 lambda 生成的闭包对象时,它会调用内置转换函数,将闭包转换为普通函数指针。
此转换至关重要,因为 ' ' 运算符有一个候选将任何类型转换为指针的重载。因此,将 ' ' 应用于闭包对象会产生一个指向 lambda 的函数指针。
声明第一个 lambda 后,'test' 的类型变为 void(*)(),它是一个函数指针void 返回类型并且没有参数。这允许将第二个 lambda 分配给“test”,尽管闭包类型不同。
因此,代码的功能可以解释如下:
此行为完全符合 C 标准,使“[]{}”成为 lambda 有效且非常有用的技巧表达式。
以上是为什么'[]{}”启用 C 中的 Lambda 表达式编译?的详细内容。更多信息请关注PHP中文网其他相关文章!