文章

函数 Lamda函数

函数 Lamda函数

[TOC]

匿名函数(lamda函数)

一个lamda函数的格式为:

1
[capture](parameters)->return_type{/*...*/};
  • [capture]: 捕获列表(Capture List),决定了函数在定义时能够访问和使用哪些外部变量。1
    1. []:空捕获列表,表示 lambda 函数不捕获任何外部变量,只能使用函数内部的局部变量。
    2. [x]:值捕获,其中 x 是一个外部变量的名称。lambda 函数将会复制 x 的值,并在函数体中使用该值,不会对外部变量进行修改。
    3. [&x]:引用捕获,其中 x 是一个外部变量的名称。lambda 函数将会引用(绑定)x,并在函数体中使用该引用。任何对 x 的修改都会影响外部变量。
    4. [=]:默认值捕获,表示以值的方式捕获所有外部变量。函数体中使用的外部变量都是复制的副本,不会对外部变量进行修改。
    5. [&]:默认引用捕获,表示以引用的方式捕获所有外部变量。函数体中使用的外部变量都是通过引用访问的,任何对外部变量的修改都会影响外部变量。
  • (parameters):括号内为形参,和普通函数的形参一样。
  • ->return_type:lamda 函数的返回类型,如->int->string等。一般情况下,编译器可以自行推出返回类型,所以这部分可以省略不写。
  • {/*...*/}:函数主体,和普通函数一样。

以下是一个lamda函数的例子:

1
2
3
4
5
6
7
// 定义了一个加法函数FuncAdd,这就是一个函数,当函数用就对了
auto FuncAdd = [](int a, int b)->int
{
    return a + b;
};
// 使用:
int nResult = FuncAdd(1, 2);

参考文章2

本文由作者按照 CC BY 4.0 进行授权