C++ 11 笔记 (一) : lambda

时至今日都是我咎由自取,错就是错,与任何人无关。掉进C++98的各种坑里无法自拔的抖M感,让我选择了华丽丽的无视C++11,导致今日面对开源的代码到各种看不懂的地步,一入C++深似海,我今天愿意承担一切后果。在努力摆脱小白的道路上,我必须再一次推倒我的三观,重新审视和坦然面对自己。

 

一段时间没有更新博客了,简直凄凉。

今天打算开几篇C++11的博客。看博容易,写博不易,且写且珍惜。。。

 

lambda表达式在C++算是千呼万唤始出来了,常见写法有下面几种:

 1 auto lambda1 = [](std::string str) 
 2 {
 3     std::cout << str << std::endl;
 4 };
 5 
 6 int x = 3;
 7 auto lambda2 = [=](int a, int b)
 8 {
 9     return a > x;
10 };
11 
12 auto lambda3 = [&](int a, int b)
13 {
14     x = 5;
15     return a > b;
16 };

[]表示不访问外部变量,[=]表示值访问,[&]表示引用访问。在上面的例子中,lambda1无法访问除str以外的变量,lambda2可以访问x的值,但是不能修改x的值,lambda3可以修改x的值。在 “=” 和 “&” 的后面是可以加变量名的,完全可以写成[=x, &y]。

最后举一个岂止水简直水的例子,那就是std::sort

1 int arr[] = { 1, 5, 2, 6, 3 };
2 std::sort(arr, arr + 5, [](int x, int y) { return x > y; });

差不多就是这样了~~~

posted @ 2014-04-23 20:59  Anti-Magic  阅读(193)  评论(0编辑  收藏  举报