2017-07-11 20 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」と表示されるのはなぜですか? rを参照して撮影し、それがローカル変数だとFoo()戻った直後に破棄されますされているので(std :: function)からのlambdaの出力参照渡し値?

enter image description here

答えて

2

func(3);の場合、キャプチャされた参照は無効になり、その参照はUBになります。何でも可能です。

一方、vは値によって取得されます。つまり、ラムダにコピーされて正常に動作します。

関連する問題