帮助我理解常规 lambda 和闭包之间的区别(我读到 lambda 并不总是闭包)。
我对几个问题感兴趣:
- 他们在某处写道,闭包正是通过引用进行的捕获,而在某处,闭包是当我们捕获某些东西时,不管如何:
...
//1. Это замыкание?
[&](int a) { ... };
//2. если да, можно ли сказать что замыкание это когда мы захватывает все внешние объекты или это
// тоже можно считать замыканием
[&var1](int a) { ... };
//3. И тоже самое с захватом значения. Это замыкание?
[=](int a) { ... };
//4. А это?
[var1](int a) { ... };
//4. А если добавить mutable?
[=](int a) mutable { ... };
[var1](int a) mutable { ... };
- 如果以上都是一个闭包,那么当我们没有捕获任何东西时它是一个闭包吗?
[](int a) { ... };
- 如果第 2 点也是一个闭包,那么什么不是闭包?
一般认为什么是闭包?有人写道,这是我们调用 lambda 的时候。
Myers 的《Effective and Modern C++》(2016 年)一书中很好地讨论了这个问题。即,这是第 6 章,底部 221 页。
lambda 表达式是一个代码,即程序员用字母写的内容。
也就是说,问题中写的所有内容都是 lambdas。但是当这段代码被执行并创建了一个对象(实际上它的 lambda 是 ,
operator()并且捕获的变量是这个类的变量)时,就会出现“闭包”。