rvalue referans
- C++ kursu
- Orta seviye
- Ders 100/116
- 5 dk
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
#include <iostream>
#include <string>
// printValue fonksiyonunu tanımla
int main() {
// printValue fonksiyonunu çağır
return 0;
}Örnek çözüm
#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?
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
void show(std::string____ s) { std::cout << s; }
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 |