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

出处:https://www.cnblogs.com/tranErmu/p/qzsm.html

posted @   白水二木  阅读(136)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu