程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++:淺談修飾符static

C++:淺談修飾符static

編輯:C++入門知識

static 是C++中很常用的修飾符,它被用來控制變量的存儲方式和可見性,下面將從static 修飾符的產生原因、作用談起,全面分析static 修飾符的實質。 

static   的兩大作用:

一、控制存儲方式: 

static被引入以告知編譯器,將變量存儲在程序的靜態存儲區而非棧上空間。 

1、引出原因:函數內部定義的變量,在程序執行到它的定義處時,編譯器為它在棧上分配空間,大家知道,函數在棧上分配的空間在此函數執行結束時會釋放掉,這樣就產生了一個問題:   如果想將函數中此變量的值保存至下一次調用時,如何實現? 

最容易想到的方法是定義一個全局的變量,但定義為一個全局變量有許多缺點,最明顯的缺點是破壞了此變量的訪問范圍(使得在此函數中定義的變量,不僅僅受此函數控制)。 

2、解決方案:因此C++ 中引入了static,用它來修飾變量,它能夠指示編譯 器將此變量在程序的靜態存儲區分配空間保存,這樣即實現了目的,又使得此變量的存取范圍不變。  

二、控制可見性與連接類型:

static還有一個作用,它會把變量的可見范圍限制在編譯單元中,使它成為一 個內部連接,這時,它的反義詞為”extern”. 

Static作用分析總結:static總是使得變量或對象的存儲形式變成靜態存儲,連接方式變成內部連接,對於局部變量(已經是內部連接了),它僅改變其存儲方式;對於全局變量(已經是靜態存儲了),它僅改變其連接類型。  

三、注意:

全局變量和全局靜態變量的區別

1、全局變量是不顯式用static修飾的全局變量,但全局變量默認是靜態的,作用域是整個工程,在一個文件內定義的全局變量,在另一個文件中,通過extern 全局變量名的聲明,就可以使用全局變量。

2、全局靜態變量是顯式用static修飾的全局變量,作用域是所在的文件,其他的文件即使用extern聲明也不能使用。

類中的static成員:  

一、出現原因及作用: 

1、需要在一個類的各個對象間交互,即需要一個數據對象為整個類而非某個對象服務。

2、同時又力求不破壞類的封裝性,即要求此成員隱藏在類的內部,對外不可見 。 

類的static成員滿足了上述的要求,因為它具有如下特征:有獨立的存儲區,屬於整個類。

二、注意: 

1、對於靜態的數據成員,連接器會保證它擁有一個單一的外部定義。靜態數據成員按定義出現的先後順序依次初始化,注意靜態成員嵌套時,要保證所嵌套的成員已經初始化了。消除時的順序是初始化的反順序。 

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

發布於 李木空間 www.limou.net 轉載請注明。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved