static作用


      存儲在靜態數據區的變量會在程序剛開始運行時就完成初始化,也是唯一的一次初始化。共有兩種變量存儲在靜態存儲區:全局變量和static變量。

 

0x01  (普通)全局變量與靜態全局變量 (隱藏)

      未加static前綴的全局變量和函數都具有全局可見性,其它的源文件也能訪問全局變量名或者函數名前加static,就會對其它源文件隱藏。利用這一特性可以在不同的文件中定義同名函數和同名變量,而不必擔心命名沖突

      static全局變量只初始化一次,防止在其他文件中被引用。

 

 

0x02   (普通)局部變量與靜態局部變量

      局部變量改為靜態變量后是改變了它的存儲方式(唯一的一次初始化),即改變了它的生存周期。

      作為static局部變量在函數內定義,它的生存期為整個源程序,但是其作用域仍與自動變量相同,只能在定義該變量的函數內使用該變量。退出該函數后, 盡管該變量還繼續存在,但不能使用它。

// StaticDemo.cpp : 定義控制台應用程序的入口點。
//

#include "stdafx.h"
#include <stdio.h>

int Function();
int main(void)
{
	for (int i = 0; i <= 10; ++i)
		printf("%d\n",Function());
	return 0;
}

int Function() {
	static int StaticNumberUnitOnlyOnce = 666;      //  存儲在靜態數據區的變量會在程序剛開始運行時就完成初始化,也是唯一的一次初始化。
	return StaticNumberUnitOnlyOnce--;              //在static出現前,要達到同樣的功能,則只能使用全局變量: 
}

  

0x03  (普通)函數和靜態函數

    未加static前綴的全局變量和函數都具有全局可見性,其它的源文件也能訪問,全局變量名或者函數名前加static,就會對其它源文件隱藏。利用這一特性可以在不同的文件中定義同名函數和同名變量,而不必擔心命名沖突。

 

0x04   C++中的類成員聲明static


  靜態數據成員是類的成員,而不是對象的成員,這樣就出現以下作用:

  (1)類的靜態成員函數是屬於整個類而非類的對象,所以它沒有this指針,這就導致 了它僅能訪問類的靜態數據和靜態成員函數。      

  (2)不能將靜態成員函數定義為虛函數。      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM