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

【C++】前向声明(Forward Declaration)

前向声明(Forward Declaration)是在C、C++等编程语言中,在使用一个类、结构体或其他类型之前,仅声明其名称而不给出完整定义的一种方式。

作用

  1. 减少编译依赖:当一个源文件包含大量头文件时,编译时间会显著增加。使用前向声明,只需让编译器知道某个类型的名字存在,而不必包含其完整定义的头文件。例如在代码中如果仅需要使用指针或引用指向某个类,而不需要访问该类的成员,就可以用前向声明,避免包含该类完整定义的头文件,从而减少编译时需要处理的代码量,加快编译速度。
  2. 避免头文件循环包含:在多个类相互引用时,容易出现头文件循环包含问题(例如A类头文件包含B类头文件,B类头文件又包含A类头文件),这会导致编译错误。前向声明可以打破这种循环依赖,在不需要完整类定义的地方,使用前向声明来表示类的存在,解决循环包含问题。

示例

在C++中:

// 前置声明类B
class B; 

class A {
public:
    // 这里仅使用B*指针,不需要B的完整定义
    void doSomething(B* b); 
}; 

// 类B的完整定义
class B {
public:
    void someFunction();
}; 

void A::doSomething(B* b) {
    // 这里只是简单使用指针,没有访问B的成员
    // 如果要访问B的成员,就需要包含B的完整定义
} 

在上述代码中,class B; 就是前向声明,在定义 A 类时,不需要包含 B 类的完整定义,仅告知编译器 B 类是存在的,就可以使用指向 B 类对象的指针。


QT中的例子

比如在QT的一个头文件中,我这里不想把include写到头文件中,所以这里用到了前向声明,然后再.C文件中再引用头文件:
在这里插入图片描述
在这里插入图片描述

相关文章:

  • Interaction Toolkit 新版模拟器快捷键
  • [NOIP 2003 普及组] 栈 Java
  • OSM路网简化文档+实操视频讲解(道路中心线提取、拓扑检查,学术论文处理方式)11
  • 基于kitti格式纯点云数据的centerpoint目标检测模型的转换(.pth转.onnx和.plan,更新中)
  • SpringBoot日志
  • 代码训练day25回溯p4
  • 嵌入式程序设计英语
  • java: 需要‘)‘ java: 未结束的字符串文字,java: 不是语句,怎么解决
  • C++ (初始C++,命名空间,引用,函数增强)
  • Java-分布式锁tryLock(0, TimeUnit.SECONDS)中0的含义
  • 大模型中提到的分词器是什么
  • C++算法优化实战:破解性能瓶颈,提升程序效率
  • 【AI】使用 Hugging Face Transformers 进行文本摘要实现
  • (2)VTK C++开发示例 --- 绘制多面锥体
  • 预防WIFI攻击,保证网络安全
  • 《植物大战僵尸融合版v2.4.1》,塔防与创新融合的完美碰撞
  • RHCE第五章:NFS服务器
  • 前端操作document的小方法,主要功能-获取当前页面全部的a标签页,并根据链接中必要的字段进行判断,然后把这些链接放入iframe去打开
  • 【Windows】系统安全移除移动存储设备指南:告别「设备被占用」弹窗
  • UE5蓝图实现打开和关闭界面、退出
  • A股低开高走,震荡收涨:两市成交10414亿元,4360股收涨
  • 分离19年后:陈杨梅首度露面,父亲亲手喂棉花糖给女儿吃
  • 北京理工大学解除宫某聘用关系,该教授此前被指骚扰猥亵学生
  • 接续驰援,中国政府援缅卫生防疫队出发赴缅
  • 杭州:调整个人购买家庭住房享受契税优惠住房套数查询规则
  • 广西东兰官方通报“村民求雨耕种”:摆拍,恶意炒作