C++ 11之lambda表达式
来源:互联网 发布:螺丝加工怎么数控编程 编辑:程序博客网 时间:2024/06/07 13:15
C++11之Lambda表达式
最近在学习Qt时,遇到了lambda表达式,特地总结一篇
C++11引入了Lambda表达式,自此,我们在支持C++11标准的编译器中也可以使用匿名函数了。
GCC 4.5.X和MSVC 10以后的版本都支持了Lambda表达式。GCC默认不开启C++11支持,因此我们在使用C++11标准时需要加入 -std = c++11
Lambda表达式的语法如下:
[](int x,int y) –>int {return x * y;};
[]是lambda表达式的引入符(后面会解释这个引入符的),由于是匿名函数,所以就没有名字。()表示参数列表。int是lambda表达式的返回值。{}里面是函数体。当lambda表达式函数体语句很简单时,可以不指定返回值,此时将会制动推断返回值。
下面在看一个例子:std::cout << [](float f) { return std::abs(f); } (-3.33) << endl;
这条语句将会输出3.33。-3.33作为参数被传递到f。该例子的返回值就是自动推断的。这种语法就是声明一个lambda表达式,接着马上调用。
cout << [](double f)->int {return std::abs(f); }(-3.33) << endl;
这条语句制定了返回值为int类型。所以它的值变成了3,而不是3.33。
引入lambda表达式的语法: int val = 3;
auto lambda = [&]() -> int { return val * 100; };
cout << lambda() << endl;
使用关键字auto即可。在这个例子中我们注意到方括号内有个“&”,这个方括号和其内部的符号共同构成了lambda表达式的引入符。这个引入符可以获取和它相同范围内的变量的值。
[] // 不捕获任何外部变量
[=] // 以值的形式捕获所有外部变量
[&] // 以引用形式捕获所有外部变量
[x, &y] // x 以传值形式捕获,y 以引用形式捕获
[=, &z]// z 以引用形式捕获,其余变量以传值形式捕获
[&, x] // x 以值的形式捕获,其余变量以引用形式捕获
当以值的形式捕获时,我们不能修改原变量的值,当以引用形式捕获时,我们的操作可以改变变量的值。
- 【C++】C++11新特性 之 lambda表达式的使用
- 【C#】之匿名函数及Lambda表达式
- C++11之Lambda表达式
- C++ 11之lambda表达式
- C++11之lambda表达式
- c++11之lambda表达式
- C++11之lambda表达式
- c++11之 Lambda表达式
- C++ 11之lambda表达式
- 【c/c++】Lambda表达式
- C++11 学习笔记 lambda表达式
- C++11 学习笔记 lambda表达式
- C++11 学习笔记 lambda表达式
- C#--Lambda表达式
- C#:Lambda 表达式
- C++lambda表达式
- C++lambda表达式
- C# Lambda表达式
- 链表-leetcode 445 Add Two Numbers
- windows7下python安装whl文件(numpy+mkl安装为例)
- Ubuntu14.04安装Gevent
- CSS样式上
- 微签app开发总结
- C++ 11之lambda表达式
- java通过JDBC连不上SqlServer
- bat脚本输出重定向到nul
- C# WinForm 拖动无边框窗体
- mongodb 对内存的严重占用以及解决方法
- git的简单实用案例
- tensorflow mnist实战笔记(一)了解官方mnist数据格式
- MP4文件中h264的 SPS、PPS获取
- Maven搭建Servlet环境(2)-添加web模块