AI编程助手
AI免费问答

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

王林   2024-10-05 11:00   918浏览 原创

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

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

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 </iostream>
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。