首頁 >後端開發 >C++ >成員函數中的靜態變數是針對所有實例遞增還是僅針對呼叫實例遞增?

成員函數中的靜態變數是針對所有實例遞增還是僅針對呼叫實例遞增?

Patricia Arquette
Patricia Arquette原創
2024-11-08 09:41:01651瀏覽

Do Static Variables in Member Functions Increment for All Instances or Only the Calling Instance?

成員函數中的靜態變數:了解實例特定與全域宣告

在C 中,成員函數中的靜態變數呈現一種獨特的情況它們的行為與非靜態對應物不同。讓我們探討靜態變數如何在成員函數中運作。

考慮以下類別定義:

class A {
   void foo() {
      static int i; // Static variable declaration
      i++;
   }
};

如果宣告類別A 的多個實例,就會出現問題:是否在下列位置呼叫foo()任何實例都會為所有實例或僅為呼叫foo() 的實例增加靜態變數i 嗎?

答案在於靜態變數的本質。與特定於類別的每個實例的普通成員變數不同,靜態變數在該類別的所有實例之間共用。這表示類別 A 的所有實例中只有一個靜態變數 i 的實例。

因此,類別 A 的任何實例都會影響同一個 i。在整個程式的生命週期中,我將保持不變。為了說明此行為:

A o1, o2, o3;
o1.foo(); // Increment i to 1
o2.foo(); // Increment i to 2
o3.foo(); // Increment i to 3
o1.foo(); // Increment i to 4

在此範例中,類別 A 的所有實例之間僅共用一個 i,並且在任何實例上呼叫 foo() 都會遞增相同的 i。在設計類別及其成員函數時,要牢記靜態變數的這種共享行為。

以上是成員函數中的靜態變數是針對所有實例遞增還是僅針對呼叫實例遞增?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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