C++11:可变的 lambda 似乎不会改变变量?

标签 c++ c++11 lambda mutable

我在下面进行了快速测试:

#include<iostream>
using namespace std;
int main(){
    int i=2;
    auto f=[=]()mutable{++i;};
    f();
    f();
    cout<<i<<endl;
    return 0;
}

但结果它仍然打印“2”。为什么我没有在可变 lambda 中被修改?我正在使用 clang --std=c++1z。

谢谢!

最佳答案

您使用 [=] 进行捕获,这意味着 lambda 获得 i 的拷贝。此拷贝独立于 main 中的 i

您需要做的是通过引用捕获 [&],以便将更改应用到 main 中的 i

关于C++11:可变的 lambda 似乎不会改变变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45328689/

相关文章:

c++ - 关于使用链表在堆栈实现中的嵌套类

c++ - 初始化列表中的 lambda 返回

c++ - 什么是替代字符以及如何在Windows中处理它

c++ - 为什么 C++ 允许将整数分配给字符串?

c++ - 为什么编译器无法在我的代码中推断出模板参数?

c++ - 哪个命名空间包含这个友元函数的声明?

c++ - 如何让它工作,2个类(class)的问题

android - 等待协程结果而不阻塞主线程

lambda - Java 8嵌套流

c++ - 使用 C++ 改进将数据加载到虚幻引擎中