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 表达式的主要内容,如果未能解决你的问题,请参考以下文章

C++——Lambda表达式

C++ lambda表达式

C++ lambda表达式

C++ 11 lambda表达式

c++中lambda表达式用法

看看 C++ 的 Lambda 表达式