C++ lambda 表达式

Posted 匆忙拥挤repeat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ lambda 表达式相关的知识,希望对你有一定的参考价值。

lambda 表达式

形式:[capture_list](args_list) -> returnType

  • capture_list 是要捕获的 外部局部变量列表。
    1. 使用变量值,是值拷贝,默认不可修改。若需要在函数体内部可以改变值,在参数列表后加上 mutable。即使修改了,也不会影响原外部的值。
    2. 使用引用,如 &a。引用捕获。 引用依赖的若是const引用,则不能修改,反之可通过引用修改。
    3. 只使用 一个 &=,前者是引用捕获,后者是值捕获。在函数体中,直接使用外部局部变量,会自动推断捕获列表。隐式捕获
    4. 可以混用 显式和隐式捕获。当混用时,第一个元素必须是一个 &或=
  • args_list 参数列表
  • returnType 返回类型。
    若函数体内只有一条return语言,可以省略 -> returnType 声明。
    当还有其它语句时,需要声明 -> returnType 。
void testLambda1() 
    vector<int> vec = 1,20,3,4,5;
    auto res = find_if(vec.begin(), vec.end(), [](int it) -> bool  //可省略 -> bool,会自动推断。
        return it % 2 == 0;
    );
    cout << *res << endl;  //输出20

// lambda要使用外部局部变量,必须定义在[]列表中,以逗号分隔。
void testLambda2() 
    vector<int> vec = 1,20,3,4,5;
    int temp = 3;
    auto res = find_if(vec.begin(), vec.end(), [temp](int &it) -> bool 
        return it == temp;
    );
    cout << *res << endl;

// 值拷贝外局部变量,若需要在函数体内部可以改变值,在参数列表后加上 mutable
void testLambda3() 
	auto mut = [temp] () mutable 
	    return ++temp;
	;
	cout << mut() << temp << endl;

以上是关于C++ lambda 表达式的主要内容,如果未能解决你的问题,请参考以下文章

死磕Lambda表达式:更简洁的Lambda

C# 10 Lambda 语法的改进

KotlinKotlin 函数总结 ( 具名函数 | 匿名函数 | Lambda 表达式 | 闭包 | 内联函数 | 函数引用 )

KotlinKotlin 函数总结 ( 具名函数 | 匿名函数 | Lambda 表达式 | 闭包 | 内联函数 | 函数引用 )

Lambda表达式

Lambda