模板函数编译原理

一— 导读

   首先我们需要搞清楚这样一个实际生活中的例子,当工厂里面要生产一把刀,需要将滚烫的铁水倒入到模具里面,然后再经过锤炼就得到一把锋利的刀。函数模板和模板函数正是这样的一组关系,函数模板相当于做刀的模具,而模板函数就是我们得到的刀。

 

二—在linux中进行实际操作

首先我们先写一个hello.cpp文件,里面放一个函数模板和三组调用

输入如下命令进行编译

编译完成我们再看一下hello.s文件

虽然有3个MyAdd函数,但细心的同学就会发现,第一个和第三个是同名的,都是IiET-的形式,这是因为第一此调用和第三次调用参数的类型是相同的,都为int类型,编译器在编译第一个调用的时候就已经生成了int类型的模板函数。

 

三—模板函数诞生编译器编译次数

  编译器一开始会在模板声明的地方先编译函数模板,根据写编译器的程序员们指定的规则,生成相应的函数模板代码。之后若编译器发现有 调用,又会在调用的地方编译一次,生成相应类型的调用代码。故而一次调用编译器需要编译两次

 

四—注意事项

  编译器并不是把函数模板直接拿来用,函数模板是不能直接使用的,编译器调用的是以函数模板为型生成的模板函数。这里只要看了导读所说的内容就应该很容易理解。

 

Tags: