文章目录
函数对象(伪函数)
- 有运算符重载的对象
- xx元函数对象:看operator()函数有几个形参。
函数对象的应用
只应用在泛型算法之中,改变泛型算法的行为,能够内联,节省函数的调用开销。
C++ STL的函数对象 (greater less greater_equal)
使用实例
库里面全是二元函数对象,二元函数对象+绑定器可以得到一元函数对象
绑定器(绑定其中一个参数)将二元的函数转换成一元的(因为库里只有二元的)
bind1st:需要两个参数:要转换的 函数对象 和一个值 x。简单理解,bind1st 把 x 作为函数对象的左值
bind2nd :把 x 作为 函数对象 的右值。
运行结果:
Lamba表达式(函数对象)就是()的重载,比绑定器好用
lambda函数能够捕获lambda函数外的具有自动存储时期的变量。函数体与这些变量的集合合起来叫闭包。
[] 不截取任何变量
[&] 截取外部作用域中所有变量,并作为引用在函数体中使用
[=] 截取外部作用域中所有变量,并拷贝一份在函数体中使用
[=, &foo] 截取外部作用域中所有变量,并拷贝一份在函数体中使用,但是对foo变量使用引用
[bar] 截取bar变量并且拷贝一份在函数体重使用,同时不截取其他变量
[x, &y] x按值传递,y按引用传递
[this] 截取当前类中的this指针。如果已经使用了&或者=就默认添加此选项