0Pricing
C++ Academy · Ders

Lambda Yakalamaları: Değerle, Referansla, mutable

Yakalama yan tümcelerini bilinçli biçimde seçin ve lambda durumunu anlayın

Lambda Yakalamaları: Değerle, Referansla, mutable, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.

Yakalamaların Özeti

Lambda'nın yakalama yan tümcesi, kullanabileceği çevreleyen kapsamdaki değişkenleri listeler. Yakalama modu, her değişkene nasıl erişileceğini belirler.

Değerle Yakalama

& olmadan listelenen adlar, lambda oluşturulurken kopyalanır. Lambda kendi kopyasına sahip olur.

int n = 5;
auto f = [n]() { return n * 2; };
n = 10;
std::cout << f();   // 10 (captured n was 5)

Başvuruyla Yakalama

& içeren adlar, dış kapsamdaki değişkene başvuru olarak saklanır. Değişiklikler her iki yönde de aktarılır.

int counter = 0;
auto inc = [&counter]() { ++counter; };
inc(); inc();
std::cout << counter;   // 2

Varsayılan Yakalama: =

[=], lambda gövdesinde kullanılan her şeyi değerle yakalar. Kullanışlıdır, ancak şaşırtıcı olabilir: yalnızca başvurulan değişkenleri yakalar.

int a = 1, b = 2, c = 3;
auto f = [=]() { return a + c; };   // captures a and c (not b)

Varsayılan Yakalama: &

[&], kullanılan her şeyi başvuruyla yakalar. Dikkatli olun: lambda kapsamdan daha uzun yaşarsa yerel değişkenlere yapılan başvurular geçersizleşir.

int n = 0;
auto bad = [&]() { return n; };
return bad;        // n dies, lambda dangles

Modları Birlikte Kullanma

Varsayılan ve özel yakalamaları birleştirin. Varsayılanı geçersiz kılmak için tek tek değişkenleri listeleyin.

int a = 1, b = 2;
auto f = [=, &b]() {     // a by value, b by reference
    return a + b;
};

Değiştirilebilir Lambda İfadeleri

Değerle yakalanan değişkenler lambda içinde const durumundadır. Lambda'nın yakalanan kopyasını değiştirmesine izin vermek için mutable ekleyin.

int n = 5;
auto inc = [n]() mutable {
    ++n;
    return n;
};
inc(); inc();
std::cout << n;   // 5 (outer unchanged)

Başlatma Yakalamaları (C++14)

Bir ifade sonucunu yeni bir adla yakalayın. Bu özellik, taşıyarak yakalamayı ve hesaplanmış başlangıç değerlerini mümkün kılar.

auto ptr = std::make_unique<int>(42);
auto f = [p = std::move(ptr)]() {
    return *p;
};
// ptr is now empty; p owns the int inside the lambda

this Yakalama

Bir üye işlevinin içinde [this], this göstericisini yakalar; tüm üyelere lambda içinde erişilebilir.

*this Yakalama (C++17)

[*this], nesnenin tamamını lambda içine kopyalar. Lambda'nın özgün nesneden daha uzun yaşadığı durumlarda kullanışlıdır.

Yaygın Hata: Başvuruyla Yakalama ve Eşzamansız Çalışma

Eşzamansız çalışan bir lambda içine yerel değişkenleri hiçbir zaman başvuruyla yakalamayın; lambda çalıştırılmadan önce yerel değişkenlerin büyük olasılıkla ömrü sona erer.

// BUG
int local = 42;
std::async([&local]() { use(local); });   // local dies, lambda dangles

Hızlı Kontrol

Dış kapsamdaki bir std::unique_ptr nesnesinin sahipliğini lambda'nın elinde tutmasını sağlamak için hangi yakalama modu doğrudur?

Özet

Değerle yakalama kopyalar, başvuruyla yakalama ise diğer adını oluşturur. Varsayılan olarak [=] veya [&] kullanırken dikkatli olun. mutable, değerle yakalanan kopyaların değiştirilmesine izin verir. Başlatma yakalamaları (C++14), taşıyarak yakalamayı mümkün kılar.

Sıkça Sorulan Sorular

“Lambda Yakalamaları: Değerle, Referansla, mutable” dersi ücretsiz mi?

Evet — “Lambda Yakalamaları: Değerle, Referansla, mutable” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.

“Lambda Yakalamaları: Değerle, Referansla, mutable” dersinde ne öğreneceğim?

Yakalama yan tümcelerini bilinçli biçimde seçin ve lambda durumunu anlayın C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C++ Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Lambda Yakalamaları: Değerle, Referansla, mutable” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. İşlev Nesneleri ve İşlev Nesnesi Sınıfları
  2. Lambda Yakalamaları: Değerle, Referansla, mutable
  3. Genel Lambda'lar ve Kapanışlar C++14
  4. std::function ile Türü Silinmiş Çağrılabilirler
← C++ Academy Sayfasına Dön