Function Local Static: Birden Fazla Çağrıda Başlatma Davranışı
C++'da bir fonksiyon içinde static anahtar kelimesiyle tanımlanan değişkenler ilk çağrıda başlatılır ve bellekte kalır. Sonraki çağrılarda başlatılmaz; önceki değeri aynen tutarlar. Bu davranış, bir sayacı veya durumu korumanız gerektiğinde çok işe yarar.
Bu nasıl çalışır? Fonksiyon her çağrıldığında program akışı static satırını geçer, ancak başlatma kodu (örneğin int x = 0;) yalnızca ilk kez çalışır. Bellek adresi değişmez; değişken program boyunca aynı yerde kalır.
Aşağıdaki örneği adım adım inceleyelim:
1#include <iostream>2using namespace std;34void sayac() {5static int cagri_sayisi = 0;6cagri_sayisi++;7cout << "Fonksiyon " << cagri_sayisi << ". kez çağrıldı" << endl;8}910int main() {11sayac(); // 1. kez çağrı12sayac(); // 2. kez çağrı13sayac(); // 3. kez çağrı14return 0;15}Beklenen çıktı:
1Fonksiyon 1. kez çağrıldı2Fonksiyon 2. kez çağrıldı3Fonksiyon 3. kez çağrıldıİlk çağrıda cagri_sayisi 0 olarak başlatılır, sonra 1 artırılır ve 1 yazdırılır. İkinci çağrıda başlatma atlanır; değişken hala 1'dir, 1 artırılır ve 2 yazdırılır. Üçüncü çağrıda da aynı mantık: 2'den 3'e çıkar.
Eğer static olmasaydı:
1void sayac_hatasiz() {2int cagri_sayisi = 0; // static YOK3cagri_sayisi++;4cout << "Fonksiyon " << cagri_sayisi << ". kez çağrıldı" << endl;5}Her çağrıda çıktı "Fonksiyon 1. kez çağrıldı" olurdu; değişken her seferinde sıfırlanır.
Pratik kullanım: Fonksiyon kaç kez çağrıldığını tutmak, geçici bir durum korumak ya da başlatma maliyetli ise onu bir kez yapmak. Dikkat: static değişkenler thread-safe değildir; çok işlemli ortamda sorun yaratabilir.
0 yorum