5

模板函数编译原理

 3 years ago
source link: http://www.cnblogs.com/YXBLOGXYY/p/14226083.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一--- 导读

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

二---在linux中进行实际操作

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

byMNbaj.png!mobile

输入如下命令进行编译

ArmEVja.png!mobile

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

QrQria.png!mobile

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

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

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

四---注意事项

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK