如何更新嵌套lambda函数中的变量(C ++)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何更新嵌套lambda函数中的变量(C ++)相关的知识,希望对你有一定的参考价值。

我有两个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:stand(p1)。
  2. std :: stands(第1页)+ stand :: stands(第2页)。
答案

如果你的程序对于lambdas真的很简单,你实际上调用第二个(一次),变量a应该等于std::stoi( str1 ) + std::stoi( str2 )

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

访问变量时,访问其捕获的副本(对于由副本捕获的实体)或原始对象(对于通过引用捕获的实体)。

根据this的参考。

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

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

    f1();
}

这里f1()声明了一个变量var,它通过引用传递给f2。在调用f2后,var减少varf2的值变为4。

另一答案

a将继续遵循第一个lambda,因为第二个lambda被声明但从未被执行(它只是传递给func2)。

std::stoi( str1 )

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

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

PS:你需要在lambda的末尾添加一个额外的括号来执行它。

另一答案

答案是3)这取决于func2的作用。它调用处理程序和用什么字符串多少次?每次都会增加一个

以上是关于如何更新嵌套lambda函数中的变量(C ++)的主要内容,如果未能解决你的问题,请参考以下文章

matlab 如何保留变量值

c语言中的RETURN()返回值是啥意思?

SQL中插入数据并更新数据的某个字段

如何将C++中的反向函数代码转换成Java

如何在 onUpdate 函数中通过从同一集合中读取来更新同一文档

如何在 BP 自动化中使用 SQLDataAdapter 中的更新语句