std::函数与函数指针

std::function function vs function pointer

本文关键字:函数 指针 std      更新时间:2023-10-16

fn1 和 fn2 之间有什么区别吗,哪个更好?

int half(int x) {return x/2;}
std::function<int(int)> fn1 = half;                    // function
std::function<int(int)> fn2 = &half;                   // function pointer

std::cout << "fn1(60): " << fn1(60) << 'n';
std::cout << "fn2(60): " << fn2(60) << 'n';

不,没有。

在第一个构造中,函数作为int (&) (int)传递给std::function构造函数 - 对函数的引用。

在第二个构造中,函数作为int (*) (int)传递给std::function构造函数 - 指向函数的指针。

可调用对象本身存储在 std::function 对象中的方式是实现定义的。

施工后,fn1fn2的行为完全相同,没有区别。

至于"哪一个更好" - 我更喜欢参考版本,因为句子中没有运算符,无论如何,我的哲学是尽可能少地使用指针,即使它是最安全的指针。