在C++中,​头文件(.h/.hpp)​​ 的主要作用是声明接口和共享代码,但如果不规范使用,会导致编译或链接错误。以下是详细总结:

一、头文件中可以做的事情

1.1 声明

  • 函数声明(无需inline)
// utils.h
void print(); // 声明
  • 类或者结构体声明
class MyClass {
public:void foo(); // 成员函数声明
};
  • 外部变量声明(用extern)
    如果不想用extern,可以使用C++17支持的内联全局变量
extern int globalVar; // 声明,定义在.cpp中

1.2 定义

  • 内联函数的定义
inline int add(int a, int b) { return a + b; } // 解决ODR问题
  • 类或者结构体成员函数定义
class Vector {
public:float x, y;float length() const { return std::sqrt(x*x + y*y); } // 隐式inline
};
  • 模板定义
template<typename T>
T max(T a, T b) { return (a > b) ? a : b; } // 模板必须完整定义在头文件
  • 常量表达式(C++11)
constexpr float PI = 3.1415926f; // 内部链接,每个编译单元独立副本
  • C++17内联变量
inline int globalConfig = 42; // 允许头文件中定义全局变量

1.3 其他

  • 宏定义​(谨慎使用)
  • 类型别名(using 或者 typedef)
  • 命名空间

二、头文件中不可以做的事情

1.1 普通函数定义

原因​:违反ODR规则,多个编译单元生成相同符号,链接冲突。

// utils.h
void print() { std::cout << "Hello"; } // ❌ 多个.cpp包含时链接错误

1.2 非内联全局变量定义

int globalVar = 42; // ❌ 多个.cpp包含时链接错误

1.3 静态全局变量

问题​:每个包含该头文件的.cpp会生成独立的 localVar,浪费内存。

static int localVar = 0; // ⚠️ 每个编译单元独立副本,可能不符合预期

1.4 复杂代码逻辑​

避免在头文件中写长函数或复杂逻辑​(如文件操作、动态内存分配)。
​原因​:增加编译时间,代码膨胀。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/89379.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/89379.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/89379.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯 iOA 零信任产品:安全远程访问的革新者

在当今数字化时代&#xff0c;企业面临着前所未有的挑战与机遇。随着远程办公、多分支运营以及云计算的广泛应用&#xff0c;传统的网络安全架构逐渐暴露出诸多不足。腾讯 iOA 零信任产品凭借其创新的安全理念和强大的功能特性&#xff0c;为企业提供了一种全新的解决方案&…

IP5219全集成Type-C移动电源SOC!2.1A快充+2.4A放电,极简BOM方案

产品概述&#xff1a; IP5219是一款集成升压转换器、锂电池充电管 理、电池电量指示和TYPE_C协议的多功能电源管 理SOC&#xff0c;为移动电源提供完整的电源解决方案。 IP5219的高集成度与丰富功能&#xff0c;使其在应用时 仅需极少的外围器件&#xff0c;并有效减小整体方案…

报道称CoreWeave洽谈收购Core Scientific,后者涨超30%

CoreWeave与数字基础设施公司Core Scientific的收购事宜可能在未来几周内敲定交易&#xff0c;前提是双方不出现重大分歧。消息传出后&#xff0c;Core Scientific股价一度暂停交易&#xff0c;随后恢复交易最终收涨逾32%。 AI云服务巨头CoreWeave正与数字基础设施公司Core Sc…

Qt5.15.2实现WebAssembly:2、设置emsdk目录

步骤1 打开QT&#xff0c;编辑&#xff0c;Preference&#xff08;首选项&#xff09;&#xff1a; 设备&#xff0c;WebAssembly&#xff0c;游览。 找到安装好的emscripten目录&#xff0c;选择。 稍等一会&#xff0c;QT会解析出相应的信息&#xff0c;再点确定。 图中…

SpringMVC--使用RESTFul实现用户管理系统

一、静态页面准备 1. user.css .header {background-color: #f2f2f2;padding: 20px;text-align: center; }ul {list-style-type: none;margin: 0;padding: 0;overflow: hidden;background-color: #333; }li {float: left; }li a {display: block;color: white;text-align: ce…

hello算法_C++_ 最差、最佳、平均时间复杂度

算法的时间效率往往不是固定的&#xff0c;而是与输入数据的分布有关。假设输入一个长度为 的数组 nums &#xff0c;其中 nums 由从 1 至 n 的数字组成&#xff0c;每个数字只出现一次&#xff1b;但元素顺序是随机打乱的&#xff0c;任务目标是返回元素 的索引。我们可以…

2024考研数一真题及答案

历年数一真题及答案下载直通车 已知函数 f ( x ) ∫ 0 x e cos ⁡ t d t f(x) \int_0^x e^{\cos t} dt f(x)∫0x​ecostdt&#xff0c; g ( x ) ∫ 0 sin ⁡ x e t 2 d t g(x) \int_0^{\sin x} e^{t^2} dt g(x)∫0sinx​et2dt&#xff0c;则&#xff08; &#xff09;。 A…

MIT 6.824学习心得(2) 浅谈多线程和RPC

上篇文章中我们简单介绍了分布式系统的设计思想以及简单性质&#xff0c;之后用一定篇幅简要介绍了MapReduce这个经典的分布式计算框架的大致工作原理&#xff0c;相信朋友们已经对此有了最基本的理解。在现实场景中&#xff0c;分布式系统的设计初衷是为了解决并发问题&#x…

opensuse/debian grub启动界面太模糊?

现代操作系统或者新电脑使用那么模糊的界面启动&#xff0c;虽然没有什么不良反应&#xff0c;但是多少有点看不过去&#xff0c;这是因为为了保证正常启动做出的适配。而我们可以对其分辨率进行选定。 1 您好&#xff0c;非常感谢您提供的截图。这张图片非常关键&#xff0c…

zookeeper Curator(5):集群架构和集群搭建

文章目录 一、集群架构&#xff1a;Leader-Follower 模式二、核心机制&#xff1a;ZAB 协议三、Leader 选举机制四、集群部署要点五、优势与挑战 Zookeeper 集群是一个由多个 Zookeeper 服务实例组成的分布式协调服务系统&#xff0c; 通过奇数个节点&#xff08;通常 3、5、7…

道可云人工智能每日资讯|浦东启动人工智能创新应用竞赛

道可云人工智能&元宇宙每日简报&#xff08;2025年7月1日&#xff09;讯&#xff0c;今日人工智能&元宇宙新鲜事有&#xff1a; 江城模境工信部人工智能大模型公共服务平台&#xff08;武汉&#xff09;上线运行 2025年6月27日&#xff0c;光谷人工智能创新大会在湖北…

Python元组的遍历

一、前言 在 Python 中&#xff0c;元组&#xff08;tuple&#xff09; 是一种非常基础且常用的数据结构&#xff0c;它与列表类似&#xff0c;都是有序的序列&#xff0c;但不同的是&#xff0c;元组是不可变的&#xff08;immutable&#xff09;&#xff0c;一旦创建就不能修…

矩阵的条件数(Condition Number of a Matrix)

文章目录 矩阵的条件数&#xff08;Condition Number of a Matrix&#xff09;&#x1f4cc; 定义&#x1f9ee; 常见形式&#xff1a;2-范数下的条件数&#x1f50d; 条件数的意义&#x1f9e0; 实际意义举例&#x1f4bb; Python 示例&#xff08;NumPy&#xff09;&#x1f…

1 Studying《Computer Architecture A Quantitative Approach》1-4

目录 Preface 1 Fundamentals of Quantitative Design and Analysis 1.1 Introduction 1.2 Classes of Computers 1.3 Defining Computer Architecture 1.4 Trends in Technology 1.5 Trends in Power and Energy in Integrated Circuits 1.6 Trends in Cost 1.7 Depe…

Reactor Hot Versus Cold

这段文字详细解释了 Reactor 中 热发布者&#xff08;Hot Publisher&#xff09; 和 冷发布者&#xff08;Cold Publisher&#xff09; 的区别&#xff0c;并通过示例展示了它们的行为差异。以下是对其含义的总结和解释&#xff1a; 1. 冷发布者&#xff08;Cold Publisher&…

OpenCV CUDA模块设备层-----逐通道最小值比较函数min()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 OpenCV 的CUDA并行计算模块&#xff08;cv::cudev&#xff09;中的一个设备端内联函数&#xff0c;用于在CUDA核函数中对两个uchar2类型像素值进…

proteus实现stm32按键控制LED灯流水灯方向

一、新建工程 1、工程命名 2、选择工程存储位置 3、默认下一步 4、默认下一步 5、选择没有固件项目&#xff0c;下一步 二、器件放置并连线 1、点击左边工具栏中运放的形状的符号 2、再点击‘P’&#xff0c;搜索器件 3、搜索器件并放置连线 按键控制LED需要的器件有&#…

华为云Flexus+DeepSeek征文 | 让运维更智能:Chaterm AI终端工具与华为云ModelArts Studio深度集成指南

华为云FlexusDeepSeek征文 | 让运维更智能&#xff1a;Chaterm AI终端工具与华为云ModelArts Studio深度集成指南 引言一、ModelArts Studio平台介绍华为云ModelArts Studio简介ModelArts Studio主要特点 二、Chaterm介绍Chaterm简介Chaterm主要特点 三、安装Chaterm工具下载C…

湖北理元理律师事务所债务解法:从法律技术到生活重建

数据透视&#xff1a; 2023年武汉法院受理债务纠纷案11.4万件&#xff0c;其中37%因不当还款规划导致债务雪球效应。 一、债务危机的法律归因 通过分析1200例债务咨询案例&#xff0c;发现三大共性法律认知盲区&#xff1a; 担保责任误判 某企业主为朋友担保200万&#xff0…

小程序学习笔记:加载效果、上拉加载与节流处理

在微信小程序开发过程中&#xff0c;优化用户体验是非常重要的一环。今天我们就来分享如何在小程序中实现加载提示效果、上拉触底加载下一页数据以及对上拉触底事件进行节流处理&#xff0c;让你的小程序更加流畅和高效。 一、添加 loading 提示效果 在小程序中&#xff0c;当…