lambda表达式的一般形式:

[capture list] (parameter list) -> return type{function body};

其中,capture list (捕获列表)是一个lambda所在函数中定义的局部变量的列表(通常为空);

return type、parameter list和function body与任何普通函数一样分别表示返回类型、参数列表和函数体。

但是与普通函数不同,lambda必须使用尾置返回来指定返回类型。

此外,我可以忽略参数列表和返回类型,但必须永远包含捕获列表和函数体:

auto f = [] { return  }

此例中,我们定义了一个可调用的对象f, 它没有参数,返回值为42;

调用方式:与普通函数一致;

cout << f() << endl;

在忽略了返回值类型的情况下, lambda根据函数体中代码推断出返回值类型;如果函数体只是一个return语句,则返回类型从返回的表达式的类型推断而来。否则,返回类型为void。

使用条件:

“引用捕获有时是必要的。例如, 我们可能希望biggies函数接受一个ostream的引用,用来输出数据,并接受一个字符作为分隔符:”

void biggies(vector<string> &words,
vector<string> ::size_type sz,
ostream &os = cout, char c = ' ')
{
//打印count的语句改为打印到os
for_each(words.begin(), words.end(),
[&os, c] (const string &s) { os << s << c; });
}

我们不能拷贝ostream对象,因此捕获os的唯一方法就是捕获其引用(或指向os的指针)。

注意:当引用方式捕获一个变量时,必须保证lambda执行时变量是存在的。

一般来说,我们应该尽量减少捕获的数据量,来避免潜在的捕获导致的问题。而且,如果可能的话,应该避免捕获指针或引用。

最新文章

  1. Eclipse 创建maven项目
  2. VPS -Digital Ocean -搭建一个最简单的web服务器
  3. redis linux安装与简单集群配置
  4. 转:CWnd的函数,以后可以在这儿找了!
  5. DaoFactory.java
  6. linux下安装phpredis
  7. 【ES6】Set和Map中的NaN
  8. Repository仓储 UnitofWork
  9. 量身定制顺美男女西服、衬衫、大衣、T恤等 - 北京58同城
  10. codeforces 13E . Holes 分块
  11. BestCoder Round #61 (div.2)
  12. 块元素block,内联元素inline; inline-block;
  13. 使用MVC4,Ninject,EF,Moq,构建一个真实的应用电子商务SportsStore
  14. Inverse属性和cascade属性以及集合的多对多关系
  15. Objective-C的面向对象特性(二)
  16. Harbor删除镜像后且GC清理后,磁盘空间没有释放的问题
  17. RBAC 权限设计(转载)
  18. day 56 jQuery学习
  19. MemSQL Start[c]UP 2.0 - Round 1 E - Three strings 广义后缀自动机
  20. 一款开源免费的办公套件系统:DzzOffice详细部署

热门文章

  1. [c++] 幂法求特征向量
  2. ASP.NET Core中使用Autofac进行属性注入
  3. python-day42(正式学习)
  4. 修改公司VS_UCOS工程BUG调试过程说明
  5. vim /etc/security/limits.conf中的hard和soft
  6. node工具之node-ip
  7. Eclipce远程调试
  8. 08 Python之内存管理
  9. Hadoop网页监控配置
  10. 搭建私有CA并基于OpenSSL实现双向身份认证