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.

# lvalue dan rvalue

Perbedaan praktis lvalue (objek dengan identitas) dan rvalue (nilai sementara), bukti lewat operator & dan pilihan overload compiler.

Buka →
# Value Categories

Taksonomi resmi C++17: prvalue, xvalue, dan lvalue, plus klasifikasi ekspresi yang dibuktikan lewat decltype dan static_assert.

Buka →
# rvalue Reference

Referensi T&& yang mengikat nilai sementara, aturan perpanjangan umur temporary, dan pilihan overload antara const T& dan T&&.

Buka →
# Move Constructor

Menulis move constructor `Nama(Nama&&) noexcept`: transfer pointer resource, moved-from state yang valid, dan bukti biayanya konstan.

Buka →
# Move Assignment

Menulis operator=(T&&) noexcept: guard self-assignment, melepas resource lama dulu, dan peran noexcept pada realokasi std::vector.

Buka →
# std::move

std::move tidak memindahkan apa pun — ia hanyalah cast ke rvalue; kesalahan umum, perilaku pada tipe fundamental, dan larangan di return.

Buka →
# Perfect Forwarding

Meneruskan argumen generik tanpa merusak kualitasnya: masalah overload berlipat ganda, deduksi T&& pada lvalue vs rvalue, dan std::forward.

Buka →
# Forwarding Reference

Kapan T&& menjadi forwarding reference: konteks deduksi, auto&&, dan bedanya dengan rvalue reference murni pada member class.

Buka →
# Reference Collapsing

Aturan runtuhnya referensi ke referensi: empat kombinasi, perannya dalam std::forward, dan collapsing pada alias template.

Buka →
# Copy Elision

C++17 menjamin prvalue dikonstruksi langsung di tujuan tanpa copy/move — bukti dengan class tanpa copy/move constructor, dan batasan elision.

Buka →
# Return Value Optimization

RVO versus NRVO: kapan dijamin standar, kapan opsional, batasan NRVO pada pernyataan bercabang, dan anti-pola return std::move.

Buka →
# Rule of Zero, Three, Five

Kapan menulis lima fungsi khusus, kapan cukup delegasi ke member, dan kapan melarang copy — aturan desain penutup section Move Semantics.

Buka →