首页 养生问答 疾病百科 养生资讯 女性养生 男性养生

懂C++11的匿名函数的高手进

发布网友 发布时间:2022-04-24 18:06

我来回答

4个回答

热心网友 时间:2023-10-30 03:16

匿名函数构建的时候对于值传递,会立即将当前能取到的值拷贝一份作为常量作为参数传递进去,比如
auto m1 = [a, &b, &c]() mutable{这一句,a是值传递,构建这一个匿名函数时,能取到的a=1,所以实际上构建的是auto m1 = [1, &b, &c](),而对于auto m2 = [a, b, &c]() 首先a=1,而b的值只有在首次调用m1的地方才能获取,首次调用m1的时候b=2,所以实际构造的匿名函数为auto m2 = [1, 2, &c]()

热心网友 时间:2023-10-30 03:16

VC10 Lammda表达式嵌套时,不支持 越界捕获变量,所以没法验证
只能说, Lammda表达式 [a, b, &c] a,b,不变,c可变, [a, &b, &c] a,不变,b,c可变

对函数调用 m1(); a不变,b,c,可变,可变a=1,b=2,c=2;
函数调用

m2()
; std::cout<< a << b << c; 由于c可变,所以c=3
所以输出123
m1() 调用后, a不变 所以 a=2

b
可变,所以b=3

m2()

c
可变 所以 c=4;
所以 m1() 调用后 a=2;b=3;c=4;
std::cout<< a << b << c;
输出2,3,4
不知是否如此!

热心网友 时间:2023-10-30 03:16

我是这么理解的(不一定对):
函数参数如果没有&,就在声明函数的时候,确定了参数(相当于参数是常量了)
如果函数参数有&,就在调用函数的时候,此参数是一个形参,有实参的值决定。

热心网友 时间:2023-10-30 03:17

lol战斗力哪里lol战斗力哪里lol战斗力哪里lol战斗力哪里

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com