模板
模板把函数或类要处理的数据类型参数化,表现为参数的多态性,成为类属
个人思考:模板也是计算机的很重要的思想“抽象思想”的体现
模板解决的是逻辑结构相同,但具体数据元素类型不同的数据
参数化编程:
参数化编程有效地降低了开发成本,减少了出错概率,这也是模板思想的起源
深入剖析:
问题1:第12行和第15行调的是同一个函数吗?
函数模板与模板函数的辨析
函数模板:就是定义的一个带有参数类型的函数
模板函数:
编译器会把第12行换成 myswap<int>(a,b) ,第15行换成 myswap<double>(c,d) ,而把这两个就叫做模板函数
所以在这里生成了不同的模板函数,第12行和第15行调的不是同一个函数
问题2:通过函数模板生成的模板函数会不会引起和函数重载的冲突?
解释:函数模板不提供隐式类型转换,因此不许严格遵循T的类型定义
所以类型严格匹配是模板函数调用的先决条件
当普通函数和函数模板都符合调用规则的时候,优先使用普通函数;
因为普通函数在编译期间就生成了函数体
而模板函数需要在调用时,编译器才会编译
在这种冲突的情况下,可以显式地调用模板函数
总结:
编译器在处理函数模板的时候,能够生成任意类型的函数
根据调用的时机产生不同的函数:编译器会堆函数模板进行二次编译,这是参数化编程的基础,也是成为编译时多态的由来
在声明的地方对模板本身进行编译,在调用的时候对参数化以后的具体调用进行编译