在抽象中:
int i = 1;
auto go = [] () {
return i;
};
Run Code Online (Sandbox Code Playgroud)
是否有可能在现代C++语法中做出类似的东西?
Mat*_* M. 33
从形式上讲,访问周围上下文的能力是函数(不能)和闭包(可以)之间的关键区别.根据语言,可以通过复制或引用来捕获环境.
在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; }方括号分隔捕获列表.
当然,取决于您是否想要按值捕获它:
auto go = [i] () {
return i;
};
Run Code Online (Sandbox Code Playgroud)
或参考:
auto go = [&i] () {
return i;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1187 次 |
| 最近记录: |