#include "stdafx.h"
#include <functional>
#include <iostream>
#include <string>
std::function<void(int)> Foo()
{
int v = 1;
int r = 2;
auto l = [v, &r](int i)
{
std::cout << v << " " << r << " " << i << std::endl;
};
return l;
}
int main()
{
auto func = Foo();
func(3);
return 0;
}
我认为会打印“1 2 3”,但是,它是“1 -858993460 3”,为什么?
答案 0 :(得分:2)
因为r
是通过引用捕获的,但它是一个局部变量,并会在Foo()
返回后立即销毁。对于func(3);
,已捕获的引用已变为无效,并且对其的引用会导致UB;一切皆有可能。
另一方面,v
是按值捕获的,这意味着它将被复制到lambda然后运行良好。