首頁  >  文章  >  後端開發  >  成員函數中的靜態變數是否在類別的所有實例之間共用?

成員函數中的靜態變數是否在類別的所有實例之間共用?

Patricia Arquette
Patricia Arquette原創
2024-11-23 09:07:31226瀏覽

Are static variables in member functions shared across all instances of a class?

成員函數中的靜態變數:了解其行為

在C 中,成員函數中的靜態變數的行為與實例變數不同。讓我們用一個例子來探討它們是如何運作的:

考慮下面的類別:

class A {
   void foo() {
      static int i;
      i++;
   }
};

在這個類別中,i 在 foo 成員函數中被宣告為靜態變數。靜態變數的生命週期在整個程式中持續存在。

現在,讓我們考慮創建A 類別的多個實例時會發生什麼:

A o1, o2, o3;

是我在所有物件之間共享的靜態變數A 的實例,還是每個實例都有自己的副本?

在 C 中,成員函數中的靜態變數在類別的所有實例之間共用。這意味著在 A 的一個實例上呼叫 foo() 會為所有實例增加相同的 i。

為了說明此行為:

o1.foo(); // i = 1
o2.foo(); // i = 2
o3.foo(); // i = 3

在此範例中,A 的每個實例都會呼叫foo() 函數,遞增共用靜態變數 i。

因此,與每個實例都是唯一的實例變數不同,成員函數中的靜態變數是共享的單一實體由類別的所有實例。他們在整個計劃的整個生命週期中保持自己的價值觀。

以上是成員函數中的靜態變數是否在類別的所有實例之間共用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn