ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] # 简介 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象,也叫仿函数(functor),其实就是重载“()”操作符,使得类对象可以像函数那样调用。 注意: 1. 函数对象(仿函数)是一个类,不是一个函数。 2. 函数对象(仿函数)重载了”() ”操作符使得它可以像函数一样调用。 分类:假定某个类有一个重载的operator(),而且重载的operator()要求获取一个参数,我们就将这个类称为“一元仿函数”(unary functor);相反,如果重载的operator()要求获取两个参数,就将这个类称为“二元仿函数”(binary functor)。 函数对象的作用主要是什么? STL提供的算法往往都有两个版本,其中一个版本表现出最常用的某种运算,另一版本则允许用户通过template参数的形式来指定所要采取的策略。 # 函数对象和普通函数的区别 1. 函数对象有自己的状态 2. 普通函数没有类型,函数对象有类型 3. 函数对象比普通函数执行效率有可能更高(成员函数自动申请为内联函数) # 可以保存函数的调用状态 ~~~ struct HePrint { HePrint() { mCount = 0; }; void operator() (int val) { cout << val << endl; mCount++; } int mCount; }; void test02() { HePrint print; print(10); print(20); print(30); print(40); print(50); cout << print.mCount << endl; } ~~~