C++ 输出引用在lambda中传递的值来自(std::function)? #包括“stdafx.h” #包括 #包括 #包括 std::函数Foo() { int v=1; int r=2; 自动l=[v,&r](int i) { std::cout

C++ 输出引用在lambda中传递的值来自(std::function)? #包括“stdafx.h” #包括 #包括 #包括 std::函数Foo() { int v=1; int r=2; 自动l=[v,&r](int i) { std::cout,c++,c++11,lambda,reference,C++,C++11,Lambda,Reference,因为r是通过引用捕获的,但它是一个局部变量,在Foo()返回后会立即被销毁。对于func(3);捕获的引用已经无效,对它的遵从会导致;任何事情都是可能的 另一方面,v由值捕获,这意味着它将被复制到lambda中,然后工作正常 #include "stdafx.h" #include <functional> #include <iostream> #include <string> std::function<void(int)> Foo() {

因为
r
是通过引用捕获的,但它是一个局部变量,在
Foo()
返回后会立即被销毁。对于
func(3);
捕获的引用已经无效,对它的遵从会导致;任何事情都是可能的

另一方面,
v
由值捕获,这意味着它将被复制到lambda中,然后工作正常

#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;
}