php中文网

C 语言函数指针与函数对象有何区别?

php中文网

函数指针存储函数地址需显式类型转换,而函数对象通过重载运算符实现,不需要类型转换。函数指针通过指针调用,而函数对象直接调用。函数指针内存占用固定,而函数对象因对象而异,使用时函数指针用于传递函数,函数对象用于封装函数行为。

C 语言:函数指针与函数对象的区别

函数指针和函数对象是 C 语言中表示函数的方式,它们之间有一些重要的区别。

函数指针

  • 是一种指向函数的指针。
  • 存储在内存中函数的地址。
  • 必须显式转换类型为函数指针。

语法:

int (*ptr)(int, int); // 指向接受两个 int 参数并返回 int 的函数

函数对象

  • 表示一个可以作为对象调用的函数。
  • 类似于 C++ 中的函数对象。
  • 通过重载调用运算符 (()) 来实现。

语法:

struct FuncObj {
  int operator()(int a, int b) {
    return a + b;
  }
};

区别

特征函数指针函数对象
存储内存地址内存对象
类型转换需要类型转换不需要类型转换
调用通过指针调用直接调用
内存占用相同因对象而异
用途用于传递函数封装函数行为

实战案例

下例展示了函数指针和函数对象的用法:

#include <iostream>

// 函数指针
int add(int a, int b) {
  return a + b;
}

// 函数对象
struct Add {
  int operator()(int a, int b) {
    return a + b;
  }
};

int main() {
  // 函数指针
  int (*ptr)(int, int) = add;
  std::cout << ptr(1, 2) << std::endl; // 输出 3

  // 函数对象
  Add addObj;
  std::cout << addObj(1, 2) << std::endl; // 输出 3
}

以上就是C 语言函数指针与函数对象有何区别?的详细内容,更多请关注php中文网其它相关文章!