日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

static关键字总结

發布時間:2025/3/16 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 static关键字总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自:https://www.cnblogs.com/lpxblog/p/5190463.html

static,即靜態聲明。它在 作用域、存儲方式、生命周期 等各方面影響一個變量或函數。文章將從 局部變量、全局變量、普通函數、類的static成員(包括數據成員與成員函數)來總結static。

  • 全局變量

    所有的全局變量,無論是否是static的,都是存儲于靜態存儲區的。全局變量本身就是靜態存儲方式,將全局變量聲明為static是為了將變量的作用域限制在本翻譯單元中(本源文件中),使該全局變量不能被源程序的其他翻譯單元所引用。普通全局變量使用extren聲明可以拓展其作用域至其他翻譯單元中。

    可以總結為:static改變了全局變量的作用域,而不改變變量的存儲位置與生命周期。

  • 局部變量

    局部變量即在函數內定義的或在塊中定義的變量。static對局部變量的作用不同于全局變量。普通局部變量在離開其作用域(如離開定義它的函數或塊的花括號)時即消失,而static變量卻存在于程序運行的整個過程,也即是說,static聲明改變了局部變量的生命周期。普通局部變量是存儲在動態存儲區的(堆),而static局部變量是存儲在靜態存儲區,因而普通局部變量在函數每次被調用時都被重新分配內存地址,而靜態局部變量則在程序運行過程中占據固定的內存。

    可以總結為:static改變了局部變量的存儲方式與生命周期,而不改變變量的作用域。

  • 普通函數

    這里的普通函數是為了與類的成員函數區別開來。函數在定義時默認是外部的,通過extren聲明即可被其他源文件引用,static聲明將函數的作用域限制在本翻譯單元中,成為內部函數。static函數在內存中只有一份,普通函數在每個調用中維持一份拷貝。

    可以總結為:static使得函數在內存中只有一份,并將函數作用域限制在當前源文件。

另外,static有幾個優點總被提起:

1. 避免了鏈接時與其他源文件中的變量命名引起沖突。
2. 對于c函數而言,static對函數進行了信息屏蔽,只給當前文件中其他函數使用。

  • 類static成員

    static聲明對類成員的作用可以這樣概括:static使得成員從“屬于類對象”變成了“屬于類,而不屬于類對象”。

    對于數據成員

  • static數據成員必須在類定義體的外部進行定義。
  • class BOOK {private://折扣static float discount; }; //在類定義體外部定義并初始化 float BOOK::discount = 0.95f;
  • 不像普通數據成員,static數據成員不能在構造函數中進行初始化。正如上面所說,它只能在類外部定義并初始化。然而有一個例外,整型的const static 數據成員可以在類的定義體中進行初始化。但需注意的是,const static數據成員在類的定義體中初始化時,該數據成員仍必須在類的定義體之外進行定義(不必再指定初始值了)。
  • class BOOK {private://折扣const static int discount=1; }; const int BOOK::discount;
    • 類static成員函數

      在類內部聲明的static成員函數,在類定義體外部進行定義時無須重復指定static關鍵字。

      對于static成員函數,它同樣是不屬于類對象的,因而它沒有this指針。它可以直接訪問類的static數據成員,不能直接使用非static成員,原因是非static數據成員屬于類對象,使用非static數據成員時必須通過this指針來確定是這些成員屬于哪個類對象,然而上面說了,static成員函數沒有this指針。

      static成員函數不能被聲明為const。實際上,成員函數被聲明為const的本質是它向編譯器保證不會通過這個函數來修改類對象在內存中的每一個bit的內容(可以看《effective C++》 條款03 “盡可能使用const” ),然而我們知道,static成員函數并不屬于類對象,更談不上要保證不修改某一對象的內存了。

      另外,虛函數不能為聲明為static,為什么呢?原因還是static成員函數沒有this指針。virtual funtion運行時綁定是多態的基礎,沒有this指針多態的概念無法踐行。

    總結

    以上是生活随笔為你收集整理的static关键字总结的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。