0Pricing
C++ Academy · Pelajaran

Lvalue vs Rvalue: Perbedaannya

Pahami kategori nilai: lvalue, prvalue, dan xvalue

Lvalue vs Rvalue: Perbedaannya adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.

Dua Dunia: Lvalue dan Rvalue

Setiap ekspresi dalam C++ merupakan lvalue (sesuatu yang memiliki nama dan alamat) atau rvalue (sementara dan tidak memiliki nama).

Lvalue

lvalue merujuk pada objek yang tetap ada — Anda dapat mengambil alamatnya dengan &.

int x = 42;           // x is an lvalue
int* p = &x;          // taking the address of an lvalue

int& r = x;           // r is an lvalue reference

Rvalue

rvalue adalah sesuatu yang sementara — literal, nilai hasil pengembalian fungsi, atau ekspresi seperti a + b. Alamatnya tidak dapat diambil.

int a = 5, b = 3;
int c = a + b;        // (a + b) is an rvalue
// int* p = &(a + b); // ERROR: cannot take address of an rvalue

Mengapa Perbedaan Ini Penting

Rvalue akan segera dihancurkan. Kita dapat dengan aman mengambil alih sumber dayanya alih-alih menyalinnya — inilah dasar semantik pemindahan.

Tiga Kategori Sejak C++11

C++ modern menyempurnakan model ini:

  • lvalue — memiliki nama dan identitas
  • prvalue (rvalue murni) — nilai sementara murni (literal, pengembalian berdasarkan nilai)
  • xvalue (akan berakhir) — akan segera berakhir (hasil dari std::move)

Referensi lvalue vs rvalue

Referensi lvalue menggunakan &; referensi rvalue menggunakan &&.

int x = 10;
int&  lr = x;        // lvalue reference
int&& rr = 42;       // rvalue reference, binds to literal

Aturan Pengikatan

Kompatibilitas tipe:

  • referensi lvalue (T&) terikat pada lvalue
  • referensi lvalue const (const T&) terikat pada keduanya
  • referensi rvalue (T&&) hanya terikat pada rvalue (dan xvalue)

Memeriksa dengan decltype

Anda dapat menanyakan kepada kompiler kategori suatu ekspresi dengan menggunakan decltype padanya.

int x = 10;
static_assert(std::is_lvalue_reference<decltype((x))>::value);
// the extra parentheses make decltype yield the lvalue ref

Mengapa C++11 Menambahkan Referensi Rvalue

Untuk mengaktifkan semantik pemindahan: konstruktor yang menerima T&& dapat mengambil alih data internal sementara, sehingga menghindari penyalinan mendalam.

Kesalahan Umum: Referensi Rvalue Bernama adalah Lvalue

Variabel referensi rvalue, setelah dideklarasikan, memiliki nama — sehingga menjadi lvalue. Untuk meneruskannya sebagai rvalue, gunakan std::move.

void f(std::string&& s) {
    // s here is an lvalue!
    process(std::move(s));   // now it is an rvalue again
}

Pratinjau Penerusan Sempurna

Templat yang menerima T&& menyimpulkan referensi lvalue atau rvalue. Jika digabungkan dengan std::forward, templat tersebut dapat mempertahankan kategori nilai — yang akan dibahas secara mendetail nanti.

Pemeriksaan Singkat

Manakah dari ekspresi berikut yang merupakan rvalue?

Ringkasan

Lvalue memiliki nama dan alamat; rvalue bersifat sementara. T& terikat pada lvalue, sedangkan T&& terikat pada rvalue. Perbedaan ini memungkinkan semantik pemindahan — menghindari penyalinan yang tidak perlu pada nilai sementara.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Lvalue vs Rvalue: Perbedaannya” gratis?

Ya — teks lengkap “Lvalue vs Rvalue: Perbedaannya” 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 “Lvalue vs Rvalue: Perbedaannya”?

Pahami kategori nilai: lvalue, prvalue, dan xvalue 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 1 dari 4.

Berapa lama pelajaran “Lvalue vs Rvalue: Perbedaannya” 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