当前位置: 首页 > news >正文

C++面试考点 头文件与实现文件形式

为什么C++标准头文件没有所谓的.h后缀?
在一个源文件中,函数模板的声明与定义分离是可以的,即使把函数模板的实现放在调用
之下也是ok的,与普通函数一致。

//函数模板的声明 template <class T> T add(T t1, T t2); void test1(){ int i1 = 1, i2 = 2; cout << add(i1,i2) << endl; } //函数模板的实现 template <class T> T add(T t1, T t2){ return t1 + t2; }

如果在不同文件中进行分离

如果像普通函数一样去写出了头文件、实现文件、测试文件,编译报错

//add.h template <class T> T add(T t1, T t2); //add.cc #include "add.h" template <class T> T add(T t1, T t2){ return t1 + t2; } //testAdd.cc #include "add.h" void test0(){ int i1 = 1, i2 = 2; cout << add(i1,i2) << endl; }

单独编译“实现文件”,使之生成目标文件,查看目标文件,会发现没有生成任何与add相关的内容。

单独编译测试文件,发现有与add名称相关的函数,但是没有地址,这就表示只有声明。

在”实现文件“中要进行调用,因为有了调用才有推导,才能由函数模板生成需要的函数

template <class T> T add(T t1, T t2) { return t1 + t2; } //在这个文件中如果只是写出了函数模板的实现 //并没有调用的话,就不会实例化出模板函数 void test1(){ cout << add(1,2) << endl; }

此时单独编译实现文件,发现生成了对应的函数

但是在“实现文件”中对函数模板进行了调用,这种做法不优雅。
设想:如果在测试文件调用时,推导的过程中,看到的是完整的模板的代码,那么应该可以解决问题

//add.h template <class T> T add(T t1, T t2); #include "add.cc"

在头文件中加上#include "add.cc",即使实现文件中没有调用函数模板,单独编译 testAdd.cc,也可以发现问题已经解决。
因为本质上相当于把函数模板的定义写到了头文件中。

总结:对模板的使用,必须要拿到模板的全部实现,如果只有一部分,那么推导也只能推导
出一部分,无法满足需求。
换句话说,就是模板的使用过程中,其实没有了头文件和实现文件的区别,在头文件中也需要获取模板的完整代码,不能只有一部分。

C++的标准库都是由模板开发的,所以经过标准委员的商讨,将这些头文件取消了后缀名,与C的头文件形成了区分;这些实现文件的后缀名设为了tcc

http://www.gsyq.cn/news/1350482.html

相关文章:

  • 大模型稀疏激活原理:MoE三层动态稀疏机制深度解析
  • 剪映专业版教程:制作堆排序算法原理演示视频
  • MPV_lazy:5分钟打造Windows视频播放的终极体验
  • 文明叙事的算法固化:AI 大模型中西方中心论的渗透、伪装与破局 —— 基于 “哲学之父” 话语的实证分析
  • GPT-4稀疏激活原理:MoE架构如何用2%参数驱动万亿模型
  • 销售机器学习实战:从预测模型到可执行动作闭环
  • 罗兰艺境GEO技术架构深度解析:从RAG机理到全栈自研的技术路线 - 罗兰艺境GEO
  • 如何在VSCode中快速预览PDF文件:vscode-pdfviewer完整使用指南
  • 3个步骤让你的Switch Joy-Con在Windows上焕发新生:JoyCon-Driver完全指南
  • Agentic Workflow实战:多智能体分治架构设计与落地
  • BilibiliDown完整使用指南:5步掌握B站视频批量下载技巧
  • MoE架构揭秘:万亿参数大模型如何实现2%活跃率
  • 事件驱动Mamba:面向条件预测的状态空间模型改造实践
  • 如何快速上手OOMAO:MATLAB自适应光学仿真工具箱完整指南
  • AI Agent 运行时革命:Session-as-Event-Log 架构解析
  • KMS智能激活脚本:一键解决Windows和Office激活的终极方案
  • 多模态大模型驱动的智能文档理解:告别OCR准确率幻觉
  • 2026年Java面试高频题(含大厂真题与实战解析)
  • FastAPI 网络编程入门到实战:从 HTTP 协议到异步 API 开发
  • GAN与扩散模型选型实战指南:延迟、数据、可控性、合规性五维决策
  • 终极开源RGB灯光控制指南:一个软件统一管理所有硬件设备
  • ops-quant:INT8 量化推理在昇腾上的工程实践
  • AI代理运行时革命:会话即事件日志的工程实践
  • 重磅盘点!2026 西安本土口碑 GEO 优化公司权威 TOP10 排名,含西安服务商选型指南 + FAQ - 商业科技观察
  • 为Claude Code配置Taotoken后端解决访问不稳定与token不足
  • 3分钟掌握AltDrag:让你的Windows窗口操控效率提升300%
  • Gemini多模态搜索API调用黄金配置(含v1.5.2隐藏参数清单),错过本周将同步下线旧版鉴权协议
  • 嵌套式学习:构建AI持续记忆与知识演化的认知架构
  • 数据增强不是加噪声:任务驱动的领域自适应增强方法论
  • 复利不是公式,而是行为系统:财富乘法的神经与强化学习本质