C++ 模板技术和STL实战开发(1)——模板机制剖析

模板

模板把函数或类要处理的数据类型参数化,表现为参数的多态性,成为类属

个人思考:模板也是计算机的很重要的思想“抽象思想”的体现

模板解决的是逻辑结构相同,但具体数据元素类型不同的数据

参数化编程:

参数化编程有效地降低了开发成本,减少了出错概率,这也是模板思想的起源

深入剖析:

问题1:第12行和第15行调的是同一个函数吗?

函数模板与模板函数的辨析

   函数模板:就是定义的一个带有参数类型的函数

   模板函数:

      编译器会把第12行换成 myswap<int>(a,b) ,第15行换成 myswap<double>(c,d) ,而把这两个就叫做模板函数

所以在这里生成了不同的模板函数,第12行和第15行调的不是同一个函数

问题2:通过函数模板生成的模板函数会不会引起和函数重载的冲突?

解释:函数模板不提供隐式类型转换,因此不许严格遵循T的类型定义

所以类型严格匹配是模板函数调用的先决条件

当普通函数和函数模板都符合调用规则的时候,优先使用普通函数;

因为普通函数在编译期间就生成了函数体

而模板函数需要在调用时,编译器才会编译

在这种冲突的情况下,可以显式地调用模板函数

总结:

编译器在处理函数模板的时候,能够生成任意类型的函数

根据调用的时机产生不同的函数:编译器会堆函数模板进行二次编译,这是参数化编程的基础,也是成为编译时多态的由来

在声明的地方对模板本身进行编译,在调用的时候对参数化以后的具体调用进行编译

hpp文件的由来(明日任务)

name mangling的编译原理(明日任务)

猜你喜欢

转载自blog.csdn.net/qq_34805255/article/details/84311754