mirror of
https://github.com/CnTransGroup/EffectiveModernCppChinese.git
synced 2024-12-25 20:30:21 +08:00
Update item31.md (#192)
This commit is contained in:
parent
199be3f507
commit
8bc0371709
@ -94,7 +94,7 @@ filters.emplace_back(
|
||||
|
||||
但通过显式的捕获,能更容易看到*lambda*的可行性依赖于变量`divisor`的生命周期。另外,写下“divisor”这个名字能够提醒我们要注意确保`divisor`的生命周期至少跟*lambda*闭包一样长。比起“`[&]`”传达的意思,显式捕获能让人更容易想起“确保没有悬空变量”。
|
||||
|
||||
如果你知道一个闭包将会被马上使用(例如被传入到一个STL算法中)并且不会被拷贝,那么在它的*lambda*被创建的环境中,将不会有持有的引用比局部变量和形参活得长的风险。在这种情况下,你可能会争论说,没有悬空引用的危险,就不需要避免使用默认的引用捕获模式。例如,我们的过滤*lambda*只会用做C++11中`std::all_of`的一个实参,返回满足条件的所有元素:
|
||||
如果你知道一个闭包将会被马上使用(例如被传入到一个STL算法中)并且不会被拷贝,那么在它的*lambda*被创建的环境中,将不会有闭包的引用比父函数的局部变量和形参活得长的风险。在这种情况下,你可能会争论说,没有悬空引用的危险,就不需要避免使用默认的引用捕获模式。例如,我们的过滤*lambda*只会用做C++11中`std::all_of`的一个实参,返回满足条件的所有元素:
|
||||
|
||||
```c++
|
||||
template<typename C>
|
||||
|
Loading…
Reference in New Issue
Block a user