Rvalue Referansları ve && Söz Dizimi
Kaynakları verimli biçimde aktarmak için geçici değerlere rvalue referanslarıyla bağlanın
Rvalue Referansları ve && Söz Dizimi, 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.
&& Sözdizimi
Bir rvalue referansı T&& ile bildirilir. Yalnızca yok olmak üzere olan geçicilere, yani rvalue'lara bağlanır.
int&& ref = 42; // OK: binds to literal
int x = 10;
// int&& bad = x; // ERROR: x is an lvaluervalue Referansları Neden Kullanılır?
Bağımsız değişkenin yok edilmek üzere olduğunu bilen işlevler yazmanızı sağlarlar. Kopya oluşturmadan kaynaklarını alabilirsiniz.
Referans Türüne Göre İşlev Aşırı Yükleme
Bir işlevi T& ve T&& için aşırı yükleyebilirsiniz. Derleyici, doğru işlevi bağımsız değişkenin kategorisine göre seçer.
void process(std::string& s) { std::cout << "lvalue\n"; }
void process(std::string&& s) { std::cout << "rvalue\n"; }
std::string s = "hi";
process(s); // lvalue
process("temp"); // rvalue
process(std::move(s)); // rvalueAdlandırılmış rvalue Referansları lvalue'lara Dönüşür
Bir rvalue referansına ad verdiğinizde, bu adın kendisi bir lvalue olur; kimliği belirlenmiş olur. rvalue özelliğini geri kazanmak için std::move kullanın.
void f(std::string&& s) {
// inside f, the parameter s is an lvalue
g(s); // passes s by lvalue
h(std::move(s)); // passes s as an rvalue
}std::move Bir Tür Dönüşümüdür
std::move(x) kendi başına hiçbir şeyi taşımaz; x'i rvalue referansı olarak döndüren bir tür dönüşümüdür. Gerçek taşıma, alan kurucuda gerçekleşir.
// equivalent to
static_cast<std::string&&>(s)Neden Move Denir?
Bu ad, içeriğini almayı amaçladığınız bir nesneyi geçirme şeklindeki tipik kullanımı yansıtır; ancak kendi başına hiçbir şeyi aktarmaz.
Evrensel Referanslar (Yönlendirme Referansları)
T&&, çıkarılmış bir T ile birlikte bir şablonda göründüğünde bir yönlendirme referansıdır; hem lvalue'lara hem de rvalue'lara bağlanır ve kategoriyi korur.
template <typename T>
void wrapper(T&& arg) {
process(std::forward<T>(arg));
}Referansların Çökertilmesi
Şablonlar aracılığıyla referanslar üst üste geldiğinde dil bunları birleştirir:
T& &→T&T& &&→T&T&& &→T&T&& &&→T&&
Move Kullanılmaması Gereken Durumlar
Kolayca kopyalanabilen türlerde (int, double, işaretçi) taşıma, kopyalamayla aynıdır. std::move çağırmak hiçbir yarar sağlamaz ve okuyucuların kafasını karıştırabilir.
Kaynak Sahipliği Olmadan Taşıma
Yığın kaynakları olmayan türlerde taşıma kurucusu, kopya kurucusuyla aynıdır. Taşıma yalnızca dinamik belleğin sahibi olan türlerde yararlıdır.
Yaygın Tuzak: const Değerden Taşıma
Bir const nesne üzerinde std::move etkisizdir; taşıma kurucusu const bir nesne üzerinde çağrılamaz, çünkü kaynak nesneyi değiştirmesi gerekir.
Hızlı Kontrol
std::move(x) gerçekte ne yapar?
Özet
T&& rvalue'lara bağlanır. Adlandırılmış rvalue referansları lvalue olur; rvalue özelliğini geri kazanmak için std::move kullanın. Şablondaki T&& bir yönlendirme referansıdır. std::move bir tür dönüşümüdür; taşıma işlemini kendisi gerçekleştirmez.
Sıkça Sorulan Sorular
“Rvalue Referansları ve && Söz Dizimi” dersi ücretsiz mi?
Evet — “Rvalue Referansları ve && Söz Dizimi” 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.
“Rvalue Referansları ve && Söz Dizimi” dersinde ne öğreneceğim?
Kaynakları verimli biçimde aktarmak için geçici değerlere rvalue referanslarıyla bağlanı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.
“Rvalue Referansları ve && Söz Dizimi” 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ı