Move semantics menjadi alasan banyak program C++ modern berjalan cepat. Kita memahami lvalue dan rvalue, move constructor dan move assignment, perfect forwarding, hingga copy elision yang memangkas salinan secara otomatis.
Perbedaan praktis lvalue (objek dengan identitas) dan rvalue (nilai sementara), bukti lewat operator & dan pilihan overload compiler.
Buka → # Value CategoriesTaksonomi resmi C++17: prvalue, xvalue, dan lvalue, plus klasifikasi ekspresi yang dibuktikan lewat decltype dan static_assert.
Buka → # rvalue ReferenceReferensi T&& yang mengikat nilai sementara, aturan perpanjangan umur temporary, dan pilihan overload antara const T& dan T&&.
Buka → # Move ConstructorMenulis move constructor `Nama(Nama&&) noexcept`: transfer pointer resource, moved-from state yang valid, dan bukti biayanya konstan.
Buka → # Move AssignmentMenulis operator=(T&&) noexcept: guard self-assignment, melepas resource lama dulu, dan peran noexcept pada realokasi std::vector.
Buka → # std::movestd::move tidak memindahkan apa pun — ia hanyalah cast ke rvalue; kesalahan umum, perilaku pada tipe fundamental, dan larangan di return.
Buka → # Perfect ForwardingMeneruskan argumen generik tanpa merusak kualitasnya: masalah overload berlipat ganda, deduksi T&& pada lvalue vs rvalue, dan std::forward.
Buka → # Forwarding ReferenceKapan T&& menjadi forwarding reference: konteks deduksi, auto&&, dan bedanya dengan rvalue reference murni pada member class.
Buka → # Reference CollapsingAturan runtuhnya referensi ke referensi: empat kombinasi, perannya dalam std::forward, dan collapsing pada alias template.
Buka → # Copy ElisionC++17 menjamin prvalue dikonstruksi langsung di tujuan tanpa copy/move — bukti dengan class tanpa copy/move constructor, dan batasan elision.
Buka → # Return Value OptimizationRVO versus NRVO: kapan dijamin standar, kapan opsional, batasan NRVO pada pernyataan bercabang, dan anti-pola return std::move.
Buka → # Rule of Zero, Three, FiveKapan menulis lima fungsi khusus, kapan cukup delegasi ke member, dan kapan melarang copy — aturan desain penutup section Move Semantics.
Buka →