C++のlambdaは、関数オブジェクトを必要とするテンプレートでは使いやすいでしょうが、デフォルトでは構築できません。空のキャプチャリストを持つlambdaがデフォルトで構築できないのはなぜですか?
この質問で説明したように、これは非空のキャプチャリストを持つラムダにとって意味があります。
Instantiating C++ lambda by its type
Kerrekは説明する:
コードは意味がありません。これは、あなたが のようなキャプチャラムダを持って想像:それはおそらくタイプ decltype(t)のオブジェクトをデフォルト・構築するために何を意味するかもしれません
{ int n = 0; auto t = [&n](int a) -> int { return n += a; }; }
?
空のキャプチャリストを持つラムダはどうなりますか?それらがデフォルト構成に意味をなさない理由はありますか? 「標準はそうだ」よりも何かがありますか?
指定されていない型をデフォルトで構築する方法はありますか?なぜ 'std :: function'にラムダを割り当てることができるときにこれをしたいのですか? – 101010
@ 101010この例では、型は 'decltype(t)'です。 'std :: function'はこの場合不要な間接を導入するので(ラダーは何を望んでいるのか疑問はありません)それが使用されている場所に置くことができます。 – Praxeolitic