不考慮類 static 的三個作用
當同時編譯多個文件時,所有未加static前綴的全局變量和函數(shù)都具有全局可見性。
例如,同一模塊中,一個a.c,一個main.c a.c中
char a = 'A';void msg(){}在main.c中可以直接訪問到,如果加上static, 那么將只能在本文件中訪問到,而無法被該模塊下的其他文件訪問到
* 包括未初始化的全局靜態(tài)變量 和 靜態(tài)局部變量。(存儲在BSS段,默認都是0x00)
* 未初始化的全局變量 也是 默認初始化為 0
string sa[10]; // string 默認構造函數(shù),為空串“”static int ia[10]; // 全局的,不論有無static 都初始化為0int main(){ string sa2[10]; // 局部,不過有默認的構造函數(shù)為空串“” int ia2[10]; // 局部,初始值是不確定的 return 0;}staticb變量值初始化一次,聲明周期為整個源程序
在函數(shù)中的static變量,不像棧中存儲的局部變量會消失
int fun(int n){ static int sums = n; // 每次調用都想通過賦值初始化,其實只初始化了第一次而已 sums += n; return sums;}int main(){ for(int i=0;i < 5;i++) { 類中 static的作用不屬于對象,屬于類,所有實例對象公用一份,
仍然有private,public,protect屬性
沒有對象實例,static成員依然存在類中
static 數(shù)據(jù)成員必須在類外初始化 當然,如果在加上關鍵const, 則是可以在類中進行初始化的
class A{public: static int a = 100; // 報錯};
與靜態(tài)數(shù)據(jù)成員一樣,仍然屬于類
this指針是非靜態(tài)成員函數(shù)有的, static成員函數(shù)將沒有this指針
靜態(tài)成員函數(shù) 無法訪問屬于類對象的非靜態(tài)數(shù)據(jù)成員,也無法訪問非靜態(tài)成員函數(shù),只能調用其他的靜態(tài)成員函數(shù),訪問靜態(tài)的數(shù)據(jù)成員
static成員函數(shù)不能聲明為const
const 修飾成員函數(shù)表示 該成員函數(shù)不會修改某個該函數(shù)所屬的對象,static不屬于任何對象

靜態(tài)成員之間的訪問
包括靜態(tài)成員函數(shù)訪問 靜態(tài)成員函數(shù),靜態(tài)數(shù)據(jù)成員。靜態(tài)成員不能訪問非靜態(tài)的成員函數(shù),不能訪問非靜態(tài)的成員數(shù)據(jù),
非靜態(tài)的成員函數(shù)可以任意的訪問靜態(tài)成員函數(shù) 和 靜態(tài)數(shù)據(jù)成員
由于沒有this指針的額外開銷,靜態(tài)成員函數(shù)與類的非靜態(tài)成員函數(shù)相比速度上會有少許的增長。
新聞熱點
疑難解答
圖片精選