可变lambda
假设有如下vector,保存的内容是学生的考试成绩:
可以用以下代码来寻找第一个及格成绩:
如果需要找到第n个及格成绩,很自然地会考虑使用下面的代码:
但 是很遗憾,这时会出现编译错误,告诉你counter是只读的。其原因是因为在lambda表达式中很少有需要修改捕获值的场景,因此默认捕获值具有 const属性。如果出现本例这样,确实希望修改捕获值的情况,C++11使用mutable关键字来解决这个问题。来看完整代码:
当然了,由于是值捕获,处于lambda表达式外面的counter值依然不会改变。
如果希望连外面的counter一起修改,使用引用捕获即可。
作者观点
需要改变lambda表达式捕获值的场景确实不多,以至于想了好半天才想到本文中的例子。
关注微信公众号【面向对象思考】