靜態(tài)變量是指在編譯階段系統(tǒng)就為其分配內(nèi)存,直到程序結(jié)束時(shí)才釋放的變量,被廣泛運(yùn)用于C++編程中。
一、關(guān)于靜態(tài)成員變量
在類中,使用static聲明的成員變量被稱為靜態(tài)成員變量。這類變量為該類的公用變量,在類加載時(shí)創(chuàng)建并初始化,僅被創(chuàng)建和初始化一次。對(duì)于該類的所有對(duì)象來說,靜態(tài)成員變量只有一份。這種設(shè)計(jì)能夠?qū)崿F(xiàn)在不同對(duì)象之間共享數(shù)據(jù),同時(shí)保證數(shù)據(jù)的唯一性和一致性。
二、關(guān)于靜態(tài)方法
靜態(tài)方法是指使用static聲明的方法。在調(diào)用該方法時(shí),不會(huì)將對(duì)象的引用傳遞給它,因此在靜態(tài)方法中 *** 非靜態(tài)的成員。靜態(tài)方法可以通過對(duì)象引用或類名來訪問靜態(tài)的成員。
三、關(guān)于final修飾符
final是一個(gè)常量修飾符,表示某個(gè)成員變量或局部變量一旦被賦值后就不能再改變。這有助于確保代碼的可讀性和可維護(hù)性。
四、關(guān)于static的兩大作用
1. 控制存儲(chǔ)方式:static被引入告訴編譯器將變量存儲(chǔ)在程序的靜態(tài)存儲(chǔ)區(qū)而非棧上空間。這樣做可以保存函數(shù)中變量的值至下一次調(diào)用時(shí),而無需定義全局變量,從而避免了全局變量的缺點(diǎn),如破壞變量的訪問范圍。
2. 控制可見性與連接類型:static還可以把變量的可見范圍限制在編譯單元中,使其成為一個(gè)內(nèi)部連接。也就是說,它可以決定哪些變量或方法可以在哪些范圍內(nèi)被訪問。
五、關(guān)于類中的static成員
當(dāng)需要在類的各個(gè)對(duì)象間進(jìn)行數(shù)據(jù)交互,且希望數(shù)據(jù)對(duì)象為整個(gè)類服務(wù)而非某個(gè)對(duì)象時(shí),可以使用類的static成員。static成員具有獨(dú)立的存儲(chǔ)區(qū),屬于整個(gè)類。在結(jié)構(gòu)體中也可以定義靜態(tài)變量,但需要注意,僅在某個(gè)C++源文件中定義這個(gè)變量,并且不能在頭文件中定義,以避免編譯時(shí)的“重定義”錯(cuò)誤。
六、關(guān)于運(yùn)算符優(yōu)先級(jí)及static變量的初始化
static變量的初始化是在編譯時(shí)進(jìn)行的,而不是在函數(shù)調(diào)用時(shí)。這意味著在程序運(yùn)行之前,static變量已經(jīng)具有了初始值。在多次調(diào)用函數(shù)時(shí),static變量會(huì)保持其值不變。這可以看作是一種全局變量的特殊形式,但在多文件項(xiàng)目中,static變量只在定義它的文件中有效,其他文件無法識(shí)別。
以上就是關(guān)于C++中static和final修飾符的詳細(xì)解釋和運(yùn)用示例。希望能幫助你更好地理解這兩個(gè)修飾符的作用和用法。首次調(diào)用函數(shù)f()時(shí),首先執(zhí)行了表達(dá)式a=c++,具體過程如下:
將變量c的初始值3賦給a,隨后c自身增加1,因此最終結(jié)果是a的值為3,c的值為4。
接著執(zhí)行了表達(dá)式b++,執(zhí)行完畢后b的值為1,這也就是整個(gè)逗號(hào)表達(dá)式的值,但這個(gè)值并未被使用。
函數(shù)f()的返回值是a的值,也就是3。
而在第二次調(diào)用函數(shù)f()時(shí),同樣首先執(zhí)行了表達(dá)式a=c++,但此時(shí)c的值已經(jīng)變?yōu)榱?。
將此時(shí)c的值4賦給a,隨后c自身再次增加1,于是最終結(jié)果是a的值為4,c的值為5。
緊接著執(zhí)行了表達(dá)式b++,執(zhí)行完成后b的值依然為1,這同樣是整個(gè)逗號(hào)表達(dá)式的值,同樣這個(gè)值沒有被使用。
函數(shù)f()的返回值依舊是a的值,也就是4。
最后的輸出結(jié)果為4。