Rumah >pembangunan bahagian belakang >C++ >Adakah Pembolehubah Statik dalam Fungsi Ahli Bertambah untuk Semua Kejadian atau Hanya Contoh Panggilan?

Adakah Pembolehubah Statik dalam Fungsi Ahli Bertambah untuk Semua Kejadian atau Hanya Contoh Panggilan?

Patricia Arquette
Patricia Arquetteasal
2024-11-08 09:41:01589semak imbas

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

Pembolehubah Statik dalam Fungsi Ahli: Memahami Pengisytiharan Khusus Instance vs. Global

Dalam C , pembolehubah statik dalam fungsi ahli menunjukkan situasi yang unik di mana tingkah laku mereka berbeza daripada rakan sejawat mereka yang tidak statik. Mari kita terokai cara pembolehubah statik berfungsi dalam fungsi ahli.

Pertimbangkan definisi kelas berikut:

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

Jika anda mengisytiharkan berbilang kejadian kelas A, persoalan timbul: Adakah memanggil foo() dihidupkan sebarang contoh menambah pembolehubah statik i untuk semua kejadian atau hanya untuk contoh yang foo() dipanggil?

Jawapannya terletak pada sifat pembolehubah statik. Tidak seperti pembolehubah ahli biasa, yang khusus untuk setiap kejadian kelas, pembolehubah statik dikongsi antara semua kejadian kelas itu. Ini bermakna terdapat hanya satu kejadian pembolehubah statik i merentas semua kejadian kelas A.

Akibatnya, sebarang kejadian kelas A akan mempengaruhi i yang sama. Perkara yang sama saya akan kekal sepanjang hayat program ini. Untuk menggambarkan tingkah laku ini:

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

Dalam contoh ini, hanya ada satu yang saya kongsikan antara semua tika kelas A, dan memanggil foo() pada mana-mana tika menambah i. Tingkah laku perkongsian pembolehubah statik ini penting untuk diingat semasa mereka bentuk kelas dan fungsi ahlinya.

Atas ialah kandungan terperinci Adakah Pembolehubah Statik dalam Fungsi Ahli Bertambah untuk Semua Kejadian atau Hanya Contoh Panggilan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn