C++的lambda表达式

本文介绍C++的lambda表达式。

lambda表达式有些时候也被称作匿名函数,个人觉得叫lambda表达式更确切一些,毕竟在书写时后面都会跟1个";"来结尾(函数是没有的)。

1.语法规则

lambda表达式一般由以下几部分组成:

[capture list] (parameter list) mutable exception-> return type { function body }

用中文来描述:

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

1)捕获列表:必选,lambda表达式访问外部变量(除自己形参以外的变量)时,需指定哪些变量传入及传入方式,捕获方式如下表:

[] 不捕获任何外部变量,但全局变量和静态变量仍可用
[a, b, …] 以值的方式捕获a,b,...
[this] 以值的方式捕获this指针
[=] 以值的方式捕获外部所有变量
[&] 以引用的方式捕获外部所有变量
[=, &x] 以引用的方式捕获外部所有变量x,以值的方式捕获外部其它变量
[&, x] 以值的方式捕获外部所有变量x,以引用的方式捕获外部其它变量

2)形参列表:必选,lambda表达式的输入参数,与函数的形参类似

3)返回值类型:可选,返回值类型

4)mutable指示符:可选,是否可以修改按值捕获的变量

5)exception(类型):可选,抛出指定类型的异常

2.例子

以下例子以语句的方式进行呈现,注意末尾的";"

1)捕获为空,返回值为空,形参为空

这是1个最简单的lambda表达式

    auto fun = []()
    {
        
    };

2)捕获为空,返回值不为空,形参不为空

    auto fun = [](int x, int y) -> int
    {
        return x + y;
    };

3)捕获不为空,返回值不为空,形参不为空

    int a = 3;
    int b = 2;
    
    auto fun = [a, &b](int x, int y) -> int
    {
        b = 3;
        return x + y;
    };

这里a以值的方式捕获,b以引用的方式捕获

3.调用方式

int main()
{
    int a = 3;
    int b = 2;
    
    auto fun = [a, &b](int x, int y) -> int
    {
        b = 3;
        return x + y;
    };

    int c = fun(3, 2);

    std::cout << c << endl;
    std::cout << a << endl;
    std::cout << b << endl;

    return 0;
}

调用方式比较简单,和普通函数调用没太大区别。

总结,本文介绍了C++的lambda表达式。

你可能感兴趣的:(C++,c++)