C++ 函数模板实现原理剖析

C++ 函数模板实现机制原理剖析

重点

  1. 编译器并不是把函数模板处理成能够处理任意类的函数

  2. 编译器从函数模板通过具体类型来产生不同的函数文章来源地址https://www.yii666.com/article/754365.html文章地址https://www.yii666.com/article/754365.html

  3. 编译器会对函数模板进行两次编译网址:yii666.com

    (1)在声明的位置对模板代码进行编译网址:yii666.com<

    (2)在调用的位置对参数替换后的代码进行编译

示例

自己的代码:

#include<iostream>
using namespace std; template <typename T> //声明位置,第一次编译
T myswap(T a, T b)
{
cout << "调用模板函数!!!" << endl;
return 0;
} int main()
{
myswap(1,1); //调用位置,第二次编译
myswap('a','b');
myswap(2.0,3.0); }

实际编译器处理后的代码:文章来源地址:https://www.yii666.com/article/754365.html

#include<iostream>
using namespace std; int myswap(int a, int b)
{
cout << "调用模板函数!!!" << endl;
return 0;
} double myswap(double a, double b)
{
cout << "调用模板函数!!!" << endl;
return 0;
} char myswap(char a, char b)
{
cout << "调用模板函数!!!" << endl;
return 0;
} int main()
{
myswap(1,1);
myswap('a','b');
myswap(2.0,3.0); }

理解

  1. 函数模板不是说只 一个函数 就可以实现对任意数据类型的操作,而是通过两次编译生成了满足我们调用需求所需要的所有代码。

  2. 函数模板使用后,编译器并不会一开始就生成所有处理任何类型的函数,而是通过实际的函数调用来生成。比如调用函数时,需要处理int型数据,就生成处理int型数据的函数,而没有用double型数据,就不会生成处理double型数据的函数。

  3. 编译器内部帮我们实现了大量重复操作,让程序员节省了大量代码

版权声明:本文内容来源于网络,版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。文本页已经标记具体来源原文地址,请点击原文查看来源网址,站内文章以及资源内容站长不承诺其正确性,如侵犯了您的权益,请联系站长如有侵权请联系站长,将立刻删除

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信图片_20190322181744_03.jpg

微信扫一扫打赏

请作者喝杯咖啡吧~

支付宝扫一扫领取红包,优惠每天领

二维码1

zhifubaohongbao.png

二维码2

zhifubaohongbao2.png