cpp的lambda表达式

在C++中,lambda表达式提供了一种方便的方式来定义匿名函数。Lambda可以用来创建简单的函数对象,常用于算法库中的函数参数,特别是在STL(Standard Template Library)中。
Lambda表达式的语法是这样的:

[ capture ] ( parameters ) -> return-type {
    function-body
}

其中:

  • capture:捕获列表,用于指定哪些变量从封闭的作用域中捕获以及如何捕获(值捕获、引用捕获、不捕获、隐式捕获)。例如,[x, &y]表示x通过值捕获,而y通过引用捕获。
  • parameters:参数列表,与普通函数的参数列表类似。如果没有参数,可以省略或者写成空括号()
  • return-type:返回类型。自C++14起,如果lambda函数体只包含一个return语句,或者返回类型显而易见,则可以省略返回类型,编译器会进行自动推断。
  • function-body:函数体,包含了lambda的执行语句。

下面是一些lambda表达式的示例:
示例 1:无参数,简单的打印

auto printHello = []() {
    std::cout << "Hello, World!" << std::endl;
};
printHello(); // 调用lambda表达式

示例 2:使用参数和返回值

auto add = [](int x, int y) -> int {
    return x + y;
};
std::cout << add(5, 3) << std::endl; // 输出8

示例 3:值捕获外部变量

int z = 4;
auto addZ = [z](int x) -> int {
    return x + z; // z通过值捕获进来
};
std::cout << addZ(3) << std::endl; // 输出7

示例 4:引用捕获外部变量

int w = 4;
auto modifyW = [&w](int x) {
    w = x; // w通过引用捕获,可以修改其值
};
modifyW(5);
std::cout << w << std::endl; // 输出5

Lambda表达式是C++11及以后版本中的一个强大特性,它大大简化了代码的编写,尤其是在需要使用临时函数对象的场合。

热门相关:美女总裁之贴身高手   全民女神,重生腹黑千金   国民女神:重生王牌千金   幻想世界大穿越   神秘复苏