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