返回

lambda 揭秘:解读函数如何在 C++ 中表现如同对象

闲谈

好的,请看由初始C++(九)生成的文章:

C++11 中引入的 lambda 表达式,因其简洁的语法和强大的功能而备受赞誉。它是一种匿名函数,允许您在代码中创建即时函数,而无需显式定义函数名。这在许多情况下非常有用,例如作为回调函数、将函数作为参数传递,以及在循环或数据结构中使用匿名函数。

lambda 表达式的基本语法如下:

[capture-list](parameter-list) -> return-type { body }
  • capture-list:指定要捕获的变量,以便在 lambda 表达式中使用。
  • parameter-list:指定 lambda 表达式的参数。
  • return-type:指定 lambda 表达式的返回值类型。
  • body:指定 lambda 表达式的函数体。

为了更清楚地理解 lambda 表达式的工作原理,我们来看一个简单的示例:

int main() {
  int x = 10;
  // 使用 lambda 表达式定义一个函数
  auto f = [x](int y) { return x + y; };
  // 调用 lambda 表达式
  int result = f(5);
  // 打印结果
  std::cout << result << std::endl; // 输出:15
  return 0;
}

在这个示例中,我们定义了一个名为 f 的 lambda 表达式,它捕获了变量 x,并接受一个参数 y。lambda 表达式的函数体返回 xy 的和。然后我们调用 lambda 表达式,并将 5 作为参数传递给它。最后,我们将结果打印到控制台。

lambda 表达式可以作为参数传递给函数。这在许多情况下非常有用,例如作为回调函数或将函数作为参数传递给其他函数。例如,我们可以将 lambda 表达式作为参数传递给 std::sort 函数来对一个数组进行排序:

int main() {
  int arr[] = {1, 5, 3, 2, 4};
  int n = sizeof(arr) / sizeof(arr[0]);
  // 使用 lambda 表达式定义一个比较函数
  auto comp = [](int a, int b) { return a > b; };
  // 使用 lambda 表达式对数组进行排序
  std::sort(arr, arr + n, comp);
  // 打印排序后的数组
  for (int i = 0; i < n; i++) {
    std::cout << arr[i] << " "; // 输出:5 4 3 2 1
  }
  std::cout << std::endl;
  return 0;
}

在这个示例中,我们定义了一个名为 comp 的 lambda 表达式,它接受两个整型参数,并返回 true 如果第一个参数大于第二个参数,否则返回 false。然后我们使用 lambda 表达式作为比较函数来对数组 arr 进行排序。最后,我们将排序后的数组打印到控制台。

lambda 表达式是 C++ 中一个非常强大的工具,它可以使您的代码更简洁、更易读。它可以用于各种情况,例如作为回调函数、将函数作为参数传递,以及在循环或数据结构中使用匿名函数。