Lvalue ve Rvalue Ayrımı
Değer kategorileri hakkında akıl yürütün: lvalue, prvalue ve xvalue
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 referenceSağ 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 rvalueBu 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::movesonucu)
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 literalBağ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 refC++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.
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
- Lvalue ve Rvalue Ayrımı
- Rvalue Referansları ve && Söz Dizimi
- std::move ve std::forward
- Taşıma Yapıcıları ve Taşıma Ataması