加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C 11:可变lambda似乎没有改变变量?

发布时间:2020-12-16 10:49:45 所属栏目:百科 来源:网络整理
导读:我在下面有一个快速测试: #includeiostreamusing namespace std;int main(){ int i=2; auto f=[=]()mutable{++i;}; f(); f(); coutiendl; return 0;} 但结果仍然打
我在下面有一个快速测试:

#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.

谢谢!

解决方法

int i=2;
auto f=[=]()mutable{++i;};
f();
f();
std::cout<<i<<std::endl;

这打印2.

int i=2;
auto f=[&](){++i;};
f();
f();
std::cout<<i<<std::endl;

这打印4.

int i=2;
auto f=[=]()mutable{++i; std::cout << i << std::endl;};
f();
f();
std::cout<<i<<std::endl;

这打印3 4 2.

=将捕获的数据复制到lambda中.

如果可变,则可以修改副本.

&安培;引用lambda中捕获的数据.

通过引用修改内容是合法的.

[=]与[i]相同,[&]在此上下文中与[& i]相同(您可以明确地列出捕获,或者通过列出无和使用=或&隐式地捕获它们. ).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读