有时我会std::find_if
在本地函数中执行(例如)具有5个局部变量(包括参数)的情况.但是,传入STL算法的lambda只需要访问其中的1个.我可以通过以下两种方式之一来捕获它:
void foo(int one, int two, int three) { std::vectorm_numbers; int four, five; std::find_if(m_numbers.begin(), m_numbers.end(), [=](int number) { return number == four; }); }
或者我可以这样做:
void foo(int one, int two, int three) { std::vectorm_numbers; int four, five; std::find_if(m_numbers.begin(), m_numbers.end(), [four](int number) { return number == four; }); }
(注意我没有编译此代码,对任何语法错误或其他错误道歉)
我知道隐式捕获是基于odr使用的规则,所以在功能和实现方面,我认为两者都是相同的.什么时候使用显式捕获而不是隐式捕获?我唯一的想法与封装原则有些相关:只能访问所需的东西,编译器可以帮助您确定何时访问变量.它还保持方法的本地状态(它的不变量,在执行期间函数的生命周期)更安全.但这些真的是实际问题吗?
是否存在使用显式捕获而不是隐式捕获的功能性原因?遵循什么是好的经验法则或最佳做法?