首页 / C++ / C++11 lambda表达式基本用法
C++11 lambda表达式基本用法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++11 lambda表达式基本用法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3314字,纯文字阅读大概需要5分钟。
内容图文
![C++11 lambda表达式基本用法](/upload/InfoBanner/zyjiaocheng/1328/538c216fb30948ef93d3ad26a9d7e383.jpg)
#include <iostream> using namespace std; void func1() { cout<<"lambda表达式,值捕获,类似值传递"<<endl; size_t v1=30;//size_t为unsigned int无符号整数 size_t v2=30; size_t v3=30; auto f=[v1,v2,v3]{return v1+v2+v3;};//lambda表达式中[]里面放的是要传递的参数,可以放多个。 v1=2; cout<<f()<<endl; cout<<endl; //因为这是类似值传递,所以v1在改变前就已经给了f,所以不会变。注意隐式捕获得到的变量不能被改变,只能使用其值不能改变 //可以理解成[const v1]当然你不能这样写只是可以这么认为 } void func2() { cout<<endl; cout<<"lambda表达式,引用捕获,类似引用传递"<<endl; size_t v1=30;//size_t为unsigned int无符号整数 size_t v2=30; size_t v3=30; auto f=[&v1,v2,&v3]{return v1+v2+(v3++);};//lambda表达式中[]里面放的是要传递的参数,可以放多个。这里v1,v3为引用,v2为值传递 cout<<"引用值没变前:"<<endl; cout<<"v1="<<v1<<endl <<"v2="<<v2<<endl <<"v3="<<v3<<endl; cout<<f()<<endl; v1=40; cout<<"引用值改变后:"<<endl; cout<<"v1="<<v1<<endl <<"v2="<<v2<<endl <<"v3="<<v3<<endl;//之前调用了一次f所以v3会加1 cout<<f()<<endl; cout<<endl; //因为这是类似引用传递,所以v1改变后f返回的值也会对应的改变。而且在f中也引用用v3并且v3进行了自增操作,所以第二次输出v3时的值是31 } void func3() { cout<<endl; cout<<"lambda表达式,隐式值捕获"<<endl; size_t v1=30;//size_t为unsigned int无符号整数 size_t v2=20; size_t v3=10; auto f=[=,&v2] { v2=v1+v3; }; //lambda表达式中[]里面放的是要传递的参数,可以放多个。 //第一个为=,第二个为&v2,表示除了v2是引用传递以外,其他从外面来的参数都是值传递,而隐式传递同时只能用一种。要么引用要么值传递 //值传递只能被使用,不能被改变,如果企图改变值传递的值编译会报错 cout<<"没变前:"<<endl; cout<<"v1="<<v1<<endl <<"v2="<<v2<<endl <<"v3="<<v3<<endl; cout<<"改变后:"<<endl; f(); cout<<"v1="<<v1<<endl <<"v2="<<v2<<endl <<"v3="<<v3<<endl; cout<<endl; } void func4() { cout<<endl; cout<<"lambda表达式,隐式引用捕获"<<endl; size_t v1=30;//size_t为unsigned int无符号整数 size_t v2=20; size_t v3=10; auto f=[&,v2] { v1++; v3=v2; }; //lambda表达式中[]里面放的是要传递的参数,可以放多个。 //第一个为&,第二个为v2,表示除了v2是值传递以外,其他从外面来的参数都是引用传递,而隐式传递同时只能用一种。要么引用要么值传递 cout<<"没变前:"<<endl; cout<<"v1="<<v1<<endl <<"v2="<<v2<<endl <<"v3="<<v3<<endl; cout<<"改变后:"<<endl; f(); cout<<"v1="<<v1<<endl <<"v2="<<v2<<endl <<"v3="<<v3<<endl; cout<<endl; } void func5() { cout<<"lambda表达式,可变的值捕获"<<endl; size_t v1=30;//size_t为unsigned int无符号整数 size_t v2=20; size_t v3=10; auto f=[v1,v2,v3]() mutable { v1=v2+v3; v2=v1+v3; v3=v1+v2; }; //lambda表达式中[]里面放的是要传递的参数,可以放多个。 cout<<"v1="<<v1<<endl <<"v2="<<v2<<endl <<"v3="<<v3<<endl; cout<<endl; //看到输出结果是不是觉得很奇怪吗,不是说可变吗,结果值还是一样。这里的可变是指在lambda表达式中原本值传递的参数只能被获得值。不能对其进行其他操作 //mutable的原因,使其可以像函数里的变量一样被使用,可以理解成函数中的值传递。函数中的值传递就是可以对其参数进行任何操作。 } void func6() { cout<<"lambda表达式,指定返回类型"<<endl; auto f=[](int i)->int { return i; }; //lambda表达式中[]里面放的是要传递的参数,可以放多个。 cout<<f(50)<<endl; //要指定lambda表达式的返回类型我们必须用->来设置 cout<<endl; } void main(void) { func1();//值捕获 func2();//引用捕获 func3();//隐式值传递 func4();//隐式引用传递 func5();//可变lambda func6();//指定返回类型 system("pause"); }
如果有什么不对的地方请大家指出,这几天整理的lambda表达式的基本用法
原文:http://blog.csdn.net/u011507161/article/details/42475043
内容总结
以上是互联网集市为您收集整理的C++11 lambda表达式基本用法全部内容,希望文章能够帮你解决C++11 lambda表达式基本用法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。