C++11中Lambda表达式学习记录

简介

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修饰符。
  • &param1。将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 条评论

添加新评论

Markdown is supported.