如何更新嵌套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 =?
- std:stand(p1)。
- 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
减少var
和f2
的值变为4。
另一答案
a
将继续遵循第一个lambda,因为第二个lambda被声明但从未被执行(它只是传递给func2
)。
std::stoi( str1 )
如果您在func2
定义中执行捕获lambda,a
的值将更改为:
std::stoi( str1 ) + std::stoi( str2 )
PS:你需要在lambda的末尾添加一个额外的括号来执行它。
另一答案
答案是3)这取决于func2的作用。它调用处理程序和用什么字符串多少次?每次都会增加一个
以上是关于如何更新嵌套lambda函数中的变量(C ++)的主要内容,如果未能解决你的问题,请参考以下文章