C++中static關(guān)鍵字有哪些用法 函數(shù)變量類成員的靜態(tài)特性

c++++中,Static關(guān)鍵字有三個(gè)主要用途:函數(shù)內(nèi)部的靜態(tài)變量、類中的靜態(tài)成員變量和靜態(tài)成員函數(shù)。1. 函數(shù)內(nèi)部的靜態(tài)變量:生命周期延長(zhǎng)至程序結(jié)束,保持狀態(tài)不重置,適用于記錄調(diào)用次數(shù)或緩存結(jié)果,僅函數(shù)內(nèi)可訪問(wèn);2. 類中的靜態(tài)成員變量:屬于整個(gè)類而非對(duì)象,所有實(shí)例共享一份數(shù)據(jù),需類外初始化,適合統(tǒng)計(jì)信息或共享配置;3. 類中的靜態(tài)成員函數(shù):無(wú)this指針,只能訪問(wèn)靜態(tài)成員,適合工具函數(shù)或操作靜態(tài)數(shù)據(jù)。此外,static還可用于限制全局變量和函數(shù)的作用域至當(dāng)前文件,防止命名沖突。掌握這些用法有助于編寫(xiě)高效清晰的c++代碼。

C++中static關(guān)鍵字有哪些用法 函數(shù)變量類成員的靜態(tài)特性

在C++中,static關(guān)鍵字的用途挺廣,而且用法容易混淆。它可以在函數(shù)內(nèi)部、類中、全局變量前使用,每種場(chǎng)景下的作用還不一樣。簡(jiǎn)單來(lái)說(shuō),它的核心作用是延長(zhǎng)生命周期、限制訪問(wèn)范圍、共享數(shù)據(jù)

C++中static關(guān)鍵字有哪些用法 函數(shù)變量類成員的靜態(tài)特性

下面從最常見(jiàn)的三個(gè)角度來(lái)說(shuō)明:

C++中static關(guān)鍵字有哪些用法 函數(shù)變量類成員的靜態(tài)特性


1. 函數(shù)內(nèi)部的靜態(tài)變量:保持狀態(tài)不重置

在函數(shù)內(nèi)部聲明一個(gè)static變量時(shí),這個(gè)變量的生命周期會(huì)一直持續(xù)到程序結(jié)束,而不是每次調(diào)用函數(shù)時(shí)都重新創(chuàng)建。

立即學(xué)習(xí)C++免費(fèi)學(xué)習(xí)筆記(深入)”;

舉個(gè)例子:

C++中static關(guān)鍵字有哪些用法 函數(shù)變量類成員的靜態(tài)特性

void countCall() {     static int count = 0;     count++;     std::cout << "Called " << count << " times." << std::endl; }

第一次調(diào)用輸出“Called 1 times.”,第二次就是“Called 2 times.”,不會(huì)因?yàn)楹瘮?shù)調(diào)用結(jié)束而被銷毀。

適用場(chǎng)景:

  • 需要記錄函數(shù)被調(diào)用了多少次
  • 緩存一些中間結(jié)果,避免重復(fù)計(jì)算

注意:這種變量只能在函數(shù)內(nèi)部訪問(wèn),外部拿不到,也不影響其他函數(shù)。


2. 類中的靜態(tài)成員變量:所有對(duì)象共享一份數(shù)據(jù)

在類里定義一個(gè)static成員變量時(shí),這個(gè)變量屬于整個(gè)類,而不是類的某個(gè)實(shí)例。也就是說(shuō),不管創(chuàng)建了多少個(gè)對(duì)象,這個(gè)變量只有一份拷貝。

比如:

class Student { public:     static int totalStudents; }; int Student::totalStudents = 0; // 必須在類外初始化

然后每次創(chuàng)建學(xué)生對(duì)象時(shí)可以增加這個(gè)值:

Student s1; Student::totalStudents++; // 正確:通過(guò)類名訪問(wèn)

關(guān)鍵點(diǎn):

  • 必須在類外單獨(dú)初始化
  • 所有對(duì)象共享同一份數(shù)據(jù)
  • 只能訪問(wèn)靜態(tài)成員函數(shù)中的靜態(tài)變量

這種方式適合統(tǒng)計(jì)、配置信息等需要多個(gè)對(duì)象共享的數(shù)據(jù)。


3. 類中的靜態(tài)成員函數(shù):只能訪問(wèn)靜態(tài)成員

靜態(tài)成員函數(shù)和普通成員函數(shù)的區(qū)別在于,它沒(méi)有this指針,因此不能訪問(wèn)非靜態(tài)成員變量或調(diào)用非靜態(tài)成員函數(shù)。

比如:

class Config { private:     static std::string version; public:     static std::string getVersion() {         return version; // OK,version 是靜態(tài)的     } };

但如果你在里面試圖訪問(wèn)非靜態(tài)變量就會(huì)報(bào)錯(cuò)。

使用建議:

  • 當(dāng)你需要一個(gè)工具函數(shù),不需要訪問(wèn)對(duì)象狀態(tài)時(shí),可以用靜態(tài)函數(shù)
  • 靜態(tài)函數(shù)通常用來(lái)操作靜態(tài)變量或者返回靜態(tài)信息

其他常見(jiàn)用法補(bǔ)充

除了上面三種主要用法,還有一些不太常提但也很實(shí)用的情況:

  • 靜態(tài)全局變量:在源文件中定義為static,這樣它只能在當(dāng)前文件中訪問(wèn),防止命名沖突。
  • 靜態(tài)函數(shù)(非類成員):類似靜態(tài)全局變量,限制其作用域在當(dāng)前文件內(nèi)。

總的來(lái)說(shuō),static關(guān)鍵字雖然看起來(lái)簡(jiǎn)單,但在不同上下文中有不同的語(yǔ)義和限制。理解清楚它在各個(gè)場(chǎng)景下的行為,能幫助你寫(xiě)出更清晰、高效的C++代碼。

基本上就這些了。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊12 分享