關於C++全局變量和靜態變量初始化的一些總結


1.全局變量

    全局變量無疑要在main函數開始前執行完成,但可細分為在編譯時和在運行時初始化,即static initialization和dynamic initialization。

  •  static initialization

           靜態初始化按照我的理解,是針對那些較為簡單的,c++內部定義的數據結構,如int,double,bool及其數組結構的初始化。又可分為zero和const兩種方式。

           對於zero初始化,編譯時編譯器將其分配在.bss段,不占用rom空間;而const初始化,也就是我們指定了全局變量的初始值,編譯器會將其分配在.data段,占用romon空間。

  •  dynamic initialization

           這種初始化針對的是需要調用構造函數才能完成的初始化。這種初始化會在main函數執行前由運行時庫調用對應的代碼進行初始化。

    靜態初始化先於動態初始化,這一點很好理解。靜態初始化在編譯時初始化,直接寫進.bss和.data段,程序執行時直接加載,而動態初始化只能在運行時由運行時庫調用相應構造函數

    進行初始化。

2.類的靜態成員

    C++規定,const的靜態成員可以直接在類內初始化,而非const的靜態成員需要在類外聲明以初始化。對於后一種情況,我們一般選擇在類的實現文件中初始化。

    至此,具體的初始化方式和上面所說的又是一致的,可在編譯期間初始化,也可以在運行時初始化。

3.關於靜態成員函數和靜態成員變量的使用

    兩者都可以通過類名+"::"的方式進行使用,此外,對於類的對象,指針或引用,也可以直接調用。但類的靜態成員函數由於不含有this指針,只能引用其類的靜態成員變量。

    不過有一種技巧,可以給類的靜態成員函數傳遞該類的指針、引用等作為形參,強行使用該類的對象。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM