Лямбда-функции
У нас есть программа, которая приветствует новых пользователей:
void welcome(string name){
cout << "Hello, " << name << "!" << endl;
}
int main()
{
welcome("Petr");
welcome("Elena");
}В этой программе мы создали новую функцию, которую используем только в main. При этом мы не хотим, чтобы функция welcome была видна для других функций, которые у нас могут быть в программе. Для этого нам нужно определить welcome внутри main, но объявлять функции внутри других запрещено в С++. В таком случае нам помогут лямбда-функции.
Лямбда-функция позволяет определить безымянную функцию внутри другой функции. Возможность сделать функцию вложенной является очень важным преимуществом, так как позволяет избегать как захламления пространства имен лишними объектами, так и определить функцию как можно ближе к месту её первого использования.
Синтаксис лямбда выражения следующий:
[список захвата](параметры) { тело функции }Список захвата определяет, что именно мы захватываем и выполняем ли захват вообще. Нам может понадобиться захватить локальную переменную или объект, тогда это надо указать внутри квадратных скобок.
Параметры и тело функции - это стандартные элементы любой функции.
Давайте перепишем наш пример с использованием лямбда-функции.
int main()
{
auto welcome = [](string name){ cout << "Hello, " << name << "!" << endl; };
welcome("Petr");
welcome("Elena");
}Мы сократили код и ограничили область применения функции welcome.
Лямбды помогают писать более чистый код, однако при этом они не заменяют обычные функции для всех случаев.