首页 > 文章列表 > C++ 函数指针与回调函数的对比

C++ 函数指针与回调函数的对比

回调函数 函数指针
273 2024-04-23

函数指针和回调函数都是实现回调机制的工具。函数指针在编译时创建,不可修改,需要显式调用;而回调函数在运行时创建,可动态绑定到不同函数,由回调函数自动调用。因此,函数指针适合静态回调,而回调函数适合动态回调。

C++ 函数指针与回调函数的对比

C++ 函数指针与回调函数的对比

函数指针和回调函数都是 C++ 中用来实现回调机制的强大工具。

函数指针

  • 是指向函数的指针变量。
  • 在编译时创建,无法在运行时更改。
  • 需要显式调用。

回调函数

  • 是一个接受函数指针作为参数的函数。
  • 在运行时创建,可以动态绑定到不同的函数。
  • 由回调函数自动调用。

实战案例

考虑一个需要在不同时间执行不同任务的应用程序。我们可以使用以下代码实现此功能:

#include <iostream>

// 定义一个打印消息的函数
void print_message(const char* message) {
  std::cout << message << std::endl;
}

// 定义一个接受函数指针参数的回调函数
void execute_callback(void (*callback)(const char*)) {
  callback("Hello world!");
}

int main() {
  // 使用函数指针调用回调函数
  execute_callback(print_message);
  
  // 动态创建并调用回调函数
  auto lambda = [](const char* message) {
    std::cout << "[Lambda] " << message << std::endl;
  };
  execute_callback(lambda);

  return 0;
}

在这个示例中,print_message 是一个函数指针,用于静态回调。lambda 表达式 lambda 是一个动态回调,它在运行时创建并绑定到 execute_callback

主要区别

特性函数指针回调函数
创建时机编译时运行时
可修改性不可修改可修改
调用方式显式自动
绑定静态动态