Home Article C++可调用对象

C++可调用对象

Release time:2020-08-04 13:33:42 Author:一蓑烟雨 Reading volume:405
可调用对象

定义:通过函数调用符操作的对象称为可调用对象
分类:
1.普通函数(常用)
2.类成员函数/静态函数
3.函数指针
4.类的成员函数指针
5.函数对象(仿函数)(常用)
6.lambda表达式(常用)
7.std::function 包装器
8.std::bind适配器

lambda表达式:
本质上是匿名函数(解决开发效率的问题)
语法:[捕获列表] (函数形参)-> 返回值{函数体};
1.返回值类型可以忽略,编辑器可以推导
2.函数形参:有参时可以无参,也可以有默认值
3.C++14以后的语法可以使用auto类型推导lambda表达式
4.捕获列表[] [&] [=] [&,变量名] [=,变量名] [this]

[]:不捕获局部变量,static除外
[&]:捕获外部所有变量,按照引用的方式访问(既可以使用,又可以修改)
[=]:捕获外部所有变量,按照值访问(只能访问,不能修改)
[&,变量名]:除此变量外的所有变量都可以修改
[=,变量名]:除此变量外的所有变量都不可以修改

注意事项:
1.不能发生引用悬挂
2.this陷阱
3.尽量避免使用复杂的lambda
4.lambda里避免有全局变量或静态变量或者比当前类生命周期更长的变量

std::function 包装器
本质上是一个类模板,用于包装可调用对象。可以容纳除了类成员(函数)指针以外的所有可调用对象
作用:
可以用统一的方式来保存或者传递可调用对象。
意义:
1.实现了一套类型消除机制,可以用统一的方式处理不同类型的可调用对象。
2.进一步深化以数据为中心(封装)的面向对象思想(函数对象化);

std::bind 适配器
将不可用的减少或添加一些内容变成可用的;
函数适配器:
将多元函数变为(n-1)元函数;
类适配器:
将类的功能具体化
可变参数
实现原理:
函数参数在栈上面保存并且是连续的。
注意事项:
必须有第一个参数并且第一个参数有特殊作用(帮助寻址后面的形参);

  
I want to comment

Search

classification

Leave a message
http://blog.rjxj513.com/
User login
You have not written any reviews yet!
You have commented!
Can only praise once!
You have a collection!