tft每日頭條

 > 生活

 > static關鍵字的特點

static關鍵字的特點

生活 更新时间:2024-07-20 21:13:06

(一)static是c 中很重用的修飾符,它被用來控制變量的存儲方式和可見性

(二)為什麼要引入static關鍵字?

函數内部定義的變量,在函數被調用時,編譯器才為它在棧上分配空間,大家知道函數在棧上分配空間,在此函數執行結束時會釋放掉,這樣就産生了一個問題,如果想将函數中此變量的值保存至下次調用時,怎麼實現呢?最容易想到的方法是定義一個全局的變量,但定義為一個全局變量有許多缺點,最明顯的缺點是破壞了此變量的訪問範圍,使得在此函數中定義的變量不受此函數控制。

(三)什麼時候用static?

需要某個數據對象為整個類而非某個對象服務時,同時又力求不破壞類的封裝性。即要求此成員隐藏在類的内部,對外不可見。

(四)static内部機制

靜态數據成員要在程序一開始的時候就必須存在,因為函數在程序運行中被調用,所以靜态數據成員不能在任何函數内分配空間和初始化。靜态數據成員要實際地分配空間,故不能在類的聲明中定義,隻能聲明數據成員,類聲明隻聲明一個類的尺寸和規格。并不進行實際的内存分配,所以在類的聲明中寫成定義是錯誤的。static被引入以告知編譯器将變量存儲在靜态存儲區而非棧上空間,靜态數據成員按定義出現的先後順序依次初始化,注意靜态成員嵌套時,要保證所嵌套的成員已經初始化了,消除的順序是初始化的反順序。

(五)static的優勢

可以節省内存,因為它是所有對象所共有的,因此對多個對象來說,靜态數據成員隻存儲在一處,供所有對象共用,靜态數據成員的值對每個對象都是一樣的。但它的值是可以更新的,隻要對靜态數據成員的值更新一次,保證所有對象存取更新後的相同的值,這樣可以提高時間效率。

(六)引用靜态數據成員時采用 <類名>::<靜态成員名>

(七)注意事項

1.類的靜态成員函數是屬于整個類而非類的對象,所以它沒有this指針,這就導緻它僅能訪問類的靜态數據和靜态成員函數。

2.不能将靜态成員函數定義為虛函數

3.由于靜态成員聲明于類中,操作于其外,所以對其取地址操作,就多少有些特殊,變量地址是指向其數據類型的指針。

4.由于靜态成員函數沒有this指針,所以就差不多等同于非成員函數。

5.為了防止父類的影響,可以在子類定義一個與父類相同的靜态變量,以屏蔽父類的影響。這裡有一點需要注意:我們說靜态成員為父類和子類共享,但我們有重複定義了靜态成員,這會不會引起錯誤呢?不會,我們的編譯器采用了一種絕妙的手法:name-mangling 用以生成唯一的标志

static關鍵字的特點(static關鍵字作用詳解)1

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved