CodeBlanks Logo Icon CodeBlanks

rvalue referans

rvalue referans (&&) kavramını öğrenirsin.

rvalue referans (&&)

Bir rvalue referansı (T&&) geçici (temporary) değerlere bağlanır. Normal bir referans (T&) isimli değişkenlere bağlanırken, T&& sadece geçici nesnelere bağlanır.

Örnek: void show(std::string&& s); fonksiyonu sadece geçici dizelere çağrılabilir: show("Merhaba"); geçerlidir ama std::string x = "Merhaba"; show(x); derleme hatası verir. Çünkü x isimli bir değişken (lvalue) iken "Merhaba" geçici (rvalue) bir dizedir. rvalue referanslar, gereksiz kopyaları önleyip taşıma işlemlerini mümkün kılar.

lvalue ve rvalue farkı

C++'ta her ifade ya lvalue (bir ismi vardır, adresi alınabilir) ya da rvalue (geçici, adresi alınamaz) değeridir.

Örnek: int x = 5; satırında x lvalue, 5 rvalue'dur. x + 1 ifadesi de rvalue'dur çünkü sonucu bir adrese sahip değildir. Bir rvalue referansı (int&&) sadece rvalue'lara bağlanır: int&& r = 5; geçerlidir ama int&& r = x; hata verir. Bu ayrım, derleyicinin kopyalama mı yoksa taşıma mı yapacağına karar vermesini sağlar.

Uygulama rvalue referans fonksiyonu yaz

printValue adında bir fonksiyon tanımla. Parametresi std::string&& s olsun (rvalue referans). Gövdesi std::cout << s; olsun. main içinde printValue("Merhaba"); çağır.

Başlangıç kodu

main.cpp
#include <iostream>
#include <string>

// printValue fonksiyonunu tanımla

int main() {
    // printValue fonksiyonunu çağır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <string>

void printValue(std::string&& s) {
    std::cout << s;
}

int main() {
    printValue("Merhaba");
    return 0;
}

Beklenen çıktı

Merhaba

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 std::string&& hangi değere bağlanabilir?

main.cpp
void show(std::string&& s);
show(______);
  • İsimli bir değişkene (lvalue)
  • Bir dosyaya
  • Geçici bir değere (rvalue) Doğru cevap
  • Bir işaretçiye

Açıklama: rvalue referans geçici değerlere bağlanır.

2 rvalue referans parametresi

Soru
void show(std::string____ s) { std::cout << s; }
Cevap
void show(std::string&& s) { std::cout << s; }

Açıklama: && rvalue referans işaretidir.

3 İfadeyi türüne eşle

Kavram Anlamı
std::string&& rvalue referans
std::string& lvalue referans
"Merhaba" rvalue
x (değişken) lvalue

Orta seviye bölümündeki tüm dersler