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 5Penerusan 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 6Mengapa 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); // OKPemeriksaan 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
- Mengapa Referensi Menjadi Alias bagi Variabel
- Pass-by-Value vs Pass-by-Reference
- Referensi const dan Kapan Menggunakannya
- Masa Hidup Referensi dan Referensi Menggantung