简介
C++11 中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。
格式
Lambda表达式的构成
[capture](parameters)mutable->return-type
{
statement
}
[函数对象参数](操作符重载函数参数)可修改标识符->返回值
{
函数体
}
使用方式
函数对象参数[]
,标识一个Lambda的开始,这部分必须存在,不能省略。函数对象参数是传递给编译器自动生成的函数对象类的构造函数。函数对象参数只能用使那些到定义Lambda为止时Lambda所在作用范围内可见的局部变量(包括Lambda所在类的this)。函数对象参数有如下几种形式:
空
。没用使用任何函数对象参数。=
(常用)。函数体内可以使用Lambda所在作用范围内所有可见的局部变量(包括Lambda所在类的this),并且是值传递方式(相当于编译器自动为我们按值传递了所有局部变量)&
。函数体内可以使用Lambda所在作用范围内所有可见的局部变量(包括Lambda所在类的this),并且是引用传递方式(相当于编译器自动为我们按引用传递了所有局部变量)this
。函数体内可以使用Lambda所在类中的成员变量。param1
。将param1按值进行传递。按值进行传递时,函数体内不能修改传递进来的param1的拷贝,因为默认情况下函数是const
的。要修改传递进来的param1的拷贝,可以添加mutable
修饰符。¶m1
。将param1按引用进行传递。
操作符重载函数参数
标识重载的()
操作符的参数,没有参数时,这部分可以省略。参数可以通过按值(如:(a,b))和按引用(如:(&a,&b))两种方式进行传递。
可修改标识符mutable
声明,这部分可以省略。按值传递函数对象时,加上mutable
修饰后,可以修改按值传递进来的拷贝(注意:是只能修改拷贝,而不是原变量的值)。
函数返回值->返回值类型
,标识函数的返回值类型,当返回值为void
时,或者函数体中只有一处return
的地方(此时编译器可以自动推断出返回值类型)时,这部分可以省略。
函数体{}
,标识函数的实现,这部分不能省略,但函数体可以为空。
示例
int main()
{
int a = []()->int { return 100; }
return 0;
}
本文由 giao创作, 采用 知识共享署名4.0 国际许可协议进行许可 本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名 原文地址:《C++11中Lambda表达式学习记录》
最后一次更新于2019-03-21
0 条评论