您的位置:首页 > 教程笔记 > 综合教程

C++ 函数指针与 lambda 表达式:揭晓回调魔法

2024-04-29 16:03:14 综合教程 204

函数指针和 lambda 表达式均允许将函数作为参数传递给回调函数。函数指针保存指向函数地址的变量,而 lambda 表达式是匿名函数对象,可即时定义函数。通过实战案例,我们演示了使用函数指针和 lambda 表达式对数组元素求和。这些技术对于编写灵活且可扩展的 c++++ 代码至关重要。

C++ 函数指针与 lambda 表达式:揭晓回调魔法

简介
函数指针和 lambda 表达式在 C++ 中发挥着至关重要的作用,它们允许向回调函数传递函数作为参数。在本文中,我们将深入研究函数指针和 lambda 表达式,并通过实战案例演示它们的实际使用。

函数指针
函数指针是保存指向函数地址的变量。它们允许将函数作为一个值来传递,就像其他变量一样。要声明函数指针,请按照以下格式进行操作:

// 指向具有指定签名的函数的指针
<a style='color:#f60; text-decoration:underline;' href="/zt/58423.html" target="_blank">typedef</a> int (*fptr)(int);

lambda 表达式
lambda 表达式是匿名函数对象,它允许在需要函数的地方即时定义函数。它们的语法如下:

[capture-list](parameter-list) -> return-type { body };

实战案例

下面是一个实战案例,演示如何使用函数指针和 lambda 表达式对数组中的元素求和:

代码段 1:使用函数指针

#include <iostream>

// 求和函数
int sum(int a, int b) { return a + b; }

// 使用函数指针
using namespace std;

int main() {
  int arr[] = {1, 2, 3, 4, 5};
  int size = sizeof(arr) / sizeof(arr[0]);

  // 指向求和函数的函数指针
  int (*ptr)(int, int) = &sum;

  int total = 0;
  for (int i = 0; i < size; i++) {
    total += ptr(arr[i], arr[i + 1]);
  }

  cout << "Total: " << total << endl;
  return 0;
}

代码段 2:使用 lambda 表达式

#include <iostream>

// 使用 lambda 表达式
using namespace std;

int main() {
  int arr[] = {1, 2, 3, 4, 5};
  int size = sizeof(arr) / sizeof(arr[0]);

  int total = 0;
  for (int i = 0; i < size; i++) {
    total += [](int a, int b) -> int { return a + b; }(arr[i], arr[i + 1]);
  }

  cout << "Total: " << total << endl;
  return 0;
}

理解代码
在代码段 1 中,我们使用一个函数指针 来保存指向求和函数 的地址。我们遍历数组,将每个元素及其后续元素传递给 。求和函数返回两个元素的总和,将其添加到 中。

在代码段 2 中,我们使用 lambda 表达式定义了一个匿名的求和函数。与函数指针不同,lambda 表达式在需要时即时定义函数。我们以与代码段 1 相同的方式对数组进行迭代,将元素传递给 lambda 表达式进行求和。


函数指针和 lambda 表达式对于向回调函数传递函数至关重要。函数指针提供了一种通过简单变量传递函数的机制,而 lambda 表达式允许动态定义匿名函数。通过理解这些技术,您可以编写灵活且可扩展的 C++ 代码。

相关推荐

  • C++ 函数指针在不同编程范式中的运用:释放其多面性

    C++ 函数指针在不同编程范式中的运用:释放其多面性

    函数指针在 c++++ 中作为多面性工具,在不同编程范式中发挥着关键作用:面向对象编程(oop):用作回调,从外部调用并传入附加数据的函数。函数式编程(fp):用作高阶函数的参数或返回值,应用于数组等

    综合教程 2024-04-29 16:03:13 142
  • C++ 函数指针与 C 兼容性:无缝桥接两种语言

    C++ 函数指针与 C 兼容性:无缝桥接两种语言

    c++++ 函数指针与 c 兼容,允许在两种语言之间无缝传递和存储函数。尽管声明语法略有不同(c++ 要求使用圆括号和引用运算符),c++ 函数指针与 c 函数指针兼容,可以相互传递。这在移植 c 库

    综合教程 2024-04-29 16:03:11 164
  • golang如何处理函数签名冲突?

    golang如何处理函数签名冲突?

    go 处理函数签名冲突的方法:1. 使用接口定义共享签名的函数的不同实现;2. 使用别名重命名函数调用中的参数;3. 使用闭包创建具有共享变量的不同签名的函数。Go 中处理函数签名冲突Go 语言允许函

    综合教程 2024-04-29 16:03:09 90
  • C++ 成员函数详解:对象方法的容器兼容性和迭代器支持

    C++ 成员函数详解:对象方法的容器兼容性和迭代器支持

    成员函数是定义在类上下文中,与对象相关联的函数,可访问对象数据和方法。为了使其与容器兼容,自定义类必须提供赋值运算符、相等和不相等运算符、比较运算符。此外,为了支持迭代器,类应提供返回指向容器起始和终

    综合教程 2024-04-29 16:03:07 78
  • golang函数的文档编写指南

    golang函数的文档编写指南

    在 go 语言中,编写清晰且有用的函数文档至关重要,可提高代码的可维护性、可读性和协作效率。以下为编写 go 函数文档的准则:使用 // 注释添加文档指定输入和输出参数编写正文段描述函数用途和用法包含

    综合教程 2024-04-29 16:03:05 86