泛型编程笔记(re迭代)

来源:互联网 发布:淘宝代销阿里怎么刷 编辑:程序博客网 时间:2024/05/16 09:58
《c++ primer》p232
what 函数匹配:将函数调用与候选函数集合中的一个函数相关连的过程
函数匹配的3种可能:
a)找到最佳匹配,编译成功
b)找不到匹配,编译错误
c)when 当存在多个与实参匹配的函数,但没有一个是明显的最佳选择。则编译错误,因为具有二义性

why 要掌握函数匹配的步骤:
1)编译成功,但意想不到的匹配结果 2)编译失败,因为有二义性
when: 当多个函数的形参具有可通过隐式转换关联起来的类型,则函数匹配将相当灵活。在这种情况下,需要程序员充分掌握函数匹配的过程

重载函数的函数匹配的3个步骤:
1)确定候选函数(即,重载函数函数集合):what 候选函数:1)候选函数是与被调函数同名的函数 2)在调用点上,它的声明可见
2)在候选函数集合中,选择可行函数what 可行函数,即函数调用合法 1)函数形参个数与实参个数相同 2)每个实参类型必须与对应形参类型匹配,或者可被隐式转换为对应的形参类型 3)注意:要将默认函数考虑进去,被调用函数所用的实参可能比实际需要的少
3)在可行函数集合中,寻找最佳匹配(如果有的话):what 最佳匹配:实参类型与形参类型越接近则匹配越佳。所以,精确类型匹配要比需要转换的匹配好
4)含有多个形参的函数匹配的最佳匹配选择
编译器依次检查每一个实参来决定哪个或哪些函数匹配最佳。如果<<有且仅有一个>>函数满足下列条件,则匹配成功:
a)其每个实参的匹配都不劣于其他可行函数需要的匹配
b)至少有一个实参的匹配优于其他可行函数提供的匹配
如果在检查了所有实参后,仍找不到唯一最佳匹配函数,则该调用错误,因为具有二义性

《c++ primer》p234
实参类型转换:
为了确定最佳匹配,编译器将实参类型到相应形参类型的转换划分等级。转换等级以降序排列如下:
1)精确匹配what 精确匹配:实参与形参类型相同
2)通过类型提升(promotion)实现的匹配
3)通过标准转换(standard conversion)实现的匹配
4)通过类类型转换(class-type conversion)实现的匹配



《c++ primer》p537
what 模板实参推断:从函数实参确定模板实参类型和值的过程,叫做模板实参推断
编译器从函数实参的类型推断模板形参的类型

how: 编写模板定义,以及调用模板函数的注意事项:
1)多个类型形参的实参必须完全匹配
2)类型形参的实参的受限转换