首页  >  文章  >  后端开发  >  在 C 11 Lambda 中通过引用捕获引用安全吗?

在 C 11 Lambda 中通过引用捕获引用安全吗?

Patricia Arquette
Patricia Arquette原创
2024-11-04 03:50:02276浏览

 Is Capturing a Reference by Reference in a C  11 Lambda Safe?

在 C 11 Lambda 中通过引用捕获引用

在 C 11 中,我们经常使用 lambda 从周围上下文中捕获变量。但是当我们通过引用捕获引用时会发生什么?这样做安全吗?

问题详细信息

考虑以下代码:

在此代码中,我们有一个 lambda捕获对整型变量 i 的引用。然后我们在主函数中修改 i 并调用 lambda。问题是,lambda 会输出 3 还是 5?

基于标准的答案

代码保证输出 5,而不会调用未定义的行为。

解释

根据根据 C 11 标准 ([expr.prim.lambda]/17),只有引用复制捕获的实体的 id 表达式才会转换为 lambda 闭包类型的成员访问。引用通过引用捕获的实体的 Id 表达式将被单独保留,并且仍然表示它们在封闭范围中表示的相同实体。

这意味着 lambda 中的引用 x 不会更改。它仍然引用主函数中相同的整型变量 i。因此,当我们在主函数中修改 i 时,lambda 仍然会看到修改后的值。

以上是在 C 11 Lambda 中通过引用捕获引用安全吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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