c語言中static的語義
1.static變量:
1).靜態局部變量
a.靜態局部變量在函數內定義,生存期為整個源程序,但作用域與局部變量相同,只能在定義該變量的函數內使用。退出該函數后, 盡管該變量還繼續存在,但不能使用它。
b.對基本類型的靜態局部變量若在說明時未賦以初值,則系統自動賦予0值。而對自動變量不賦初值,則其值是不定的。
2).靜態全局變量
全局變量本身就是靜態存儲方式, 靜態全局變量當然也是靜態存儲方式。但是他們的作用域,非靜態全局 變量的作用域是整個源程序(多個源文件可以共同使用); 而靜態全局變量只在定義該變量的源文件內有效, 在同一源程序的其它源文件中不能使用它。
2.static函數(也叫內部函數):
只能被本文件中的函數調用,而不能被同一程序其它文件中的函數調用。
3. 在C語言中,由於沒有類的概念,所以沒有靜態成員一說,在c中static的作用主要有2個:
一是隱藏功能,對於static修飾的函數和全局變量而言,其作用於局限於所在的文本,不能被其他文本內的函數使用
二是保持持久性功能,對於static修飾的局部變量而言,其存儲區變更到靜態存儲區,程序結束不銷毀
並且,因為存放在靜態區,全局和局部的static修飾的變量,都默認初始化為0。
c++語言中static的語義
在c++中,由於面向對象的思維,它與C語言中的作用有一些不同,有了類中靜態成員的說法。靜態成員不屬於對象,而屬於類。不創建對象也可調用。從代碼形式上來說沒有任何區別。普通類成員函數與靜態成員函數的區別在於普通成員函數有一個隱藏的調用參數(this)指針。所以就是說靜態成員函數沒有對象也可調用。
對類的靜態和非靜態函數的不同的調用要求決定了它們在使用上的方便程度:
非靜態成員函數要通過對象調用,所以要求首先建立一個對象;
而靜態成員函數可不建立對象就可以被使用。
另外,如果類的成員函數想作為回調函數來使用,一般情況下只能將它定義為靜態成員才行。