12

ラムダ式の理由は、「より便利な方法」で関数オブジェクトを暗黙的に生成するためです。以下の例からわかるように、これは不便で長いだけでなく、構文と表記がわかりにくいものになっています。

実際にコードを読みやすくする用途はありますか?

cout << count(vec, [&](int a){ return a < x; }) << endl;  // lambda
cout << count(vec, Less_than<int> (x)) << endl;           // normal functor def-n
4

2 に答える 2

3

ラムダ式は、コードを簡素化するために存在します。これ:

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回よりも。

于 2013-08-11T02:09:09.387 に答える