Я учусь писать лямбда-выражение в cpp. Ниже приведен код с использованием окон Visual Studio 2022.
#include<iostream>
using namespace std;
int main()
{
int k = 98;
int l = 23;
auto lm_add = [k,l](int i, int j) {
return i + j;
};
cout << "addition using lambada : " << "cool" << lm_add << endl;
return 0;
Хотел вернуть ответ для заданных переменных.
Помните первую часть этого комментария: auto lm_add = [](int i, int j) {
или вы хотели auto lm_add = [k,l]() { return k + l; }
вызвать с << lm_add() <<
?
cout << ... << lm_add
пытается напечатать сам лямбда-объект, что здесь не имеет смысла. Чтобы вызвать лямбду и распечатать результат, вам нужно использовать lm_add(...)
.
Пожалуйста, уточните, для чего вам на самом деле нужна лямбда: получать 2 аргумента при каждом вызове (это должны быть i,j) или захватывать 2 значения один раз во время создания лямбды (k,l) и всегда возвращать их сумму?
Этот
auto lm_add = [k,l](int i, int j) {
return i + j;
};
Инициализирует lm_add
с помощью лямбда-выражения. За кулисами компилятор генерирует безымянный уникальный тип с оператором вызова с указанной сигнатурой, т.е. принимающим два целых числа, и с членами для захватов (также два целых числа). У этого типа нет оператора <<
, который мог бы передать его в выходной поток. Его можно назвать:
std::cout << lm_add(k,l);
Однако он фиксирует k
и l
без уважительной причины. Возможно, вы хотите либо захватить переменные, чтобы можно было вызывать их без аргументов:
auto lm_add = [k,l]() {
return k + l;
};
std::cout << lm_add();
Или не захватите их, передайте аргументы:
auto lm_add = [](int i,int j) {
return i + j;
};
std::cout << lm_add(k,l);
Спасибо за подробное объяснение. Можете ли вы поделиться какими-либо ссылками, чтобы понять тему лямбда в cpp, заранее спасибо
Вот хорошая ссылка с примерами: https://en.cppreference.com/w/cpp/language/lambda
Лямбда захватывает
k
иl
без причины. Вывод должен вызвать лямбду,lm_add(1,2)
.