MyTetra Share
Делитесь знаниями!
Синтаксис лямбда выражения с языке C++
Время создания: 25.04.2022 13:38
Текстовые метки: c++, лямбда, синтаксис
Раздел: Компьютер - Программирование - Язык C++ (Си++)
Запись: xintrea/mytetra_syncro/master/base/1650883083n4fqbw3zch/text.html на raw.github.com

С точки зрения синтаксиса, лямбда-выражение имеет следующую структуру:





Где:


1 - Маска переменных

2 - Список параметров

3 - Изменение параметра, переданного по значению

4 - Спецификация исключения

5 - Возвращаемый тип

6 - Тело лямбда выражения



Маска переменных


Лямбда выражение может получать доступ практически к любым переменным, существующих в контексте её вызова, и использовать их внутри тела. Список параметров определяет способ получения параметров телом лямбда выражения. Доступ к переменным, перед которыми стоит амперсанд (&), осуществляется по ссылке, а перед которыми нет амперсанда, соответственно по значению. Пустая маска ([]) означает, что тело лямбда-выражения не имеет доступа к переменным, существующих в контексте вызова лямбды.



Термин "контекст вызова лямбды" означает то место, где происходит вызов лямбды. В данном месте существуют какие-то переменные, принадлежащие основному коду, и набор этих переменных так же, для краткости, называют контекстом.



Стандартная маска определяет, получаем ли мы доступ к переменной по ссылке или же по значению. Устанавливая [&], все значения будут получены по ссылке. Используя же [=], переменные будут получены по значению. Например, если тело лямбда-выражения получает доступ к внешней переменной “total” по ссылке и переменной “factor” по значению, маска должна быть записана следующим образом:



int main() {

int total = 0;

int factor = 2;


// Лямбда-функция, которая получает доступ

// к внешней переменной "total" по ссылке,

// а к переменной "factor" по значению

auto lambda = [&total, factor](int value) {

total += value * factor;

return total;

};


std::cout << "Result: " << lambda(5) << std::endl; // Выводит результат 10


return 0;

}



Также, вы можете использовать лямбда-выражение внутри метода класса. Передавая указатель “this”, вы можете получить доступ к методам и членам данного класса.



Список параметров


Список параметров лямбда-выражения (который пишется в круглых скобках), содержит список параметров для функции, у которых существуют следующим ограничения:


1) Список параметров не может содержать значения по умолчанию

2) Не может содержать неименованные параметры

3) Ограниченное число параметров


Также лямбда-выражение может принимать в качестве параметра другое лямбда-выражение. С другой стороны, список параметров является опциональным элементов, и можно писать выражение, не включая его.



Изменение параметра переданного по значению


Спецификация позволяет разрешить телу лямбда-выражения изменять переменные, полученные по значению.



Спецификация исключений


Лямбда-выражения могут включать в себя спецификацию исключения, которая позволяет телу не создавать исключения (т. е. чтобы тело лямбда-выражения не генерировало исключений?). Надо разобраться.



Возвращаемый тип


Спецификация определяет возвращаемый тип лямбда-выражения. Вы можете не использовать данную конструкцию, если тело выражения имеет только одну инструкцию “return” или не возвращает значения вообще. Если тело содержит только одну “return”-инструкцию, компилятор установит возвращаемый тип лямбда выражения идентичный типу “return”-инструкции.



Тело лямбда выражения


На тело выражения накладываются идентичные ограничения, как на блок кода или метод.



Так же в этом разделе:
 
MyTetra Share v.0.64
Яндекс индекс цитирования