Путаница лямбда / замыканий в C ++ - как вернуть значение, а не замыкание - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь разобраться с FP в C ++ и немного запутался по поводу кода ниже.

Я хотел бы вывести значение 2 * a, но, похоже, оно выдает 'true', я думаю, потому что выражение возвращается.

int main () {
    int a {5};
    std::cout << [](int a) { return 2*a; };
    return 0;
}

Извинения, если я 'Я упускаю что-то глупое и очевидное.

1 Ответ

0 голосов
/ 25 февраля 2019

Вы должны фактически вызвать лямбду, используя оператор вызова (()).В этом случае, поскольку лямбда-выражение нуждается в значении, вы должны использовать

int main () {
    int a {5};
    std::cout << [](int a) { return 2*a; }(a);
    return 0;
}

В качестве альтернативы вы можете разделить два бита на

int main () {
    int a {5};
    auto func = [](int a) { return 2*a; };
    std::cout << func(a);
    return 0;
}

В этом случае, так как у вас нет захваталямбда, то, что происходит, это то, что лямбда преобразуется в указатель на функцию, и, поскольку этот указатель не равен нулю, выводится true.

...