static
Sayangnya, kata kunci memiliki beberapa arti yang tidak terkait dalam C ++
Ketika digunakan untuk anggota data itu berarti bahwa data dialokasikan di kelas dan bukan dalam hal.
Ketika digunakan untuk data di dalam suatu fungsi, itu berarti bahwa data dialokasikan secara statis, diinisialisasi saat pertama kali blok dimasukkan dan berlangsung hingga program berhenti. Juga variabel hanya terlihat di dalam fungsi. Fitur khusus statika lokal ini sering digunakan untuk menerapkan konstruksi malas lajang.
Ketika digunakan pada level unit kompilasi (modul) itu berarti bahwa variabel itu seperti global (yaitu dialokasikan dan diinisialisasi sebelum main
dijalankan dan dihancurkan setelah main
keluar) tetapi variabel tidak akan dapat diakses atau terlihat di unit kompilasi lainnya .
Saya menambahkan beberapa penekanan pada bagian yang paling penting untuk setiap penggunaan. Penggunaan (3) agak tidak disukai demi ruang nama yang tidak disebutkan namanya yang juga memungkinkan deklarasi kelas yang tidak diekspor.
Dalam kode Anda, static
kata kunci digunakan dengan arti nomor 2 dan tidak ada hubungannya dengan kelas atau instance ... itu adalah variabel dari fungsi dan hanya akan ada satu salinannya.
Seperti yang benar iammilind katakan namun bisa saja ada beberapa contoh dari variabel itu jika fungsi itu adalah fungsi templat (karena dalam kasus itu memang fungsi itu sendiri dapat hadir dalam banyak salinan berbeda dalam program). Bahkan dalam kasus kelas kursus dan instance tidak relevan ... lihat contoh berikut:
#include <stdio.h>
template<int num>
void bar()
{
static int baz;
printf("bar<%i>::baz = %i\n", num, baz++);
}
int main()
{
bar<1>(); // Output will be 0
bar<2>(); // Output will be 0
bar<3>(); // Output will be 0
bar<1>(); // Output will be 1
bar<2>(); // Output will be 1
bar<3>(); // Output will be 1
bar<1>(); // Output will be 2
bar<2>(); // Output will be 2
bar<3>(); // Output will be 2
return 0;
}
static int i
spesifik untuk contoh, sehingga misalnyao1.foo(); // i = 1
dan$o2.foo(); // i = 1
...?