Xelloss0618 发表于 2024-6-25 20:51
明显不是参数,而是通过 [&] 俘获了匿名函数外部的变量
那为啥我这输出的是未修改的?
本帖最后由 hcwanz 于 2024-6-25 21:01 编辑
Xelloss0618 发表于 2024-6-25 20:51
明显不是参数,而是通过 [&] 俘获了匿名函数外部的变量
你这光写的捕获吧, 我这是传了参数的
hcwanz 发表于 2024-6-25 20:56
你这光写的捕获吧, 我这是传了参数的
你改成 嵌入 (a, "", c, d) 就知道了
即空俘获 [] (int& c, int & d) {} Xelloss0618 发表于 2024-6-25 21:13
你改成 嵌入 (a, "", c, d) 就知道了
即空俘获 [] (int& c, int & d) {}
好像没啥问题吧
本帖最后由 hcwanz 于 2024-6-25 21:33 编辑
Xelloss0618 发表于 2024-6-25 21:13
你改成 嵌入 (a, "", c, d) 就知道了
即空俘获 [] (int& c, int & d) {}
匿名函数应该会优先使用内部的变量, 当找不到对应的变量名的时候, 才会去捕获
这里我把 '参数d' 打错成 '参数b' 了,
然后 '函数a'修改的是 '参数c' 和捕获的 '变量d' ;
int c=1,d=2;
auto a=[&](auto c,auto b){
DebugTrace (FALSE, 0, 0, L"nnn",c,d,2);
c=19;d=49;
DebugTrace (FALSE, 0, 0, L"nnn",c,d,3);
};
DebugTrace (FALSE, 0, 0, L"nnn",c,d,1);
a(8,3);
DebugTrace (FALSE, 0, 0, L"nnn",c,d,4);
好吧,搞明白了,你这是将匿名函数的参数名,跟外部变量设置成一样。
页:
1
[2]