关于“类”的“前置声明”
“前置声明”这个东西,应该不陌生,很多函数在使用之前都要进行一个前置声明。
今天想说的,实际上是在Qt的学习过程中,对于“类”的前置声明。
这个东西实际上还是挺常用的,而且作用也很大(这个还是我这两天才知道的),这个常用其实指的是对于C++大佬来说比较常用,像我这种菜鸡,要不是领导推荐让用,我都不知道还有这个玩意,由此可见我是有多菜了。
废话不多说,说一下它的优点:
主要优点体现在“效率”上,这个效率主要包括两个部分:
1.编译的时候:因为采用的是类的前置声明,因此在.h文件中不需要包含所需文件的头文件,只需要使用class进行声明一下即可,如#include ->class QLabel, 在.cpp中添加完整的头文件。
2.所包含的源代码发生更改的时候:这个才是它最主要的作用,就是比如说某一天,QLabel的源文件发生了更改,那么对于所有包含着“QLabel”的文件在编译的时候都得重新编译一遍,这样会极大地降低效率。而如果采用了前置声明,那么在发生更改的时候,需要变化的仅仅是.cpp文件,这样效率就高多了。
虽然类的前置声明很好用,但是并不意味着所有的都可以使用前置声明,其实能利用类的前置声明的,目前我只发现一种,那就是“指针”。
如QLabel *m_pLbl;
指针能够采用类的前置声明的原因是因为,无论是何种类型的指针,它的大小永远都是4个字节(32位),那么在头文件的预处理过程中,分配四个字节就可以了,不需要考虑它的具体实现。
如果不是指针,如QLabel m_lbl1,则不能使用类的前置声明,必须采用包含完整的头文件。
在一个头文件中再包含一个那么大的头文件着实不是一种好的编程风格,尤其是对于比较大的工程项目更是如此。
总结:使用的前提就是“指针”,优点在于“效率高”。