靜態變數是為了解決什麼問題而存在的?

時間 2021-06-03 09:14:21

1樓:小小何先生

對這個問題的補充描述如下:

它提供了什麼好處?

有什麼場景需要使用到它?

我在搜尋引擎搜到的都只是說什麼語法方便..

還有編譯方面的實現之類的這些內容..

但是我關心的是它是為了什麼而誕生的?

好!好乙個只關心為了什麼而誕生的!說一下c++中的靜態變數吧!

程式在處理的時候,都是處理資料,或者稱之為變數。變數的儲存分為動態儲存靜態儲存靜態儲存說的是在程式執行的整個過程中都存在,而動態儲存則是在呼叫函式時臨時分配的儲存單元。

這麼做的好處顯而易見,有些變數,我就是希望他是全域性的,而有些變數,我希望它隨著函式的呼叫而動態儲存和消亡。C++中來處理「靜態」這一件事情,用的是static關鍵字。

對於乙個程式,最重要的三大部分就是:變數函式。從而可以細分為對全域性變數、對區域性變數、對函式、對類成員、對類函式的五種修飾,從而得到全域性靜態變數區域性靜態變數靜態函式類的靜態成員類的靜態函式

對全域性變數的修飾,得到全域性靜態變數,能夠使得其作用域在定義的開始處到檔案結尾。例如在a.c中定義了static int a = 10;那麼在b.

c中用extern int a是拿不到a的值的,因為a的作用域只在a.c中。這樣能夠解決檔案之間的符號汙染問題

對區域性變數(棧變數)修飾,得到區域性靜態變數,將棧變數生命週期延長到程式執行結束時。 也就是說區域性靜態變數的作用域仍然是在這個函式所定義的區域性作用域,離開定義它的函式後不能使用,但如再次呼叫定義它的函式時,它又可繼續使用, 而且儲存了前次被呼叫後留下的值**。未經初始化的區域性靜態變數,會被自動初始化為0**。

(普通的區域性變數分配在棧上,如果沒有給定初始化的值的話,會分配乙個隨機值,並且會隨著函式棧幀的釋放而被釋放掉。)。這麼做的用意在於,對於某些區域性變數,我們可以保留並使用一些需要的資訊,比如記錄這個函式被呼叫了多少次

在函式返回值型別前加static,函式就定義為靜態函式。函式的定義和宣告在預設情況下都是extern的,但如果用static修飾的話,與static修飾全域性變數一樣,靜態函式只能在宣告它的檔案中可見,不能被其它檔案呼叫。也不會與其它cpp中的同名函式引起衝突

static對類成員的修飾,得到了類的靜態成員。在類中,靜態成員可以實現多個物件之間的資料共享,並且使用靜態資料成員還不會破壞隱藏的原則,即保證了安全性,因此靜態成員是類的所有物件中共享的成員,而不是某個物件的成員,對多個物件來說,靜態資料成員只儲存一處,供所有物件公用

static對類函式的修飾,得到了類的靜態函式。和靜態資料成員一樣,它們都屬於類的靜態成員,而不是某個具體物件成員,因此,對於靜態成員的呼叫不需要用物件名。這樣也能減少建立多個物件時的一些不必要的開銷

可以看到,靜態變數用處強大!!!!

2樓:

函式中的static變數只初始化一次

類中的static成員被所有物件共享,屬於類這一級別

檔案中全域性static函式只能被在該檔案中可見

3樓:

如果是說C++的static關鍵字……

靜態的全域性函式和靜態的全域性變數用來解決多個相互之間有依賴關係的目標檔案間產生符號汙染的問題。

靜態的成員函式以及靜態的成員變數用來解決某些成員函式或成員變數屬於類而不是物件的問題。

靜態的區域性變數用來解決某些變數只需要乙個例項,而且只需要一次初始化的問題。

做事情不應該為了得到什麼而是為了解決什麼才去做,是這樣的嗎?

夢回宋元 我覺得做事情還是要有明確的目標,不然去做的意義何在?凡事預則立,不預則廢。沒目標的努力,基本是半途而廢。想得到什麼不要說僅是功利心,其實更多的是一種做事態度,想得到才會更努力。努力做事都不一定成功,何況隨心為之呢?不要聽有些人的凡爾賽故事,每個人都不會輕易成功。其中的艱辛只有自己知道。 雞...

引入汽油機缸內直噴初衷是為了解決增壓發動機爆震問題嗎?豐田一些自吸氣發動機使用直噴,壓縮比有明顯提公升

徐敏 直噴的引入通過汽油蒸發吸熱降低了氣缸內的溫度,可以減輕爆震,這也是增壓機使用直噴的一大原因,但這並非汽油直噴存在的主要原因。進氣道噴射的主要原因是為了精確控制當量比,解決排放問題,但進氣道噴射在氣門處形成了油膜,穩態工況下油膜處於動態平衡,也就是蒸發和形成速率是一樣的,沒有問題,但瞬態工況下油...

重疾險是為了解決活下去的問題,而帶身故責任是為了家庭責任。這個說法對嗎?

溫潤的石頭 重疾險是為了解決因重病無法工作照樣能有人發工資的問題,能不能活下去要看 發的工資 夠不夠用 帶身故責任是為了滿足大多數人的消費心裡,不願意買壽險 不想花了錢有可能賠不到 真要有家庭責任感得上定期壽險啊,重疾身故能賠多少,夠家庭用幾年? 保險峰會 重疾險有帶身故責任和不帶身故責任的,不帶身...