C++11 Lambda表达式
来源:互联网 发布:大数据时代 txt 编辑:程序博客网 时间:2024/06/08 11:41
Qt之后就一直没打算写什么东西了,一是我太懒,二是确实比较忙。最近在整理代码的时候发现原来有好多东西都开始遗忘了,所以呢还是该写写,没事儿的时候还可以复习复习。
今早抽了点空看了点node.js,附录有个JavaScript的Closure,想起C++11的Lambda表达式,捣腾了点时间,发现lambda的mutable限定都不知道,哎!好,记下来!
Lambda语法:
[capture-list] (parameters) specification-list ->return-type { body }
capture-list:
[] // 不捕获
[&] // 以引用方式在Lambda表达式内捕获外部变量
[=] // 以传值方式(...)
[x, &y] // x传值,y引用
[&, x] // x传值,其他的引用
[=, y] // y引用,其他的传值
return type:
可选返回类型声明,若省略,返回类型自动推导
specification-list:
可以是:
mutable 让传值的变量在lambda内部可以改变,当然,这不会影响外部变量
throw c++11之后不推荐了,出于性能和实用性的考虑
noexcept 上面的代替
此列表可省(含->),若指定,则参数列表不能省
parameters:
你懂的,可省(连同括号),代表不接受参数
一个闭包示例:
#include <iostream>int main (void){auto genClosure = [] {int cnt = 0;return [=] (void) mutable { return ++cnt; };};auto counter1 = genClosure();auto counter2 = genClosure();std::cout << counter1() << std::endl; // 1std::cout << counter1() << std::endl; // 2std::cout << counter2() << std::endl; // 1std::cout << counter1() << std::endl; // 3std::cout << counter2() << std::endl; // 2std::cout << counter2() << std::endl; // 3}
- 【c/c++】Lambda表达式
- C++11 学习笔记 lambda表达式
- C++11 学习笔记 lambda表达式
- C++11 学习笔记 lambda表达式
- C#--Lambda表达式
- C#:Lambda 表达式
- C++lambda表达式
- C++lambda表达式
- C# Lambda表达式
- C++:lambda表达式
- C#Lambda表达式
- 【c++】lambda表达式
- C++lambda表达式简记
- c#lambda表达式复习
- [C++]Lambda表达式简介
- 【C#】理解Lambda表达式
- 【C++】Lambda表达式
- C++lambda表达式
- 理解JNDI中 java:comp/env/jdbc/datasource 与 jdbc/datasource 的不同之处。
- 最长上升子序列
- Java文件GBK装UTF-8
- Java Weed
- 【eclipse import project】Eclipse导入Android项目的正确方法
- C++11 Lambda表达式
- C# HashTable 杂记
- Spring事务类型详解
- Oracle 用户及角色 介绍
- 机器学习实战笔记(一)概述
- android、ios中,百度地图设置位置周围蓝色圈圈的半径、
- 初窥JQuery(二)事件机制(2)
- 几种接触过的前端框架
- Windows7下启用telnet服务方法