c++ - 为什么 lambda 取变量的初始值

标签 c++ lambda stl

问题是为什么程序打印 id:0, id:1, id:2, 42 而不是 id:42、id:43、id:44、45。

int main()
{

    int id = 0;
    auto f = [id] () mutable {
        std::cout << "id: " << id << std::endl;
        ++id; // OK
    };

    id = 42;
    f();
    f();
    f();
    std::cout << id << std::endl;
    return 0;
}

最佳答案

因为 id 是按值捕获的,即它被复制了。当 lambda 被声明时(即捕获发生时)id 的值为 0

您可能希望将其更改为按引用捕获。

auto f = [&id] () {
//        ^
    std::cout << "id: " << id << std::endl;
    ++id;
};

顺便说一句:对于这种情况,mutable 变得多余。

LIVE

关于c++ - 为什么 lambda 取变量的初始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52307913/

相关文章:

java - Java 中的 IncompatibleClassChangeError

c# - 我需要一种方法将所有方法包装在 try catch 中

c++ - 在可变参数模板中使用 lambda 调用 std::make_tuple - 这应该在 C++11 中工作吗?

c++ - vector 中元素的默认构造

c++ - 如何将 recursive_directory_iterator 与算法库一起使用,尤其是 std::remove_if?

c++ - 如何减少 x264 流式传输时的延迟

c++ - do-while 循环不结束?

C++:在另一个 Graphics* 对象内绘制 Graphics* 对象的最佳方式

c++ - 创建 std::vector 对象 C++ 时出错

c++ - QByteArray 的十六进制值如何在不转换为 ASCII 字符的情况下显示