@ltlovezh
2020-04-08T13:43:35.000000Z
字数 859
阅读 1178
C++
可调用对象:对于一个对象或者表达式,如果可以对其使用调用运算符(()),则称为可调用对象。即若e是一个可调用对象,那么可以通过e(args)进行调用,其中args是参数列表。
可调用对象:
operator())的类相同函数签名(相同的参数列表和返回类型)的不同可调用对象可以用一个std::function类型表示。
例如:
// 函数int add(int a, int b) {return a + b;}// 重载了函数调用符的函数对象class Subtract {public:// 求差int operator()(int value1, int value2) {return value1 - value2;}};// 不同类型的函数对象,具有相同的std::function类型std::function<int(int, int)> func = add;func = Subtract();func = [](int a, int b) { return a * b; };
operator())的类如果类重载了函数调用运算符(operator()),则该类的对象称作函数对象,我们可以像使用函数一样使用函数对象。
class FunctionObject {public:// 取绝对值int operator()(int value) {return value >= 0 ? value : -value;}// 求和int operator()(int value1, int value2) {return value1 + value2;}};int main() {FunctionObject functionObject;// 调用函数对象,输出为1std::cout << functionObject(-1) << std::endl;// 调用函数对象,输出为2std::cout << functionObject(1, 1) << std::endl;}
lambda表达式会被编译器编译成函数对象。
