ローカル変数を2つのラムダに渡しています。私はこれらのラムダを関数スコープの外に呼びます。これはundefined
ですか?ラムダと参照ローカル変数によるキャプチャ:スコープの後のアクセス
std::pair<std::function<int()>, std::function<int()>> addSome() {
int a = 0, b = 0;
return std::make_pair([&a,&b] {
++a; ++b;
return a+b;
}, [&a, &b] {
return a;
});
}
int main() {
auto f = addSome();
std::cout << f.first() << " " << f.second();
return 0;
}
ただし、そうでない場合は、1つのλの変化は他のλに反映されません。
ラムダの文脈で参照渡しを誤解していますか?
私は変数に書いていますし、それが出力
2 0
ていないランタイムエラーで正常に動作しているようです。それが動作すれば私は出力2 1
を期待するでしょう。
'[b]閉鎖およびそのコピーの寿命が封入に限られている場合、' '} {結構です'それ以外の場合は、危険で危険です。そのような制限された生涯閉鎖が一般的であるので、一般的な規則としてそれを避けることは過度のようですか? – Yakk
@ Yakk:私はアルゴリズムでコードを埋め込む貧弱な方法ではなく、クロージャーとしてのラムダの使用を考えていました。私はそれを説明するために編集します。 – 6502
funarg問題を指摘し、他の言語と比較するための最良の答え。 – Maggyero