如何更新嵌套lambda功能(C )中的变量

How to update a variable in a nested lambda function (C++)

本文关键字:变量 功能 嵌套 何更新 更新 lambda      更新时间:2023-10-16

我有两个lambda函数。

    void func1 ( const std::function< void( std::string ) >& handler );
    void func2 ( const std::function< void( std::string ) >& handler );
    int main()
    {
      func1( []( std::string str1 ) {
        int a = std::stoi( str1 );
        func2( [&a]( std::string str2 ) {
           a += std::stoi( str2 );
        } );
        // a = ?
       });
    }

我的问题是:a =?

  1. std :: stoi(str1)。
  2. std :: stoi(str1) std :: stoi(str2)。

如果您的程序确实如此简单,那么您实际上将第二个(一次)称为a,则应等于std::stoi( str1 ) + std::stoi( str2 )

可变 a通过引用传递给内部lambda,这意味着它在lambda内部的变化将反映在外部lambda的范围中,

访问变量时,访问其捕获的副本(对于 通过复制捕获的实体)或原始对象(对于实体 通过参考捕获)。

根据此参考。

可以使用main中的简单测试显示这一点:

int main()
{
    auto f1 = []()
    {
        int var = 5;
        auto f2 = [&var]() {var--;};
        f2();
        std::cout << var << std::endl;
    };
    f1();
}

此处 f1()声明一个可变的 var,该变量通过引用传递给 f2f2降低var和拨打f2后的CC_11的值4.

a将在第一个lambda中遵循,因为第二lambda被声明但从未执行(刚刚通过func2)。

std::stoi( str1 )

如果您在func2定义中执行捕获lambda,则a的值将更改为:

std::stoi( str1 ) + std::stoi( str2 )

ps:您需要在lambda的末端放一个额外的括号才能执行。

答案是3)取决于func2的作用。它称为处理程序多少次,以及什么字符串?每次这样做时,A都会增加