По-перше, все ж лямбда-вирази. Бо це лямбда - це грецька літера λ. Оскільки на англійських клавіатурах немає такого символу, вони пишуть її назву латинкою - lambda. Жодного сенсу для нас писати назву грецької літери латинкою немає.
Далі - додайте один абзац про те, що таке лямбди в математиці. На кшталт отакого - тільки в останньому рівнянні мала бути λ, а не x, звідти воно і походить.
Далі у вас іде суцільний ад із визначень:
функтор – це скорочена назва від «функціональний об’єкт». Функціональний об’єкт (надалі функтор)...
Lambda-вираз – це скорочена форма запису анонімних функторів. Іншими словами –
це безіменна локальна функції.
Отже, лямбда-вираз - це скорочена форма запису анонімних функціональних об'єктів.
Гм... а до чого тут анонімність/безіменність? Якщо ми напишемо
Functor *x=new Functor();
то об'єкт же буде анонімним, правда? Ім'я є тільки у посилання на нього, у нього немає?
Справа в тому, що ви ані слова не сказали про посилання на функції. Особливо зазначати анонімність має сенс тільки в такому випадку:
void output(int value)
{
cout<<value<<" ";
}
for_each(myVector.begin(),myVector.end(),output); //у функцію передається посилання на функцію з ім'ям
for_each(myVector.begin(),myVector.end(),[](int value){cout<<value<<" ";}); //у функцію передається посилання на анонімну функцію
Тепер трохи зрозуміліше, чому воно анонімне, правда? Ну а наступний крок (точніше, коли доходить до захоплення змінних) - анонімні класи функторів, і, відповідно, самі функтори.
Ну і тупо помилки:
Бюрократизм із "надалі" потрібен, якщо ми вводимо своє позначення для складного виразу в формальних документах; але у вас першим зустрічається саме "функтор", тобто цей "надалі" нічого не додає до тексту, отже, "надалі" тут не потрібен і тільки плутає читача. В гіршому разі можна написати "надалі вживатимемо назву "функтор", але ще раз кажу: ви щойно сказали, що "функтор" - синонім "функціонального об'єкту".
Клас Functor оголошений перевантажений operator().
У класі
Lambda-вираз – це скорочена форма запису анонімних функторів. Іншими словами –
це безіменна локальна функції.
функція
В загальному Lambda-вираз має таку структуру: [](){};
Тобто, дану вище структуру можна записати так: []()->void{};
Згідний, такий синтаксис дещо дивний для мови С++.
Тут логіка подання шкутильгає. Може, перепишете це якось так: "щоб явно зазначити тип, який повертає лямбда, можна скористатися стрілочним записом []()->тип{}"? Ну і про "дивний синтаксис", як на мене, некоректно - він уведений разом із лямбдами (і задля них) у C++11, а отже, не може бути дивним, якщо є в стандарті.