0Pricing
C++ Academy · Ders

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 lvalue

rvalue 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)); // rvalue

Adlandı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

  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