static在C 中的應用

2021-06-26 12:57:18 字數 2232 閱讀 9104

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 對於內部變數,僅僅是為了該值能夠永久留存,...