hcwanz 发表于 2024-6-25 20:53:54

本帖最后由 hcwanz 于 2024-6-25 20:55 编辑

Xelloss0618 发表于 2024-6-25 20:51
明显不是参数,而是通过 [&] 俘获了匿名函数外部的变量
那为啥我这输出的是未修改的?

hcwanz 发表于 2024-6-25 20:56:20

本帖最后由 hcwanz 于 2024-6-25 21:01 编辑

Xelloss0618 发表于 2024-6-25 20:51
明显不是参数,而是通过 [&] 俘获了匿名函数外部的变量
你这光写的捕获吧, 我这是传了参数的

Xelloss0618 发表于 2024-6-25 21:13:52

hcwanz 发表于 2024-6-25 20:56
你这光写的捕获吧, 我这是传了参数的

你改成 嵌入 (a, "", c, d) 就知道了
即空俘获 [] (int& c, int & d) {}

hcwanz 发表于 2024-6-25 21:16:29

Xelloss0618 发表于 2024-6-25 21:13
你改成 嵌入 (a, "", c, d) 就知道了
即空俘获 [] (int& c, int & d) {}

好像没啥问题吧

hcwanz 发表于 2024-6-25 21:20:49

本帖最后由 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);





Xelloss0618 发表于 2024-6-25 21:34:23

好吧,搞明白了,你这是将匿名函数的参数名,跟外部变量设置成一样。
页: 1 [2]
查看完整版本: 基于go的协程, 想到的视窗对匿名函数的支持