2017-07-11 25 views
1
#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」,爲什麼?從(std :: function)輸出lambda中的引用傳遞值?

enter image description here

回答

2

因爲r通過引用捕獲,但它是一個局部變量,將後Foo()回報立即銷燬。對於func(3);,所捕獲的參考已變爲無效,並且對其的遵從導致UB;一切皆有可能。

另一方面,v被值捕獲,這意味着它將被複制到lambda中,然後運行良好。

相關問題