当前位置:  开发笔记 > 编程语言 > 正文

什么时候更喜欢lambda中的显式捕获而不是隐式捕获?

如何解决《什么时候更喜欢lambda中的显式捕获而不是隐式捕获?》经验,为你挑选了0个好方法。

有时我会std::find_if在本地函数中执行(例如)具有5个局部变量(包括参数)的情况.但是,传入STL算法的lambda只需要访问其中的1个.我可以通过以下两种方式之一来捕获它:

void foo(int one, int two, int three)
{
    std::vector m_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::vector m_numbers;
    int four, five;

    std::find_if(m_numbers.begin(), m_numbers.end(), [four](int number) {
        return number == four;
    });
}

(注意我没有编译此代码,对任何语法错误或其他错误道歉)

我知道隐式捕获是基于odr使用的规则,所以在功能和实现方面,我认为两者都是相同的.什么时候使用显式捕获而不是隐式捕获?我唯一的想法与封装原则有些相关:只能访问所需的东西,编译器可以帮助您确定何时访问变量.它还保持方法的本地状态(它的不变量,在执行期间函数的生命周期)更安全.但这些真的是实际问题吗?

是否存在使用显式捕获而不是隐式捕获的功能性原因?遵循什么是好的经验法则或最佳做法?

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有