首页 > 后端开发 > C++ > 为什么 `[]{}` 在 C 中启用 Lambda 重新分配?

为什么 `[]{}` 在 C 中启用 Lambda 重新分配?

Linda Hamilton
发布: 2024-12-28 05:34:09
原创
264 人浏览过

Why Does ` []{}` Enable Lambda Reassignment in C  ?

解码神奇的“ ”运算符:理解“ []{}” Lambda

在一个令人困惑的观察中,一个单独的“ ”前缀C 中的 lambda 表达式奇迹般地实现了其重新分配。这个神秘的魔法引发了一个问题:为什么下面的代码能够编译成功?

int main() {
    auto test = +[]{}; // The "+" operator casts a lambda to a function pointer
    test = []{};
}
登录后复制

答案就在 C 标准的晦涩深处。 “” 触发 lambda 到普通旧函数指针的转换。 lambda 是非捕获的,本质上拥有到具有相同签名的函数指针的转换函数。此转换函数按照 C 标准中的定义,返回与 lambda 的函数调用运算符行为相同的函数的地址。

一元 " " 运算符,当应用于 lambda 生成的闭包对象时,涉及一组内置重载。这些重载之一接受任何指针类型并将其转换为函数指针。因此,闭包类型到函数指针(唯一候选重载函数)的转换具有优先权。

因此,“auto test = []{};”中“test”的类型被推导为“void(*)()”。这种函数指针兼容性使得可以将第二个 lambda/closure 对象分配给“test”,即使它们的闭包类型不同。

这些知识揭示了“[]{}”lambda 成功背后的秘密。通过将 lambda 转换为函数指针,它绕过了重新定义 lambda 的限制,解锁了分配新 lambda 对象的能力。

以上是为什么 `[]{}` 在 C 中启用 Lambda 重新分配?的详细内容。更多信息请关注PHP中文网其他相关文章!

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