抽象地说:
int i = 1;
auto go = [] () {
return i;
};
有没有可能用现代 C++ 语法做类似的东西?
最佳答案
正式地说,访问周围上下文的能力是函数(不能)和闭包(可以)之间的关键区别。根据环境的捕获语言,可能通过复制或引用发生。
在 C++11(及更高版本)中,lambda 是 闭包,并且与 C++ 一样,我们有一种细粒度的方式来指定 如何 完成捕获:
- 通过复制:隐式
[=]() { return i; }
或显式[i]() { return i; }
- 通过引用:隐式
[&]() { return i; }
或显式[&i]() { return i; }
C++14 甚至引入了广义的 lambda 捕获,所以你可以捕获:
- 通过移动:现有变量
[i = std::move(i)]() { return i; }
- 或创建一个新变量
[i = 1]() { return i; }
方括号分隔捕获列表。
关于c++ - 是否可以在 C++11/14 语法中编写一个 lambda 函数来查看父变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21524487/