ラムダ式は、コードを簡素化するために存在します。これ:
auto fun = []() { return; };
コンパイラによって次のように置き換えられます。
// Namespace scope
struct __lambda_1 {
void operator()() { return; }
};
// local scope
__lambda_1 fun{};
これがラムダ構文の主な動機です。従来の関数オブジェクトを、別のスコープで宣言しなければならない別の関数オブジェクトを持つのではなく、必要な場所で宣言された読みやすい無名関数に置き換えるためです。名前付き関数オブジェクトを単に置き換えるだけではありません。
実際、標準ライブラリには、std::unary_function
や などの名前付き関数オブジェクトが多数含まれていますstd::less
。ただし、これらのオブジェクトの有用性は限られており、ラムダが持つ可能性のあるすべての役割を引き受けることはできません。
したがって、はい、標準ライブラリが提供しないコードを必要な場所に正確に配置することで、コードを大幅に読みやすくすることができます。コードを数十行struct
の s で汚染したり、名前空間を使用しなくなる可能性が高い名前で汚染したりする必要はありません。 1回か2回よりも。