C++11之lambda表达式
2015-09-17 00:42
316 查看
C++11中引入了lambda表达式,允许使用匿名函数。
其语法如下:
1 函数对象参数,必须,标志lambda表达式的开始,有三种参数可选:
a 空,不能使用lambda表达式所在作用域中的变量。
b =,可以使用lambda表达式所在作用域中的变量,值传递。
c &,使用lambda表达式所在作用域中的变量,引用传递。
2 函数参数列表,非必需,无参数时可省略,lambda表达式的参数列表,即匿名函数的参数列表。
3 mutable生命,可省略,函数对象值传递时加上mutable可以修改形参的值,默认不能修改。
4 异常抛出生命,可省略,throw中可以指定lambda表达式抛出的异常类型,如throw(int e)。
5 返回值类型,当然会值为void或者只有一个返回值(编译器可自动推导)时,可以省略。
6 函数体,必需,但可以为空,书写逻辑。
示例:
结果如图:
其语法如下:
1 函数对象参数,必须,标志lambda表达式的开始,有三种参数可选:
a 空,不能使用lambda表达式所在作用域中的变量。
b =,可以使用lambda表达式所在作用域中的变量,值传递。
c &,使用lambda表达式所在作用域中的变量,引用传递。
2 函数参数列表,非必需,无参数时可省略,lambda表达式的参数列表,即匿名函数的参数列表。
3 mutable生命,可省略,函数对象值传递时加上mutable可以修改形参的值,默认不能修改。
4 异常抛出生命,可省略,throw中可以指定lambda表达式抛出的异常类型,如throw(int e)。
5 返回值类型,当然会值为void或者只有一个返回值(编译器可自动推导)时,可以省略。
6 函数体,必需,但可以为空,书写逻辑。
示例:
#include <iostream> using namespace std; int main() { auto res = [] (int x, int y) ->int { return x + y; }(1, 2); cout << res << endl; auto x = 1; [] (int &x, int &y) -> void { auto tmp = x; x = y; y = tmp; }(res, x); cout << res << "," << x << endl; [&] { res += 1; }(); cout << res << endl; [=] () mutable -> void { res += 1; }(); cout << res << endl; return 0; }
结果如图:
相关文章推荐
- C语言实现静态链表
- Windows下使用Dev-C++开发基于pthread.h的多线程程序
- C++拷贝构造函数详解
- C语言---程序的一般形式、数据类型、常量变量、运算符、表达式、格式化输入输出
- C++ Builder中Toolbar控件的一些用法和说明整理
- C++中内存对齐
- C++ 之初探异常处理(exception)
- hello c++ demo c++基本语法
- C++面试知识点总结
- 算法学习--二分法查找
- C++Primer Plus 第十章-类的构造和析构函数
- Ubuntu编写C++程序
- 如何用C++打印杨辉三角
- C++学习笔记1
- c++引用
- C++标准库——顺序容器
- 【LeetCode从零单刷】Reverse Linked List
- C语言运算符
- 关于C语言中宏定义的高级运用
- c语言指针使用小心得