C++關鍵字static

 

     本文主要講解C++ static關鍵字使用時的一些技巧,需要避免的用法。

    一、基本語法

            static的變量存在於全局靜態數據區,系統自動初始化爲0。在整個程序運行過程中只初始化一次,只有一個內存地址。具體還有一些細節,想必大家已經在其他書籍上看過了,這裏不再多提。

 

    二、使用技巧

            1、在不增加其他變量的情況下,優化程序。

                 先看如下代碼,假設我們使用這個函數計算最大整數的大小:

                

 

                如果計算多次的話,我們的代碼可能是這樣的:

                

                這樣實際上MaxInt函數運行了兩次,我們可以肯定的是,一個程序在運行期間,最大整數大小不會變化,所以這裏計算兩次顯得多餘了。

 

               一般情況下,我們當然不會犯如此低級的錯誤,我們一般會如此寫代碼:

                  

               從運行結果來看,效率上去了,並沒有計算兩次,但爲了如此功能添加一個全局變量顯然不合適,如果以後還要添加諸如:最大文件鏈接數量,當前程序最大棧大小……,那程序的可讀性就不那麼好了。

 

              在此情況下,我們可以使用static變量避免此問題:

             

              從這段代碼來看,不僅沒有多餘的全局變量,程序的效率也得到了改善,是比較好的做法。

 

              說到這裏當然還有更好的設計方案,將函數MaxInt()做爲classprivate函數,GetMaxInt()做爲classpublic函數,則是更好的設計方案。

 

            2、使用static class function代替namespace function

              根據上面的設計,我們將function寫到class

                

 

              然後使用之

             

              到此爲止一切都非常好,使用兩行代碼就完成了功能,但有沒更佳的方案呢?有,下面代碼只需一行。

              我們使用namespcae代替class

              

              一行代碼就完成了功能,但你看出上述代碼的缺陷了嗎?萬一某個初學者直接使用MyMaxInt::MaxInt(),那怎麼辦,暈,又回到以前老路上面去了。

 

             下面給出最終設計,全面解決此問題,我們用static class function代替之前的設計

            

 

             現在只需使用CMyMaxInt::GetMaxInt就可以了,並且直接聲明類的對象會標記爲編譯錯誤。

 

 

    三、需要避免的用法。

           1、不要濫用static

            我們假設有個名爲People的類,其中有個字符數組szName,最一般的初始化會寫成這個樣子。

           

            當然某些童鞋可能閒多調一個memset麻煩,於是寫成如下形式:

             

           從表面看,都初始化爲0了,但如果再聲明一個People對象,其szBuf卻不爲0,此處尤其需要小心,請記住,static只在必要的時候採用,千萬不要爲了不想手動初始化而濫用。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章