Как определить анонимные функции в C++?
Проблема: Использование лямбда-функций в C++
Я пытаюсь понять, можно ли определять функции в C++ в виде лямбда-функций. В частности, меня интересует вопрос: как правильно использовать лямбда-функции и в каких ситуациях они могут быть предпочтительнее по сравнению с обычными функциями.
Я слышал о ключевом слове inline
, но это не то, о чем я говорю. Я имею в виду именно лямбда-функции, которые позволяют создавать анонимные функции на месте.
Каковы основные преимущества и недостатки использования лямбда-функций в C++? Какие у них есть особенности, о которых стоит знать?
1 ответ(ов)
Прежде чем C++11, если вы хотите локализовать функцию внутри другой функции, это можно сделать следующим образом:
int foo() {
struct Local {
static int bar() {
return 1;
}
};
return Local::bar();
}
Или, если вам нужно что-то более сложное:
int foo(int x) {
struct Local {
int & x;
Local(int & x) : x(x) {}
int bar(int y) {
return x * x + y;
}
};
return Local(x).bar(44);
}
Однако если вы хотите создать истинный литерал функции (функцию-замыкание) в стандарте до C++11, это невозможно.
Сравнение: var functionName = function() {} против function functionName() {}
Когда следует использовать ключевое слово 'inline' для функции/метода?
Каковы преимущества инициализации списка (с использованием фигурных скобок)?
Также возможно использование условия if(1 || !Foo())?
Функция, принимающая как lvalue, так и rvalue аргументы