c++ - 是否可以在 C++11/14 语法中编写一个 lambda 函数来查看父变量?

标签 c++ c++11 lambda

抽象地说:

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/

相关文章:

C++计算行主和列主访问时间

c++ - 自动参数捕获的推导规则是什么?

c++ - std::conditional 如何工作

c# - 将单个 Func<T,bool> 与 Where() 和继承一起使用

android - "cannot find symbol method metafactory"使用 Lambda

c++ - 无法从 int main() 主体调用函数

c++ - 基于 Java openGL 和 GTK 的应用程序搞砸了 C++ openGL?

c++ - 如何在 C++ 中检查符号

c++ - 在 C++ 中按行打乱二维数组

vb.net - 尝试使用 VB.NET Lambda 而不是迭代器