1. 程式人生 > >C++ static成員變數與static成員函式

C++ static成員變數與static成員函式

最近在做一個服務端的小專案這個專案要用到asio::streambuf這個物件。但是這個類的複製建構函式是私有的也就是導致了它不可以被複制構造。在傳引數的時候就比較不方便,不夠由於它是緩衝區,如果設定多個出現也是不方便。

現在就想做一個static的streambuf,但是希望它是私有的,這樣比較方便管理和控制。

static成員變數

如果一個類裡面含有的是公有型別的static變數,那麼就意味著這個變數在類的作用於裡面類似於一個全域性的變數。

有一段話說的特別好就是,一個static變數與包含它的類物件有關,但是與類的物件無關。

就好像是這個變數是每個類的例項化都擁有的,但是它不屬於任何一個類。在使用的時候加上它的作用域 :: ,而且需要在類外進行初始化。

至於為什麼一定要在引用static變數的時候加上一個域作用符標清楚,變數所屬的範圍。我想還是因為static的對外不可見性吧,比如在一個c檔案裡面宣告一個static變數就意味著出了該檔案編譯器就不會找到這個變數。

而且由於static變數是抽象出來的,獨立於物件的例項的。所以一般都會在例項化一個物件之前,初始化static變數。

static成員函式

有了static變數,我們來聊一下static函式

類裡面同樣也有static函式,這個函式是可以直接訪問類的static變數和非static變數成員的,而且可以免去域作用符的限制,但是由於這個函式也是不屬於一個類的物件的,那麼也就是說,類的普通成員變數是不可以寫進來的。

有了static成員變數有什麼好處嗎?

可以節省空間,而且可以保持變數的值不變。可以表達類的一些特性,還有很多有意思的功能等著被使用。