1. 函数对象
如果一个类将()
运算符重载为成员函数,这个类就称为函数对象类,这个类的对象就是函数对象。函数对象是一个对象,
但是使用的形式看起来像函数调用,实际上也执行了函数调用,因而得名。
// 函数对象类 class Average { public: // 重载()运算符 double operator()(int a1, int a2, int a3) { return (double)(a1 + a2 + a3) / 3; } }; int main() { Average average; // 定义函数对象 cout << average(3, 2, 3); // 等价于 cout << average.operator(3, 2, 3); return 0; }
因为调用形式很像函数,所以称之为函数对象,重载为成员函数的时候,有多少个参数都可以。
2. lambda 表达式
lambda表达式的大致原理:每当你定义一个 lambda 表达式后,编译器会自动生成一个匿名类(这个类当然重载了()运算符),
我们称为闭包类型(closure type)。闭包意思就是封闭的函数。
Lambda 的语法形式如下:
[函数对象参数] (操作符重载函数参数) mutable 或 exception 声明 -> 返回值类型 {函数体}
[函数对象参数]:
未完待续。。。。。。