gpt4 book ai didi

c++ - 为什么我可以在 C++ 的可变 lambda 中捕获未声明的变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:05:45 24 4
gpt4 key购买 nike

我们知道在 C++ 中,lambda 表达式可以通过复制(值)或通过引用来捕获局部变量,但为什么我可以捕获未在任何地方(不在封闭范围内)声明的变量?标准如何定义这种行为以及这种选择背后的动机是什么?

#include <iostream>
using namespace std;
int main()
{
[pi=3.14]() mutable {
pi = 3.1415926;
cout << pi << endl;
}();
}

最佳答案

在 C++11 中首次引入 lambda 时,您只能捕获其中的现有变量。但是,这在后来的标准迭代中得到了扩展,您现在可以为闭包类型定义成员,而不必捕获变量。这正是您在示例中所做的。

也许这种“捕获表达式”功能更常见的用途是启用按值捕获只能移动的类型:

std::unique_ptr<Foo> foo = whatever();
[p = std::move(foo)]() {
p->bar();
}

关于c++ - 为什么我可以在 C++ 的可变 lambda 中捕获未声明的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50608159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com