lambda表达式Bug——修改捕获变量失败
解《C++ Primer 5th》的 9-50 练习题时,遇到了 lambda表达式值捕获和引用捕获之区别问题。
欲修改捕获的变量 sum,累加之。但当时忘记值捕获和引用捕获是有区别的。下面的代码使用值捕获,未能修改 sum变量的值:
int main(){
vector<string> v;
string s;
int sum = ;
while (cin >> s)
v.push_back(s);
for_each(v.cbegin(), v.cend(),
[sum](const string &s) mutable { sum += stoi(s); });
cout << sum; // 输出 0
}
正确的方式:
修改 lambda的捕获列表,使 sum表达为 &sum。修改后正确的代码如下:
int main() {
vector<string> v;
string s;
int sum = ;
while (cin >> s)
v.push_back(s);
for_each(v.cbegin(), v.cend(),
[&sum](const string &s) mutable { sum += stoi(s); });
cout << sum; // 输出 1 - 10 的累加和 42
return ;
}
(全文完)
lambda表达式Bug——修改捕获变量失败的更多相关文章
- 在Lambda表达式中使用循环变量
在C#5.0之前,如果在foreach循环中的lambda表达式里使用循环变量,那么你会发现一些意想不到的现象,例子如下: , , , }; var actions = new List<Act ...
- Lambda表达式的参数捕获
以常用的Action委托为例: 有如下3个无参数的方法: public void Function() { //Do something } public void Function2() { //D ...
- 为什么Java中lambda表达式不能改变外部变量的值,也不能定义自己的同名的本地变量呢?
作者:blindpirate链接:https://www.zhihu.com/question/361639494/answer/948286842来源:知乎著作权归作者所有.商业转载请联系作者获得授 ...
- c++ Lambda表达式待修改
C++11引入了lambda表达式,使得程序员可以定义匿名函数,该函数是一次性执行的,既方便了编程,又能防止别人的访问. Lambda表达式的语法通过下图来介绍: 这里假设我们定义了一个如上图的lam ...
- Lambda 表达式语法
本主题介绍 lambda 表达式的语法. 它演示提供 lambda 表达式的结构元素的示例,这些元素与示例. Lambda 表达式语法 下面用于定义显示语法,ISO C++11 从标准,lambda ...
- Java基础教程(23)--lambda表达式
一.初识lambda表达式 1.定义 lambda表达式是一个可传递的代码块,或者更确切地说,可以把lambda表达式理解为简洁地表示可传递的匿名方法的一种方式.它没有名称,但它有参数列表.函数主 ...
- 【C++】C++中的lambda表达式和函数对象
目录结构: contents structure [-] lambda表达式 lambda c++14新特性 lambda捕捉表达式 泛型lambda表达式 函数对象 函数适配器 绑定器(binder ...
- C++ 理解函数对象与lambda表达式
参考<21天学通C++>第21与第22章节,对函数对象进行介绍,同时通过lambda表达式这一匿名函数对象的简洁方式加深对函数对象的理解.本篇博文的主要内容是: (1) 函数对象的概念: ...
- 初探Lambda表达式/Java多核编程【4】Lambda变量捕获
这周开学,上了两天感觉课好多,学校现在还停水,宿舍网络也还没通,简直爆炸,感觉能静下心看书的时间越来越少了...寒假还有些看过书之后的存货,现在写一点发出来.加上假期两个月左右都过去了书才看了1/7都 ...
随机推荐
- sklearn学习_01
# -*- coding: utf-8 -*- """ Created on Fri Sep 29 11:05:52 2017 机器学习之sklearn @author: ...
- date 命令之日期和秒数转换
时间转为秒数 date -d "2012-11-12 13:00:00" +"%s" 描述转为日期 date -d@1352692800 +"%Y-% ...
- flask操作简章
https://blog.csdn.net/u011054333/article/details/70151857
- Java8 Collectors.toMap的坑
按照常规思维,往一个map里put一个已经存在的key,会把原有的key对应的value值覆盖,然而通过一次线上问题,发现Java8中的Collectors.toMap反其道而行之,它默认给抛异常,抛 ...
- Mybatis插入数据后返回主键id
有时候使用mybatis插入数据后,需要用到记录在数据库中的自增id,可以利用keyProperty来返回,赋值给实体类中的指定字段. 单条记录插入并返回 First, if your databas ...
- elasticsearch更改mapping,不停服务重建索引(转)
原文:http://donlianli.iteye.com/blog/1924721?utm_source=tuicool&utm_medium=referral Elasticsearch的 ...
- Redis添加历史浏览记录
参考资料 http://redisdoc.com/index.html http://redis-py.readthedocs.io/en/latest/#indices-and-tables 1.什 ...
- Idempotent --------幂等
1.在某二元运算下,幂等元素是指被自己重复运算的结果等于它自己的元素.例如,乘法下唯一两个幂等实数为0和1.
- jquery css样式
1.单一样式 $('.list li').css( "float", "none"); 2. 多个样式 $('.list li').css( { ...
- (3.10)mysql基础深入——mysqld 服务器与客户端连接过程 源码分析【待写】
(3.10)mysql基础深入——mysqld 服务器与客户端连接过程 源码分析[待写]