C++中的lambda函数是一种匿名函数,它允许你在代码中直接定义一个函数对象,而不需要提前声明一个函数名。Lambda函数通常用于编写简短的函数,这些函数可能只会被调用一次或者在某些特定的上下文中使用。
Lambda函数的基本语法如下:
[capture] (parameters) -> return_type { function body }
• [capture]:捕获子句,用于指定lambda函数可以访问的外部变量。它可以是值捕获(x
)、引用捕获(&x
)或者默认捕获(=
表示值捕获,&
表示引用捕获)。
• (parameters):参数列表,与普通函数参数列表相同,可以有参数类型和参数名。
• ->return_type:返回类型,如果函数返回void或者函数体只有一条return语句,可以省略返回类型。
• {function body}:函数体,包含lambda函数的代码。
以下是一些使用lambda函数的例子:
• 无参数和返回值:
auto print = []() { std::cout << "Hello, World!" << std::endl; };
print(); // 输出 "Hello, World!"
• 有参数和返回值:
auto add = [](int a, int b) -> int { return a + b; };
int result = add(5, 3); // result 为 8
• 捕获外部变量:
int x = 10;
auto print_x = [x]() { std::cout << x << std::endl; };
print_x(); // 输出 10
• 使用默认捕获:
int y = 20;
auto print_y = [=]() { std::cout << y << std::endl; };
print_y(); // 输出 20
• 使用初始化捕获:
int z = 30;
auto print_z = [z = z]() { std::cout << z << std::endl; };
print_z(); // 输出 30,这里z被初始化为外部变量z的值
Lambda函数在C++11中引入,它们提供了一种灵活的方式来定义和使用函数对象,特别是在需要临时函数或者回调函数时非常有用。Lambda函数可以被转换为函数指针、std::function对象或者绑定到函数对象。