0Pricing
C++ Academy · Pelajaran

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 lvalue

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

Referensi 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

  1. Lvalue vs Rvalue: Perbedaannya
  2. Referensi Rvalue dan Sintaks &&
  3. std::move dan std::forward
  4. Konstruktor Move dan Assignment Move
← Kembali ke C++ Academy