C++ Academy · Ders

Lvalue ve Rvalue Ayrımı

Değer kategorileri hakkında akıl yürütün: lvalue, prvalue ve xvalue

1. ders / 413 adım

Lvalue ve Rvalue Ayrımı, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 1. 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.

İki Dünya: Sol Değer ve Sağ Değer

C++'taki her ifade ya bir lvalue (adı ve adresi olan bir varlık) ya da bir rvalue (adı olmayan geçici bir değer) olur.

Sol Değerler

Bir lvalue, kalıcı bir nesneye başvurur; adresini & ile alabilirsiniz.

int x = 42;           // x is an lvalue
int* p = &x;          // taking the address of an lvalue

int& r = x;           // r is an lvalue reference

Sağ Değerler

Bir rvalue geçicidir; sabitleri, işlev dönüş değerlerini ve a + b gibi ifadeleri kapsar. Adresini alamazsınız.

int a = 5, b = 3;
int c = a + b;        // (a + b) is an rvalue
// int* p = &(a + b); // ERROR: cannot take address of an rvalue

Bu Ayrım Neden Önemlidir?

Bir rvalue yok edilmek üzeredir. Onu kopyalamak yerine kaynaklarını güvenle alabiliriz; taşıma semantiğinin temeli budur.

C++11'den Beri Üç Kategori

Modern C++, modeli daha ayrıntılı hâle getirir:

  • lvalue — adı ve kimliği vardır
  • prvalue (saf rvalue) — salt geçicidir (bir sabit veya değer döndüren sonuç)
  • xvalue (süresi dolan) — yok olmak üzeredir (std::move sonucu)

lvalue ve rvalue Referansları

Bir lvalue referansı & kullanır; bir rvalue referansı ise && kullanır.

int x = 10;
int&  lr = x;        // lvalue reference
int&& rr = 42;       // rvalue reference, binds to literal

Bağlama Kuralları

Tür uyumluluğu:

  • lvalue referansı (T&) lvalue'lara bağlanır
  • const lvalue referansı (const T&) her ikisine de bağlanır
  • rvalue referansı (T&&) yalnızca rvalue'lara (ve xvalue'lara) bağlanır

decltype ile Kontrol

Bir ifadeyi decltype ile kullanarak derleyiciye ifadenin hangi kategoriye ait olduğunu sorabilirsiniz.

int x = 10;
static_assert(std::is_lvalue_reference<decltype((x))>::value);
// the extra parentheses make decltype yield the lvalue ref

C++11 Neden rvalue Referanslarını Ekledi?

Taşıma semantiğini etkinleştirmek için: T&& alan bir kurucu, geçicinin iç verilerinin sahipliğini alarak derin kopyayı önleyebilir.

Yaygın Hata: Adlandırılmış rvalue Referansı Bir lvalue'dur

Bir rvalue referans değişkeni bildirildikten sonra bir adı olur ve lvalue hâline gelir. Onu rvalue olarak iletmek için std::move kullanın.

void f(std::string&& s) {
    // s here is an lvalue!
    process(std::move(s));   // now it is an rvalue again
}

Mükemmel İletime Giriş

T&& alan şablonlar, bir lvalue veya rvalue referansı çıkarır. std::forward ile birleştirildiklerinde değer kategorisini koruyabilirler; bu konu ileride ayrıntılı olarak ele alınacaktır.

Hızlı Kontrol

Bu ifadelerden hangisi bir rvalue'dur?

Özet

Bir lvalue'nun adı ve adresi vardır; bir rvalue geçicidir. T& lvalue'lara, T&& ise rvalue'lara bağlanır. Bu ayrım, geçicilerin gereksiz kopyalanmasını önleyen taşıma semantiğini mümkün kılar.

Başlamak ücretsiz

Yapay zeka eğitmeniyle C++ öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
51
Dersler
203

Sıkça Sorulan Sorular

“Lvalue ve Rvalue Ayrımı” dersi ücretsiz mi?

Evet — “Lvalue ve Rvalue Ayrımı” 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.

“Lvalue ve Rvalue Ayrımı” dersinde ne öğreneceğim?

Değer kategorileri hakkında akıl yürütün: lvalue, prvalue ve xvalue 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 1. dersidir.

“Lvalue ve Rvalue Ayrımı” 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. Lvalue ve Rvalue Ayrımı
  2. Rvalue Referansları ve && Söz Dizimi
  3. std::move ve std::forward
  4. Taşıma Yapıcıları ve Taşıma Ataması
← C++ Academy Sayfasına Dön