重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象。[1]

一个类对象,表现出一个函数的特征,就是通过“对象名+(参数列表)”的方式使用一个

类对象,如果没有上下文,完全可以把它看作一个函数对待。这是通过重载类的

operator()来实现的。比如,对于调用

int s = sum(1, 1);

你可能把它看作一个函数调用:

int sum(int i, int j) { return i+j; }

但很可能它是一个函数对象:

class Sum {
public:
int operator()(int i, int j) { return i+j; }
};
Sum sum;

而大多数情况是

template <class T>
class Sum {
public:
T operator()(T i, T j) { return i+j; }
};
Sum <int> sum;

“在标准库中,函数对象被广泛地使用以获得弹性”,标准库中的很多算法都可以

使用函数对象或者函数来作为自定的回调行为;