Referensi Rvalue dan Sintaks &&
Ikat sementara dengan referensi rvalue untuk pemindahan sumber daya yang efisien
Referensi Rvalue dan Sintaks && adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.
Sintaks &&
Referensi rvalue dideklarasikan dengan T&&. Referensi ini hanya terikat pada rvalue — nilai sementara yang akan segera berakhir.
int&& ref = 42; // OK: binds to literal
int x = 10;
// int&& bad = x; // ERROR: x is an lvalueMengapa Menggunakan Referensi Rvalue?
Referensi ini memungkinkan Anda menulis fungsi yang mengetahui bahwa argumen akan segera dihancurkan. Anda dapat mengambil sumber dayanya tanpa membuat salinan.
Kelebihan Beban Fungsi berdasarkan Tipe Referensi
Anda dapat membuat kelebihan beban fungsi untuk T& dan T&&. Kompiler memilih yang tepat berdasarkan kategori argumennya.
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)); // rvalueReferensi Rvalue Bernama Menjadi Lvalue
Setelah Anda memberi nama pada referensi rvalue, nama tersebut menjadi lvalue — identitasnya sudah ditetapkan. Gunakan std::move untuk mengembalikan sifat rvalue.
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 adalah Konversi Tipe
std::move(x) tidak memindahkan apa pun dengan sendirinya — ini adalah konversi tipe yang mengembalikan x sebagai referensi rvalue. Pemindahan sebenarnya terjadi di konstruktor penerima.
// equivalent to
static_cast<std::string&&>(s)Mengapa Disebut Move
Nama tersebut mencerminkan penggunaan umumnya — meneruskan objek yang isinya ingin Anda ambil alih — tetapi nama itu sendiri tidak memindahkan apa pun.
Referensi Universal (Referensi Penerusan)
Ketika T&& muncul dalam templat dengan T yang disimpulkan, referensi tersebut merupakan referensi penerusan — dapat terikat pada lvalue maupun rvalue, serta mempertahankan kategorinya.
template <typename T>
void wrapper(T&& arg) {
process(std::forward<T>(arg));
}Penggabungan Referensi
Ketika referensi ditumpuk melalui templat, bahasa tersebut menggabungkannya:
T& &→T&T& &&→T&T&& &→T&T&& &&→T&&
Kapan Tidak Menggunakan Move
Untuk tipe yang dapat disalin secara trivialis (int, double, penunjuk), pemindahan sama dengan penyalinan. Memanggil std::move tidak memberikan manfaat dan dapat membingungkan pembaca.
Memindahkan tanpa Memiliki Sumber Daya
Untuk tipe tanpa sumber daya heap, konstruktor pemindahan sama dengan konstruktor penyalinan. Pemindahan hanya bermanfaat untuk tipe yang memiliki memori dinamis.
Jebakan Umum: Memindahkan dari const
std::move pada objek const tidak melakukan apa pun — konstruktor pemindahan tidak dapat dipanggil pada const karena konstruktor tersebut perlu mengubah sumbernya.
Pemeriksaan Singkat
Apa yang sebenarnya dilakukan oleh std::move(x)?
Ringkasan
T&& terikat pada rvalue. Referensi rvalue bernama menjadi lvalue — gunakan std::move untuk mengembalikannya. T&& dalam templat merupakan referensi penerusan. std::move adalah konversi tipe; fungsi ini tidak melakukan pemindahan itu sendiri.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Referensi Rvalue dan Sintaks &&” gratis?
Ya — teks lengkap “Referensi Rvalue dan Sintaks &&” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Referensi Rvalue dan Sintaks &&”?
Ikat sementara dengan referensi rvalue untuk pemindahan sumber daya yang efisien Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C++ Academy?
Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Referensi Rvalue dan Sintaks &&” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Lvalue vs Rvalue: Perbedaannya
- Referensi Rvalue dan Sintaks &&
- std::move dan std::forward
- Konstruktor Move dan Assignment Move