gpt4 book ai didi

c++ - 函数指针的意义何在?

转载 作者:IT老高 更新时间:2023-10-28 12:00:55 25 4
gpt4 key购买 nike

我很难看到函数指针的实用性。我想它在某些情况下可能有用(毕竟它们存在),但我想不出使用函数指针更好或不可避免的情况。

您能否举一些很好地使用函数指针(在 C 或 C++ 中)的例子?

最佳答案

大多数示例归结为 回调:您调用一个函数 f() 并传递另一个函数 g() 的地址f() 为某些特定任务调用 g()。如果你将 f() 传递给 h() 的地址,那么 f() 将回调 h() 代替。

基本上,这是一种参数化函数的方法:它的某些行为没有硬编码到f()中,但进入回调函数。调用者可以通过传递不同的回调函数使 f() 表现不同。一个经典的例子是来自 C 标准库的 qsort(),它将其排序标准作为指向比较函数的指针。

在 C++ 中,这通常使用 函数对象(也称为仿函数)来完成。这些是重载函数调用运算符的对象,因此您可以像调用函数一样调用它们。示例:

class functor {
public:
void operator()(int i) {std::cout << "the answer is: " << i << '\n';}
};

functor f;
f(42);

这背后的想法是,与函数指针不同,函数对象不仅可以携带算法,还可以携带数据:

class functor {
public:
functor(const std::string& prompt) : prompt_(prompt) {}
void operator()(int i) {std::cout << prompt_ << i << '\n';}
private:
std::string prompt_;
};

functor f("the answer is: ");
f(42);

另一个优点是有时内联调用函数对象比通过函数指针调用更容易。这就是为什么在 C++ 中排序有时比在 C 中排序更快的原因。

关于c++ - 函数指针的意义何在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2592137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com