【C++自我精講】基礎系列四 static 0 前言
變量的存儲類型:存儲類型按變量的生存期劃分,分動態存儲方式和靜態存儲方式。
1)動態存儲方式的變量,生存期為變量所在的作用域。即程序運行到此變量時才為其分配存儲空間,作用域結束時,會自動收回為其分配的存儲空間。
2)靜態存儲方式的變量,生存期為整個程序執行的過程。即程序開始時就為其分配存儲空間,程序結束時,才會收回為其分配的存儲空間。
4種變量的存儲類型:
1)自動類型(auto):動態存儲方式的變量,局部變量,auto常常省略。
2)寄存器類型變量(register):動態存儲方式的變量,編譯器不為此類型變量分配存儲空間,而是直接使用CPU的寄存器。存取速度快,主要用於控制循環次數等不需要長期保存值的變量。
3)外部類型變量(extern):靜態存儲方式的變量,系統自動初始化值,又叫全局變量,全局變量是從作用域提出的,外部變量是從存儲方式提出的,表示了它的生存期。
4)靜態存儲變量(static):靜態存儲方式的變量,系統自動初始化值,靜態變量只能在它的作用范圍內使用。
1 static用法static:靜態存儲變量的類型說明符。
static局部變量:在函數內的局部變量類型說明符前加上static說明符就構成靜態局部變量。局部變量變為靜態局部變量,即改變了它的生存期。
i;
1)static局部變量在函數內定義。
2)static局部變量的生存期是整個程序。
3)static局部變量的作用域為函數體內。但再次調用定義此函數時,又可繼續使用此變量,而且保存了前次被調用後留下的值。
i = ; i++ i; i++ main( argc, * iRet = = Fun1(); iRet = Fun1(); iRet = Fun2(); iRet = Fun2();
static全局變量:在全局變量類型說明符前加上static就構成靜態的全局變量。全局變量變成靜態全局變量,即改變了它的作用域。
1)當一個源程序由若干個源文件組成時,在一個源文件中定義的外部變量要在其它的源文件中使用,在使用前就用extern進行外部聲明。
2)如果在一個源文件中定義的外部變量不想讓其它源文件使用,則必須聲明為static全局變量,只能供所在的源文件使用。同時可以避免在其它源文件中引起錯誤。
++ ++ ++
static類成員變量:類的所有對象都用同一個static成員變量。通過對象名或類名都可以調用。
a1.x = ; a1.y = ; a2.y = ;
static類成員變量和普通數據成員一樣,不能在類的定義體中初始化,只能在類外進行初始化。但static const卻可以。
y = x =
static類成員函數:類的所有對象都用同一個static成員函數。通過對象名或類名都可以調用。
1)static類成員函數沒有this指針。
2)static類成員函數不能被聲明為const和虛函數。
3)static類成員函數可以訪問所屬類的static成員變量,但不能使用非static成員變量。
Fun(); ++; y++;