模板编译与实例化浅析

本文深入探讨C++模板的编译过程,包括预处理、编译、汇编和链接。模板并不在定义时生成代码,而是在实例化时才产生。编译错误通常在模板实例化时显现,影响包括语法错误、类型匹配等问题。C++11通过显示实例化提供优化,以减少大文件系统的开销。
摘要由CSDN通过智能技术生成

编译整体过程(针对C/C++),

1.      预处理:包含宏替换,条件编译,include导入文件

2.      编译:  包含词法分析,语法分析,语义分析,中间代码生成与优化,生成汇编文件

3.      汇编:  将汇编文件编译成2进制的机器码

4.      链接:  将目标文件与外部符号进行链接,得到一个二进制可执行文件

 

当编译器遇到一个模板定义时,它并不生成代码。只有我们实例化出模板的一个特定版本时,编译器才会生成代码

一般情况,当我们调用一个函数时,编译器只需要掌握函数的声明。当我们使用一个类类型的对象时,类的定义必须可用,但是成员函数的定义不一定已经出现。因此,我们把类的定义和函数声明放在头文件,普通函数和类的成员函数放在源文件中。

但是对于模板来说,为了生成一个实例化版本,编译器需要掌握函数模板或类模板成员函数的定义,因此,我们也将模板的定义放在头文件里面。

 

模板编译错误时机

模板由于在实例化时才生成代码,所以这会影响其编译错误的时机。

一般来说分为三个阶段,

第一,  编译模板本身,这里主要是语法错误&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值