“前置聲明”這個東西,應該不陌生,很多函數在使用之前都要進行一個前置聲明。
今天想說的,實際上是在Qt的學習過程中,對於“類”的前置聲明。
這個東西實際上還是挺常用的,而且作用也很大(這個還是我這兩天才知道的),這個常用其實指的是對於C++大佬來說比較常用,像我這種菜雞,要不是領導推薦讓用,我都不知道還有這個玩意,由此可見我是有多菜了。
廢話不多說,說一下它的優點:
主要優點體現在“效率”上,這個效率主要包括兩個部分:
1.編譯的時候:因為采用的是類的前置聲明,因此在.h文件中不需要包含所需文件的頭文件,只需要使用class進行聲明一下即可,如#include <QLabel> ->class QLabel, 在.cpp中添加完整的頭文件。
2.所包含的源代碼發生更改的時候:這個才是它最主要的作用,就是比如說某一天,QLabel的源文件發生了更改,那么對於所有包含着“QLabel”的文件在編譯的時候都得重新編譯一遍,這樣會極大地降低效率。而如果采用了前置聲明,那么在發生更改的時候,需要變化的僅僅是.cpp文件,這樣效率就高多了。
雖然類的前置聲明很好用,但是並不意味着所有的都可以使用前置聲明,其實能利用類的前置聲明的,目前我只發現一種,那就是“指針”。
如QLabel *m_pLbl;
指針能夠采用類的前置聲明的原因是因為,無論是何種類型的指針,它的大小永遠都是4個字節(32位),那么在頭文件的預處理過程中,分配四個字節就可以了,不需要考慮它的具體實現。
如果不是指針,如QLabel m_lbl1,則不能使用類的前置聲明,必須采用包含完整的頭文件。
在一個頭文件中再包含一個那么大的頭文件着實不是一種好的編程風格,尤其是對於比較大的工程項目更是如此。
總結:使用的前提就是“指針”,優點在於“效率高”。