模板函数编译原理
一--- 导读
首先我们需要搞清楚这样一个实际生活中的例子,当工厂里面要生产一把刀,需要将滚烫的铁水倒入到模具里面,然后再经过锤炼就得到一把锋利的刀。函数模板和模板函数正是这样的一组关系,函数模板相当于做刀的模具,而模板函数就是我们得到的刀。
二---在linux中进行实际操作
首先我们先写一个hello.cpp文件,里面放一个函数模板和三组调用
输入如下命令进行编译
编译完成我们再看一下hello.s文件
虽然有3个MyAdd函数,但细心的同学就会发现,第一个和第三个是同名的,都是IiET-的形式,这是因为第一此调用和第三次调用参数的类型是相同的,都为int类型,编译器在编译第一个调用的时候就已经生成了int类型的模板函数。
三---模板函数诞生编译器编译次数
编译器一开始会在模板声明的地方先编译函数模板,根据写编译器的程序员们指定的规则,生成相应的函数模板代码。之后若编译器发现有 调用,又会在调用的地方编译一次,生成相应类型的调用代码。故而一次调用编译器需要编译两次。
四---注意事项
编译器并不是把函数模板直接拿来用,函数模板是不能直接使用的,编译器调用的是以函数模板为型生成的模板函数。这里只要看了导读所说的内容就应该很容易理解。
posted on 2021-01-03 17:05 Love&Share 阅读(564) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~