延迟调用
lamda表达式使用值进行捕获时,捕获的是变量当时的值,是复制语义。如果该值在lamda表达式生成之后发生变化,lamda表达式中存储的值并不会发生变化。
int val = 25;
auto f = [val] {cout << "val=" << val << endl; };
val = 0;
f();//输出 val=25
cout <<"val="<<val << endl; //输出 val=0
如果希望lamda表达式能够获取捕获变量的即时变化,请使用引用方式进行捕获。
int val = 25;
auto ff = [&val] {cout << "val=" << val << endl; };
val = 0;
ff();//输出 val=0
cout << "val=" << val << endl; //输出 val=0