在C 11 /14语法中,是否有可能编写lambda函数,该函数将看到父变量
Is it possible in C++11 / 14 syntax to write an lambda function which will see parent variables?
在抽象中:
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;
};
相关文章:
- 可组合的lambda/std::函数与std::可选
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 如何将lambda作为模板类的成员函数参数
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 模板函数指针和lambda
- 两组使用lambda函数的大括号
- 尝试将lambda函数放在队列中时出现一般分配器错误(可能是与unique_ptr有关的错误)
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?
- 在构造函数中使用 lambda 的 C++ 类
- 如何调用存储在指向"std::函数"的指针中的 lambda?
- 为什么我不能在 constexpr lambda 函数中使用 std::tuple
- 从具有按值捕获的 lambda 移动构造 std::函数时,移动构造函数调用两次
- C++:Lambda 函数指针转换的用例是什么?
- 将有状态的 lambda 传递到 C 样式函数中,而无需上下文参数
- std::映射服装比较函数和函数/lambda错误
- 在可移动类型的构造函数 lambda 中捕获此内容的安全使用
- 排序测试模板化函数 lambda:非法使用此类型作为表达式
- 将匿名函数(lambda)保存为函数类型变量
- 如何编写将自身作为回调传递的匿名函数/lambda