C lambda/闭合混淆 - 如何返回值,而不是闭合

C++ Lambda/Closure Confusion - How to return a value, not a closure

本文关键字:返回值 lambda      更新时间:2023-10-16

我试图在C 中围绕FP,对以下代码有些困惑。

我想输出值2*a,但它似乎正在输出" true",我想cos artery表达式正在返回。

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

很抱歉,如果我错过了一些愚蠢和明显的东西。

您需要使用呼叫操作员(())实际调用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转换为函数指针,并且由于该指针不是零,因此打印了true。