サンプル: #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;
}
#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;
}
operator()によって呼び出されたときにstd :: functionを返すstd :: functionオブジェクトはどのように機能しますか?
はなぜfunc(3)
(Fooの中のラムダの仮引数である私に
3
を渡すことができます)。私は考えることができません。ありがとう。
ラムダ*を返す* "' std :: function'オブジェクトはありません。 'Foo'はラムダを使って定義した' std :: function'を返します – UnholySheep
'func(3)'は*未定義のビヘイビアーを呼び出す*ラムダキャプチャの '&r'はライフタイムが終了した変数を参照するためです。関数を呼び出す時間(ぶら下がっている参照) – UnholySheep
UBを呼び出すプログラムについて推論しようとするのは無意味です。最初にあなたのUBバグを修正し、*次に*それについて推論しよう。 –