как лямбда работает конкретно в случае, показанном в приведенном ниже коде - PullRequest
0 голосов
/ 06 мая 2020

Я новичок в использовании лямбда в cpp. Может ли кто-нибудь уточнить, как именно в этом случае вызывается лямбда. На самом деле, я получил это как решение, чтобы лучше понять лямбду от моего профессора.

std::function<int(int)> ptr=[](int num)->int {return num+100;};
int rval=ptr(10);
cout<<rval;

1 Ответ

0 голосов
/ 06 мая 2020

Последний ответ @Brandon правильный. Вот длинная версия:

Я думаю, что на сайте MSDN есть лучшее объяснение того, как анализировать лямбда. См.: https://docs.microsoft.com/en-us/cpp/cpp/lambda-expressions-in-cpp

Я собираюсь переписать ответ вашего профессора с небольшим количеством пробелов для удобства чтения:

    std::function<int(int)> ptr = [] (int num) -> int {return num + 100;};

Давайте проанализируем его в соответствии с Рецепт MSDN:

1. [] предложение захвата: ничего от вызывающего не захватывается. Зачем использовать список захваченных элементов вместо того, чтобы помещать те же элементы в список параметров? Это очень хороший ответ SO. В данном примере ничего не фиксируется, поскольку вы просто выполняете операцию с переданным параметром.

2. Список параметров: одиночный int. Это должно быть знакомо. Функция, принимающая параметр int.

5. Тип возвращаемого значения: я думаю, что было бы неплохо предоставить спецификацию типа возвращаемого значения, особенно когда тип является ссылкой. Меня это уже кусало. Часто тип возврата просто подразумевается сигнатурой функции.

6. Тело лямбды: { return num + 100; } Как и у обычной функции. Это простой пример, и часто лямбды имеют небольшую текстовую длину. Но это может быть очень сложно.

Наконец, лямбда-тип возвращается как std :: function <> type. Большинство людей будут использовать здесь auto. Скорее всего, ваш профессор пытается помочь, показывая вам типы вовлеченных

Ну, я только что написал длинный рассказ. Я предлагаю прочитать эту ссылку SO на другой вопрос лямбда и прочитать MSDN do c. Страница MSDN хороша тем, что на ней не используются такие слова, как «предикат», и все излагается на диаграмме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...