C++前置声明
前言#
在项目代码的一个头文件中看到一个空类,很奇怪。问了前辈,前辈让我去查前置声明。
了解什么是前置声明#
C++ Trick:什么时候需要前置声明?--这篇文章作为初识还是不错的
假设声明都是在头文件中。
在当前头文件中前置声明了一个类名,然后在自己的类里面声明了一个私有成员变量指针,其类型是前置申明的类。
class B;
class A
{
...
private:
B *b;
};
网上也有说前置声明类只可以做返回类型、形参、指针和引用。
也没深究,但是指针和引用一定是可以的,因为引用基于指针,而指针类型的前置声明在公司的项目中已经使用那么久了(笑)。
前置声明的作用#
网络上众说纷纭,有的说可以有效的减少需要包含的头文件的数量,有的说可以节省编译的时间。
问了前辈,让我自己根据前置声明的代码结构思考,但是也指了一个方向QT的d_ptr。
前置声明的结构#
-
我们可以看到它首先在前面声明了一个类,虽然没有在目前的代码中实现,它的作用是告诉编译器我有这个东西,你可以继续编译。当然在链接的过程中需要在库中存在这样一个类。
-
这样一个类的指针是一个私有变量,意味着只要没有定义友元,就只能在当前类中访问这个指针指向的类。
具体的实例请参考前面提到的QT的d_ptr,里面比较详细的介绍了前置声明的具体作用。
在一个大型工程中,如果代码涉密,其他部门则会给你提供的一些封装库,这个库的接口就是前置声明的类名(我是这样理解的),上文的class A是一个公开类,调用的私有类class B就存在封装库中。而当分装库修改或更新时,不用再去编译主体程序,只需要重新链接库就行了。
QT的d_ptr中还简单的提及了C++是通过内存的偏移来访问数据的,如果不是通过指针的形式访问新的分装库,说不定就会访问到错误的数据导致程序崩溃。
作者:tranErmu
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!