Рассмотрим функцию сравнения положительных целых чисел; сама функция использует лямбда для выполнения задания.
// Pass n1, n2 by value to the lambda.
bool Compare(int n1, int n2) {
return [](int n1, int n2) { return n1 > n2; };
}
Вышеприведенный фрагмент компилируется отлично; хотя Compare() всегда возвращает true;
Однако следующий код даже не скомпилируется -
// capturing values
bool Compare(int n1, int n2) {
return [n1, n2]() -> bool { return n1 > n2; };
}
и возвращает ошибку
lambda.cpp:48:46: error: cannot convert 'Compare(int, int)::__lambda2' to 'bool' in return
return [n1, n2]() -> bool { return n1 > n2; };
Вопрос
Возможно, это не намеренное использование ввода лямбда в С++, все еще...
- Почему первый всегда возвращает true?
- Почему второй не удается скомпилировать?