在C 11 /14语法中,是否有可能编写lambda函数,该函数将看到父变量

Is it possible in C++11 / 14 syntax to write an lambda function which will see parent variables?

本文关键字:函数 lambda 变量 有可能 语法 是否      更新时间:2023-10-16

在抽象中:

int i = 1;
auto go = [] () {
    return i;
};

是否可以在现代C 语法中进行类似的事情?

正式地说,访问周围上下文的能力是a function (不能)和 closure (哪个行)。根据语言,环境的 可能会通过复制或参考。

发生。

在C 11(及以后)中,lambdas是关闭,与往常一样,使用C ,我们有一种精细的粒度指定如何完成捕获的方法:

  • 通过复制:隐式[=]() { return i; }或明确[i]() { return i; }
  • 通过参考:隐式[&]() { return i; }或明确[&i]() { return i; }

和c 14甚至引入了广义lambda捕获,因此您可以捕获:

  • 移动:现有变量[i = std::move(i)]() { return i; }
  • 或创建一个新的变量[i = 1]() { return i; }

方括号划定捕获列表。

当然,取决于您是否要按值捕获它:

auto go = [i] () {
    return i;
};

或参考:

auto go = [&i] () {
    return i;
};

只是将其放入捕获部分:

auto go = [i] () {
   return i;
};