当前位置: 首页 > 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蓝图实现打开和关闭界面、退出
  • 美国第一季度经济环比萎缩0.3%
  • 山西太原一居民小区发生爆炸,应急管理部派工作组赴现场
  • 制定出台民营经济促进法有何重大意义?全国人大常委会法工委回应
  • 何立峰出席驻沪中央金融机构支持上海建设国际金融中心座谈会并讲话
  • 郭继孚被撤销全国政协委员资格,此前为北京交通发展研究院长
  • 在岸、离岸人民币对美元汇率双双升破7.26关口