C++ lambda 值无法捕获

标签 c++ lambda

这是我的代码,我想像 javascript 一样在 C++ 中测试闭包。为什么编译器会产生此消息? “testLambda.cpp:在 lambda 函数中: testLambda.cpp:8:11: 错误:未捕获‘a’”

    #include <iostream>
    #include <functional>
    std::function<bool(int)> returnLambda(int a){
        auto b  = 1;
        auto c  = 2;

        return [&](int x)
        {   return x*(b++)+c+a == 0;};
    }
    auto f = returnLambda(21);
    int main(){
        auto c = f(1);
        auto b = f(1);

        std::cout<<c<<b<<std::endl;
        return 0;
    }

最佳答案

您需要在方括号中指定您的捕获,这就是 lambda 表达式首先需要方括号的原因。您可以通过引用捕获它们:

[&a,&b,&c] (int x) ...

或按值:

[a,b,c] (int x) ...

或者混合起来:

[a,&b,c] (int x) ...

或者您可以只捕获您使用的所有内容:

[&] (int x) ... // by reference
[=] (int x) ... // by value

如果你选择按值捕获一个变量,但需要修改它,那么你需要使它可变:

[=] (int x) mutable ...

关于C++ lambda 值无法捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20754408/

相关文章:

java - lambda 表达式中的返回类型 ReadOnlyLongWrapper 不兼容

lambda - Java流: transform user input to batches

c++ - 在 OpenMP 任务依赖项中,依赖项参数是否需要指向实际变量?

c++ - 使用 auto 返回不同的 Lambda

Python Pandas groupby 应用 lambda 参数

c++ - 这两个版本的代码有什么区别?

Java Streams - 使用 GroupingBy 收集到映射并进行计数,但如果特定字段为空则计数 0

c++ - BB 10 Cascades 互联网检查

c++ - 当窗口/屏幕上发生任何变化时的 Qt 事件 + 屏幕截图

c++ - 尝试在 OS X 10.6 上安装 libxml++