c++ 函数模板

c++ obj文件

  • obj文件就是目标文件,是源程序经过编译程序编译后生成的
  • 不能直接执行,需要连接程序连接后才能生成可执行文件,这样就能执行
  • 一般由机器代码组成,但也可以是自己定义的一些伪指令代码(需有专门的解释程序对其进行解释执行)

连接程序

  • 把目标代码和它所使用的库文件连接的程序

obj文件与exe文件的区别

  • 编译:当前源代码编译成二进制目标文件(obj文件)
  • 链接(link): 将生成的.obj文件与库文件.lib等文件链接,生成可执行文件(.exe文件)
  • project中每个cpp经编译成为obj(object)文件,所有obj文件和资源问价经连接(link)成为可执行文件,obj文件可称为目标文件或中间文件。obj文件只给出了程序的相对地址,而exe是绝对地址

现代编译器的主要工作流程

源程序(source code)→ 预处理器(preprocessor)→ 编译器(compiler)→ 汇编程序(assembler)→ 目标程序(object code)→ 连接器(链接器,Linker)→ 可执行程序(executables)

函数模板的声明和实现

  • 函数模板的声明和实现一般都放在.h文件中
  • 模板是在需要的时候,才会去生成一个具体的实例化。模板本身是不会被执行的(模板本身不产生汇编指令),是模板生成的具体实例化才产生指令

模板的实现为什么放在.h中

  • 编译器一次只能处理一个单元,即一次处理一个cpp文件,实例化时需要看到该模块的完整定义,若头文件中只有声明,没有定义,编译器就无法实例化该模块,最终会导致链接(link)错误,所以放在头文件中
  • 若你坚持不想放在.h中,试试include "xxx.cpp"这种奇葩的做法也是可以的
(完)