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

C++ 如何更新嵌套lambda函数(C+;+;)中的变量,c++,lambda,nested,C++,Lambda,Nested,我有两个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

我有两个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 = ?
       });
    }
void func1(const std::function&handler);
void func2(const std::function&handler);
int main()
{
func1([](std::string str1){
INTA=std::stoi(str1);
func2([&a](标准::字符串str2){
a+=std::stoi(str2);
} );
//a=?
});
}
我的问题是:a=

  • 标准:stoi(str1)
  • std::stoi(str1)+std::stoi(str2)

  • a
    将保留在第一个lambda中,因为第二个lambda已声明但从未执行(它只是在
    func2
    中传递)

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

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

    PS:您需要在lambda的末尾加一个括号来执行该操作。

    答案是3)这取决于func2的功能。它调用处理程序多少次,使用什么字符串?每次,如果你的程序对于lambda真的这么简单,并且你实际上调用了第二个变量(一次),那么变量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();
    }
    
    intmain()
    {
    自动f1=[]()
    {
    int-var=5;
    自动f2=[&var](){var--;};
    f2();
    
    std::cout a的当前值是多少?您得到的输出是什么?a的值?不要要求我们执行您的程序:/n您实际上没有调用lambda函数,因此a没有值。您是否计划在创建函数后立即或稍后调用函数?向我们显示func1和func2的定义以获得正确答案。抱歉因为我发现这个问题阻止了我。“A”是第一个lambda函数中的内部变量,并且希望在第二个lambda函数中更新“a”,并返回更新后的“a”。我删除了返回“a”的代码。如果它被执行,它是通过引用传递的,而我的猜测是它会改变。更多。正在添加。您的代码似乎与我的代码相似。您的代码运行良好,但我的代码运行不正常。我将进一步检查我的代码。好像“var”仍然是5而不是4。您使用的是完全相同的程序吗?对我来说是4。“我的代码”是指我问题中的上述代码,不是你的程序。我尝试了你的代码,效果很好。它是4。基于你的问题的嵌套lambda给出的结果与我的帖子中的结果相同。我可以发布,这就是你问题的答案,我想是的。我不确定的是如何将其转换为类似于你代码中的函数,你如何调用SE?我还是C++新手。
    int main()
    {
        auto f1 = []()
        {
            int var = 5;
            auto f2 = [&var]() {var--;};
            f2();
            std::cout << var << std::endl;
        };
    
        f1();
    }