CodeBlanks Logo Icon CodeBlanks

Capture modes

[=], [&], [this] ile capture modlarını öğrenirsin.

Capture modes

Capture clause, lambda'nın dışındaki değişkenleri nasıl yakalayacağını belirler. Üç temel mod vardır: [=] tüm değişkenleri değer ile yakalar (kopya), [&] tüm değişkenleri referans ile yakalar, [this] sınıfın this işaretçisini yakalar.

Değer ile yakalamada lambda bir kopya alır; dış değişkeni değiştirmez. Referans ile yakalamada lambda doğrudan dış değişkene erişir; değişiklik dışarıya yansır. Tek bir değişkeni de yakalayabilirsin: [&count] yalnızca count'u referans ile yakalar. Karışık mod da mümkün: [=, &count] tümünü değer ile, count'u referans ile yakalar.

Değer ve referans farkı

Değer ile yakalama [=] bir kopya oluşturur. Lambda içinde değişiklik yapsan bile dış değişken değişmez. Referans ile yakalama [&] doğrudan erişim sağlar; lambda içindeki değişiklik dış değişkeni etkiler.

Örnek: int n = 0; auto f = [&n]() { n++; }; f(); f(); çağrısından sonra n değeri 2 olur. Çünkü lambda n'yi referans ile yakaladı ve her çağrıda artırdı. Eğer [=] ile yakalasaydık n değişmezdi; lambda içindeki kopya artar ama dışarıya yansımazdı. Referans ile yakalamada dikkatli ol: lambda, referansın geçerli olduğu sürede kullanılmalıdır.

Uygulama Referans ile sayacı artır

int count = 0; tanımla. [&count]() { count++; } lambda'sını increment değişkenine ata. Lambda'yı iki kez çağır ve count değerini std::cout ile yazdır.

Başlangıç kodu

main.cpp
#include <iostream>

int main() {
    int count = 0;
    // referans capture ile count'u artıran lambda yaz ve iki kez çağır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>

int main() {
    int count = 0;
    auto increment = [&count]() { count++; };
    increment();
    increment();
    std::cout << count;
    return 0;
}

Beklenen çıktı

2

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Capture modunu anlamıyla eşle

Kavram Anlamı
[=] Değer ile yakala
[&] Referans ile yakala
[this] Sınıf işaretçisi
[&count] Tek değişken referans

2 Referans capture'ı tamamla

Soru
int count = 0;
auto f = [____]() { count++; };
Cevap
int count = 0;
auto f = [&count]() { count++; };

Açıklama: [&count] ile count referans olarak yakalanır.

3 Hangi capture modu dış değişkeni değiştirebilir?

main.cpp
int n = 0;
auto f = ???() { n++; };
  • [=] (değer ile)
  • [] (yakalama yok)
  • [this]
  • [&] (referans ile) Doğru cevap

Açıklama: [&] referans ile yakalar, dış değişkeni değiştirebilir.

Orta seviye bölümündeki tüm dersler