如何更新嵌套lambda功能(C )中的变量
How to update a variable in a nested lambda function (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 :: stoi(str1)。
- 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
,该变量通过引用传递给 f2
。f2
降低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都会增加
相关文章:
- 将 2D 数组传递给大小为变量的功能
- 将非静态成员函数C 的使用无效,而将成员功能作为函数变量
- 功能原型变量范围C
- 避免为每个成员变量重复功能
- 线程安全性和静态变量/成员功能
- 功能和变量从何而来
- 无全局变量或功能参数的递归调用
- 在已经运行的功能C 中更改变量
- 将功能输出分配给变量
- 从成员变量更新类变量或调用类功能是给出运行时错误
- 如何访问C 中的功能范围变量
- 我的朋友功能无法访问私人变量
- 不同的变量和功能起作用
- 在功能中设置对象变量
- 类和本地功能变量内的全局变量
- 我需要在类C 中定义所有私人功能和变量
- 如何在Arduino的功能中提供软件变量
- 是否可以在C++中推迟 const 变量的初始化,例如 Java 的"blank final"功能?
- 无法从类中的其他功能访问同一类的变量
- 在模拟过程中更改FMI变量/功能