1
案例描述22
static
語法特性簡介
22.1
修飾變數
22.1.1
靜態全域性變數
22.1.2
靜態區域性變數
22.1.3
靜態資料成員
22.2
修飾函式
22.2.1
靜態函式
22.2.2
靜態成員函式33
應用場合
33.1
將變數/
函式的作用域限定在本原始檔中
33.2
儲存函式的執行時資訊
33.3
儲存類物件共有的屬性
43.4
定義乙個屬於類的全域性函式44
總結5
static、c/c++
摘 要:
本文簡要介紹了c++中static關鍵字的作用以及使用方法。
static可以修飾變數和函式。對於變數,用來控制其儲存方式和可見性。對函式,同樣控制其可見性,在c++中還可以用來定義靜態成員函式。在c++的眾多關鍵字中,static是功能較強大和複雜的關鍵字之一;本文簡要總結一下static的語法和使用說明。
對static定義的所有的變數都在全域性資料區內分配記憶體,其生命週期為程式的整個執行週期。靜態變數的訪問受其作用域控制。在作用域外是無法訪問靜態變數的。
內存在全域性資料區分配,且在程式進入「main
」之前被初始化;
限定變數僅在宣告它的檔案中可見,在其它檔案中不可見,既不能跨檔案操作;
內存在全域性資料區分配,在首次執行到此變數的宣告處被分配記憶體並初始化;
生命週期全域性存在,但是可見性僅在宣告變數的區域性作用域;
如果不賦初值,則編譯器缺省會為其初始化為0(類物件始終呼叫預設建構函式),實際應用中我們應該為任何變數進行初始化操作。
對於被要求可重入的函式,要特別注意這種全域性存在的記憶體的訪問。
內存在全域性資料區內分配,且在程式進入
」main
」之前被初始化;
受類的作用域控制,且遵從類的public,protected,private訪問規則;
在全域性範圍內僅存在乙份,屬於乙個類並被類的所有物件共享使用;
在函式返回型別前加static既為靜態函式,靜態函式被限定僅在宣告它的檔案內使用。
靜態成員函式不能訪問非靜態成員函式和非靜態資料成員,但非靜態成員函式可以訪問靜態資料成員和靜態成員函式;
靜態成員函式不能宣告為const!但引數可以是const。不能將靜態成員函式定義為虛函式。
由於靜態成員函式沒有this指標,可以成為乙個callback函式,也可以應用於執行緒函式身上。
全域性靜態變數/函式的作用域限定在本原始檔中,可以使用他們定義僅能在本檔案內訪問的變數或者函式。這是一種c風格的**,達到對外隱藏,避免全域性的名字衝突。
由於配置檔案較多,終端rwnewcfgfile.cpp中按功能區分定義了讀取和儲存配置屬性的函式,這些函式外部不需要使用也不能使用,因此可以使用static限定。
在函式體內定義靜態區域性變數。由於靜態區域性變數不會在函式退出時銷毀,因此可以定義它來儲存函式執行過程中的資訊。
終端有些函式可能會被頻繁使用,在這些函式體內的大結構資料可以考慮使用static變數。這樣變數的記憶體只被分配一次,可以避免大記憶體的頻繁分配,比較穩定;而且由於記憶體始終駐留記憶體,可以將此位址傳給外部以訪問此物件,減少資料通訊開銷。
類的靜態資料成員是屬於類的所有物件的,且不依賴於物件。使用它可以節約儲存空間,當它的值改變時也不需要遍歷所有物件進行修改,便於操作。
終端在解析資源檔案的時候,資源檔案內包含對話方塊、位圖、idd等各種屬性的資料,這些資料又存在共性。在解析時可以共享一些資料。
類的靜態成員函式不依賴於物件的存在而存在,因此可以使用它來進行全域性的訪問操作,這樣既保證了資料的封裝,又能提供全域性訪問。比如可以將靜態成員函式作為執行緒函式使用。
終端在開發中使用了一些單件類。由於這些配置屬性在全域性內只需存在乙份,因此使用static定義乙個全域性的函式以安全地定義唯一乙個此類物件,如下擴充套件配置類的定義**所示
靜態變數的記憶體分配在靜態資料區,程式執行過程中都有效,程式退出時由系統負責釋放。靜態變數的訪問受作用域控制。不過由於記憶體始終有效,在其作用域外只要能夠取得它的位址,依然可以對其進行操作。
static變數會儲存上次的修改記錄,因此在修改時要慎重,特別是在多執行緒開發中。
在c++中,static修飾的函式主要用在類的靜態成員函式上。此類函式即可以保持資料的封裝,又可以為類提供乙個不依賴於物件的介面。
static在java中的應用
靜態變數 1 static放在變數的前面成為靜態變數,或類變數。2 為該類的公共變數。3 對所有的物件來說只有乙份 共享 輸出結果為1 1 2 1。可以看出,靜態變數sno是所有物件共享的,非靜態變數都有自己的copy。當sno加1之後,下一次被另乙個物件呼叫的時候為1,而age的值為0.靜態 塊 ...
c 中static的應用
不加static修飾的全域性變數,其作用域為整個工程檔案,在定義檔案外,可以通過extern宣告呼叫該變數。當全域性變數新增static修飾後,其作用域就限定在本檔案內,在工程中其他檔案中就算新增extern 宣告也不能呼叫。靜態區域性變數相當於乙個只能被定義函式使用的全域性變數,當函式結束時,其當...
Static在C語言中的應用
概念 what static 作用域生命週期 函式 一直存在 定義原始檔 一直存在 內部變數 呼叫完銷毀 函式內 一直存在 外部變數 一直存在 定義原始檔內 一直存在 目的 why l對於函式來講,只有乙個目的,就是限定作用域,禁止當前檔案外的檔案呼叫 l 對於內部變數,僅僅是為了該值能夠永久留存,...