關於static 靜態存儲類


c++primer plus 427頁讀書筆記。

靜態存儲類。靜態成員有一個特點:無論創建了多少對象,程序都會只創建一個靜態變量副本(即使是在循環中,靜態的初始化語句也只在第一次生效),也就是說類的所有對象共享一個靜態成員。

在程序12.1,和程序12.2中我們可以看到,static int  num_strings;只在了頭文件中進行了聲明,在方法文件中初始化, int StringBad::num _strings = 0;(這里不用寫static,基類型在int在最前面,),那么為什么要把生命和初始化分開放呢?

  因為:在絕大部分情況下不能在類聲明中初始化靜態成員變量,這是因為聲明描述了如何分配內存,但不分配內存。對於靜態類成員,可以在類聲明之外使用單獨的語句來進行初始化,這是因為因為靜態類成員是單獨存儲的,而不是對象的組成部分。這里需要注意的是,初始化語句指出了類型,並使用了作用域運算符::,但沒有用關鍵字static。

  初始化是在方法文件中,而不是在類聲明文件中進行的,這是因為類生命位於頭文件中,程序將頭文件包括在其他幾個文件中。如果在頭文件進行初始化,將出現多個初始化語句副本,從而引發錯誤。

  但是有一種例情況,靜態成員為const int 類型或者枚舉類型(枚舉類型的單個與const int 等價)。

靜態數據成員在類聲明中聲明,在包含類方法的文件中初始化。初始化使用作用域運算符來指出靜態成員所屬的類。但如果靜態成員是const int 或者 enum,則可以在類聲明中初始化。

 


免責聲明!

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



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