C ++ Lambda /闭包混淆-如何返回值而不是闭包

时间:2019-02-24 23:26:04

标签: c++ lambda functional-programming closures

我正在尝试用C ++处理FP,并对下面的代码有些困惑。

我想输出2 * a的值,但是它似乎正在输出'true',我猜这是因为表达式正在返回。

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

如果我错过了一些愚蠢而显而易见的事情,表示歉意。

1 个答案:

答案 0 :(得分:1)

您实际上需要使用调用运算符(())来调用lambda。在这种情况下,由于lambda需要一个值,因此您可以使用

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;
}

在这种情况下,由于您有一个无法捕获的lambda,正在发生的事情是lambda将被转换为函数指针,并且由于该指针不为null,因此会打印true。