c++ 函数模板

举报
ruochen 发表于 2021/05/21 23:56:45 2021/05/21
【摘要】 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"这种奇葩的做法也是可以的
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。