自学内容网 自学内容网

C++:Lambda表达式用法

  Lambda表达式,又称匿名函数,假如在编程时,有一个函数只会被复用一次,其他地方再也不会调用时,lambda表达式就很实用。

1.Lambda表达式的基本语法

[ 捕获列表 ] ( 参数列表 ) -> 返回类型 { 函数体 }

语法:[capture list] (parameter list) -> return type {function body}

  • capture list:表示捕获列表,是一个lambda所在函数中定义的局部变量列表;
  • parameter list:表示参数列表;
  • return type:返回类型;
  • function body:函数体。

  可以忽略参数列表和返回类型,但必须永远包含捕获列表和函数体,忽略参数列表等价于指定一个空函数列表,忽略返回类型,lambda会根据函数体中的代码推断出来。(如果函数体直接return,则是void类型)

举例:
正常的函数是这样:

int Foo(int a, int b)
{
return a+b;
}

则在主函数中,匿名函数就可以这样写

int main()
{
auto c = [ ] ( int a, int b ) -> int 
{
       return a+b;
}
}
#include <iostream>
#include <thread>
using namespace std;

int main(void)
{
    string str = "test";
    thread fun = thread([&str](int a, int b) {
        cout << str << endl;
        cout << a + b << endl;
        }, 2, 3);
    fun.join();
}

2.Lambda表达式的捕获方式

  • [ ] :方括号里面为空表示不捕获外围的变量(即Lambda函数可以访问甚至是修改函数外部的变量)
  • [N, &M] :方括号中如果变量名M前面有引用符号,表示按引用捕获可以修改外围变量的值;如果变量名N前面没有引用符号,表示按值捕获不可以修改外围变量的值
  • [&] :方括号里面只写引用符号,那么就会按照引用捕获所有的封闭范围中的变量
  • [=] :方括号里面只写等号,意思是所有的变量都按值捕获
  • [&, =N] :可以单独指定一些变量按照值捕获,其他变量都按引用捕获,比如这里就是按值捕获N,其他变量按引用捕获
  • [this] :如果是在某个class中使用匿名函数,可以用this捕获当前实例的指针(C++17后,还可以用[*this],按值捕获该实例)

原文地址:https://blog.csdn.net/qq_45445740/article/details/138003440

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!