C++中的std::function和函数指针有什么不同?(现代C++用法) c++ std::function
std::function 是一种可调用对象包装器,支持所有签名匹配的可调用对象(function、lambda、成员函数、mock 函数等),而指针函数只能指向签名匹配的普通函数;前者有间接调用和存储开销,后者没有开销;前者适用于运行时多状态反馈,后者适用于底层或编译期确定的简单反馈。

std::function 是一种可调用对象包装器,而指针函数只能指向特定签名函数的裸地址——两者并非同一级别的工具。能力类型不同:指针函数只能绑定到普通函数,std::function 可以装别分。
指针函数(例如 int(*)(double))只能指向签名完全匹配的非成员、非模板、非重载的普通函数。
按类型划分:普通函数(void f(int){} → std::function<;void>;<;/void>;)无捕获 lambda 表达式([](int x) { return x * 2; })无捕获 lambda 表达式([x](int y) { return x y; })指针函数成员(使用 std::bind 或 std::mem_fn)类似函数(struct Adder { int operator()(int a, int b) const { return a b; } };)内存和性能:指针函数零开销,std::function 有间接调用和存储开销。内部维护一个用于已分配可调用对象的小缓冲区(SSO)和/或栈,根据需要调用表函数或指针跳转函数,在运行时稍有延迟时打开。对于对性能敏感的路径(例如内部循环反馈),应优先使用指针函数或传递给可调用对象的参数模板。必剪工作室
Bilibili发布免费AI数字数字分身和视频创作工具183 查看详情不同场景使用:std::函数适合运行多种状态,指针函数适合编译,简单反馈
回调;lt;/:functiongt;作为类成员保存变量行为:std::functionlt;doublegt;transform_ = [](double x){return std::sin(x);};lt;/doublegt;跨模块传递反馈(无需暴露具体类型)指针函数比较适合底层、嵌入式或者极端控制的情况,比如信号处理(signal(SIGINT, handler_ptr))、C接口兼容、或者作为模板非类型参数(C 20 指针函数可以是 NTTP,std::function 不行)语法和约束:std::function更灵活,但最式式指定签名
指针函数声明紧耦合签名:int (*fp)(const char*) = amp;strlen;,见值时头多设计安全电影。
amp;strlen;lt;/intgt;,支持隐藏转换(只要可以调用且返回/参数可以转换),也支持nullptr初始化空状态,可用if (fp) fp(quot;helloquot;);安全通话。以上是C中国std::函数和指针函数有什么区别?(现代C最常用)的详细内容,更多请关注乐哥常识网其他相关文章! stringstream技作用_C字符串流类型转换与拼接 c 如何实现责任链模式 c 电视法字之责任链【例】 c 中国特化特化于偏特化_c模板特化 课解【失型】 C 如何使用std::unique_ptr管理资源?(流程图权门面)
