C/C++ static 關鍵字


在 C/C++ 中,static 關鍵字使用恰當能夠大大提高程序的模塊化特性。
static 在 C++ 類之中和在類之外的作用不一樣,在C語言中的作用和在 C++ 類之外的作用相同,下面一一說明:

在類外的作用

1.變量

局部變量

局部變量即是在函數或一個代碼塊內部聲明的變量。

當局部變量被定義時,系統不會對其初始化;
作用域為函數或一個代碼塊;
局部變量儲存在棧里,離開作用域就會無效。

在局部變量前面加上關鍵字 static,該變量變為靜態局部變量。

變量在定義時,必須初始化,如果沒有初始化,系統會自動對其初始化,如 int 型初始化為 0;
儲存在全局變量區,一直存在直到程序運行結束。

靜態局部變量相當於一個全局變量!!!

全局變量

全局變量是在函數體外部聲明的變量。

在全局變量區分配存儲空間,且編譯器會自動對其初始化;
作用域為整個程序,即包括所用的源文件和頭文件;
其他文件可以使用extern外部聲明后直接使用,其他文件不能定義相同的變量。

同樣,在全局變量前面加上關鍵字 static,該變量變為靜態全局變量。

只能在本文件中訪問,不能在其它文件中訪問,即便是extern外部聲明也不可以;
作用域只在本文件;
其他文件可以定義與其同名的變量,兩者互不影響。

2.函數

函數就是完成特定任務的獨立程序代碼單元。
static 在函數的使用方法是在函數的返回類型前面加上 static。其作用與全局變量類似。

靜態函數只在聲明它的文件中可見,其他文件不能引用該函數;
其他文件可以定義與其同名的變量,兩者互不影響;

在類中的作用

一個類包含 數據成員 和 成員函數;

數據成員

在數據成員前加上 static 關鍵字,聲明靜態數據成員。

靜態數據成員存儲在全局變量區,靜態數據成員在定義時分配存儲空間;
在使用之前必須初始化,它的初始化在main()之前;
靜態數據成員不屬於任何對象。即使不定義類的任何對象它們也存在,在整個程序中只有一個,而且所有對象都可以對它進行操作;

與靜態全局變量相比,靜態數據成員變量不與程序中的其他全局變量沖突。

成員函數

在成員函數前加上 static 關鍵字,聲明靜態成員函數。其作用與靜態數據成員類似。

靜態成員函數不屬於任何對象。調用時,它們無 this 指針,任何對象都可以調用;
靜態成員函數不能為 virtual、const 或 volatile;
靜態成員函數的地址可以存儲在常規的函數指針中,但不能存儲於成員函數指針中;

總結

這是我寫的第一篇,有很多不足之處,但寫下去就一定有進步。
static這個關鍵字很有用,可以盡量將只在本文件使用的全局變量和函數使用 static 關鍵字聲明,同樣,如果類中有一個數據成員對於所有對象來說,如球都是圓的等等,盡量使用 static 聲明。

參考:
cppreference.com
C語言中的static 詳細分析


免責聲明!

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



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