了解不同情況下的static關鍵字

2021-10-19 08:25:14 字數 1447 閱讀 2489

在全域性變數前加上關鍵字static,全域性變數就定義成乙個全域性靜態變數

靜態儲存區,在整個程式執行期間一直存在。

初始化:未經初始化的全域性靜態變數會被自動初始化為0(自動物件的值是任意的,除非他被顯示初始化);

作用域:全域性靜態變數在宣告他的檔案之外是不可見的,準確地說是從定義之處開始,到檔案結尾。

和普通全部變數的區別:

就是不能在多個檔案之間使用。而普通的使用extern後可以全文件使用。

在全域性變數前加上關鍵字stati,區域性變數就定義成乙個區域性靜態變數

記憶體中的位置:靜態儲存區

初始化:未經初始化的區域性靜態變數會被自動初始化為0(自動物件的值是任意的,除非他被顯示初始化);

作用域:作用域仍為區域性作用域,當定義它的函式或者語句塊結束時,作用域結束。但是當區域性靜態變數離開作用域後,並沒有銷毀,而是仍然駐留在記憶體當中,只不過我們不能在對他進行訪問,直到該函式再次被呼叫,並且值不變。

此時雖然兩次進入函式,但是第一次退出後,區域性靜態變數並沒有被銷毀

和靜態全部變數類似。

在函式返回型別前面加上static,函式就定義為靜態函式。函式的定義和宣告在預設情況下都是extern的,但靜態函式只是在宣告它的檔案當中可見,不能被其他檔案所用

函式的實現使用static修飾,那麼這個函式只能在本cpp內使用,不會同其他cpp中的同名函式引起衝突;

warning:不要在標頭檔案中宣告static的全域性函式,不要再cpp內宣告非static的全域性函式,如果你要在多個cpp中復用該函式,就把它的宣告提到標頭檔案裡去,否則cpp內部宣告需加上static修飾

在類中,靜態成員可以實現多個物件之間的資料共享,並且使用靜態資料成員還不會破壞隱藏的原則,即保證了安全性。

因此,靜態成員時類的所有物件中共享的成員,而不是某個物件的成員。對多個物件來說,靜態資料成員只儲存一處,供所有物件使用。

靜態成員函式和靜態資料成員一樣,他們都屬於類的靜態成員,他們都不是物件成員。因此,對靜態成員的引用不需要使用物件名。

在靜態成員函式的實現中不能直接引用類中說明的非靜態成員,可以引用類中說明的靜態還曾元。

如果靜態成員函式中要引用非靜態成員時,可以通過物件來引用。

格式:《類名》:::《靜態成員函式名》(《參數列》)

不同情況下this的指向以及改變this指向的方法

1.call 有多個引數,第乙個引數是改變的this指向,剩餘的引數是實參 fn.call fn2,12,5,8 在fn中 this代表的是fn2 12,5,8 代表是fn的實參 有兩個引數,第乙個引數是改變的this的指向,第二個引數,形式是陣列的形式,放的是函式的實參 在fn中,this指的是f...

不同情況下構造skb資料報的實現

在我這個網路介面的程式中 can0 其實難點就是怎樣組包。怎樣在原來資料報的基礎加上自己的資料,怎樣構造ip頭,怎樣構造udp頭。除錯了兩個星期,終於是調通了,在這個過程中,通過看核心源 和自己組包的嘗試,大概對組包的方法有了些了解,記錄在此,留做備忘,也希望能給需要這方面資訊的朋友一點幫助吧。1,...

C 類模板在不同情況下的使用

4.類模板派生普通類 5.類模板派生類模板 6.類模板類內實現 7.類模板類外實現 8.模板類碰到友元函式 類模板和函式模板的定義和使用類似。有時,有兩個或多個類,其功能是相同的,僅僅是資料型別不同。類模板可以有預設引數,比如 template typename nametype,typename ...