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

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

重点

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

  2. 编译器从函数模板通过具体类型来产生不同的函数

  3. 编译器会对函数模板进行两次编译

    (1)在声明的位置对模板代码进行编译

    (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);        
    
}

实际编译器处理后的代码:

#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. 编译器内部帮我们实现了大量重复操作,让程序员节省了大量代码

原文链接: https://www.cnblogs.com/wuhongbin/p/14048321.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/205455

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午10:14
下一篇 2023年2月12日 下午10:14

相关推荐