面试题答案
一键面试1. C++函数对象定义
C++函数对象(Function Object),也叫仿函数(Functor),是一个重载了()
运算符的类或结构体对象。它使得对象的行为类似于函数调用,可像普通函数一样被调用。
2. 示例代码
#include <iostream>
// 定义函数对象类
class Add {
public:
int operator()(int a, int b) const {
return a + b;
}
};
int main() {
Add addObj;
int result = addObj(3, 5);
std::cout << "The result of addition is: " << result << std::endl;
return 0;
}
3. 在STL算法中的优势
- 状态存储:函数对象可以在类中定义成员变量,用于存储状态信息。而普通函数无法直接存储状态。例如,在使用
std::for_each
对容器元素进行处理时,函数对象可以记录处理的次数等状态,普通函数难以做到。 - 类型可定制:函数对象是一个类型,可以作为模板参数。例如在
std::sort
中,可使用自定义的函数对象类型来定义比较规则,这样比传递普通函数指针在类型推导和灵活性上更有优势。 - 代码可读性与封装性:函数对象将操作和相关数据封装在一起,增强了代码的可读性和维护性。而普通函数可能需要通过全局变量或参数传递来管理相关数据,相对来说更易出错且逻辑不清晰。