0Pricing
C++ Academy · Pelajaran

Pass-by-Value vs Pass-by-Reference

Bandingkan perbedaan semantik dan kinerja antara penerusan berdasarkan nilai dan berdasarkan referensi

Pass-by-Value vs Pass-by-Reference 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.

Rangkuman Penerusan Berdasarkan Nilai

Saat Anda meneruskan argumen berdasarkan nilai, fungsi menerima salinan. Perubahan di dalam fungsi tidak memengaruhi pemanggil.

void increment(int x) {
    x++;          // modifies the copy
}

int n = 5;
increment(n);
std::cout << n;   // still 5

Penerusan Berdasarkan Referensi

Teruskan berdasarkan referensi menggunakan & dalam daftar parameter. Fungsi bekerja langsung pada variabel pemanggil.

void increment(int& x) {
    x++;
}

int n = 5;
increment(n);
std::cout << n;   // now 6

Mengapa Menggunakan Referensi?

Dua alasan:

  • Hindari penyalinan objek besar (kinerja)
  • Ubah variabel pemanggil (semantik)

Referensi Const: Pilihan Terbaik dari Keduanya

Referensi const menghindari penyalinan tanpa memberikan izin kepada fungsi untuk mengubah data. Gunakan referensi ini untuk parameter input yang tidak sepele.

void printName(const std::string& name) {
    std::cout << name;
}

Aturan Praktis

Untuk parameter fungsi:

  • Murah untuk disalin (int, double, pointer) → teruskan berdasarkan nilai
  • Mahal untuk disalin dan hanya dibaca → const T&
  • Fungsi mengubah data pemanggil → T&

Penerusan Berdasarkan Pointer

Pointer juga memungkinkan Anda mengubah variabel pemanggil—tetapi pemanggil harus mengambil alamatnya secara eksplisit dengan &, sehingga maksudnya terlihat.

void increment(int* x) {
    (*x)++;
}

int n = 5;
increment(&n);

Parameter Referensi vs Pointer

Referensi lebih sesuai ketika nilai selalu diperlukan. Pointer tepat digunakan ketika argumennya opsional—teruskan nullptr untuk melewatinya.

Pengembalian Berdasarkan Nilai

Pengembalian berdasarkan nilai merupakan bawaan. Berkat RVO (Optimasi Nilai Pengembalian) dan semantik pemindahan, cara ini biasanya sama cepatnya dengan pengembalian berdasarkan referensi—dan lebih aman.

Pengembalian Berdasarkan Referensi

Kembalikan referensi ketika fungsi mengembalikan objek yang sudah ada dan masa hidupnya lebih panjang daripada pemanggilan tersebut, misalnya anggota sebuah kontainer. Jangan pernah mengembalikan referensi ke variabel lokal.

Mencampur Gaya Penerusan dalam Templat

Templat sering menggunakan referensi universal (T&&) dan std::forward untuk mempertahankan kategori nilai. Kita akan membahasnya dalam kursus Semantik Pemindahan.

Kesalahan Umum: Pemotongan

Teruskan kelas turunan berdasarkan referensi atau pointer ke parameter basis. Penerusan berdasarkan nilai memotong bagian turunan dari objek.

class Base { /* virtual */ };
class Derived : public Base { /* members */ };

void takeByValue(Base b);    // SLICES Derived!
void takeByRef(Base& b);     // OK

Pemeriksaan Singkat

Bagaimana sebaiknya Anda meneruskan std::string besar yang hanya dibaca oleh fungsi?

Rangkuman

Penerusan berdasarkan nilai menyalin; penerusan berdasarkan referensi berbagi objek. Gunakan const T& untuk objek besar yang hanya dibaca, T& saat mengubah data pemanggil, dan teruskan tipe bawaan kecil berdasarkan nilai.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pass-by-Value vs Pass-by-Reference” gratis?

Ya — teks lengkap “Pass-by-Value vs Pass-by-Reference” 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 “Pass-by-Value vs Pass-by-Reference”?

Bandingkan perbedaan semantik dan kinerja antara penerusan berdasarkan nilai dan berdasarkan referensi 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 “Pass-by-Value vs Pass-by-Reference” 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. Mengapa Referensi Menjadi Alias bagi Variabel
  2. Pass-by-Value vs Pass-by-Reference
  3. Referensi const dan Kapan Menggunakannya
  4. Masa Hidup Referensi dan Referensi Menggantung
← Kembali ke C++ Academy