Tutorial C++ Modern
Tutorial ini bertujuan untuk memberikan referensi cepat bagi pengembang berpengalaman mengenai fitur-fitur baru C++11/14/17/20. Ini mencakup peningkatan kenyamanan bahasa, peningkatan runtime, container baru, pointer cerdas dan manajemen memori, ekspresi reguler, pemrograman konkuren, serta gambaran singkat tentang C++20.
Pelajaran
Gambaran Umum Kursus
📚 Ringkasan Konten
Tutorial ini dirancang untuk memberikan referensi cepat bagi pengembang berpengalaman mengenai fitur-fitur baru C++11/14/17/20. Konten mencakup peningkatan kenyamanan bahasa, peningkatan runtime, penggunaan container baru, pointer pintar dan manajemen memori, ekspresi reguler, pemrograman konkuren, serta gambaran awal tentang C++20.
Cepat pahami C++11/14/17/20 dan langkah menuju dunia pemrograman C++ modern.
Penulis: 欧长坤 (Ou Changkun)
Ucapan Terima Kasih: Dilisensikan di bawah lisensi CC BY-NC-ND 4.0, terima kasih kepada semua kontributor GitHub dan dukungan komunitas terkait.
🎯 Tujuan Pembelajaran
- Mengidentifikasi dan memverifikasi lingkungan kompiler C++ dan arsitektur target menggunakan alat baris perintah.
- Menjelaskan kompatibilitas standar dan sejarah tumpang tindih antara C (C89, C99, C11) dan C++ (C++98, C++1x).
- Menerapkan tautan lintas bahasa secara fungsional dengan menggunakan header
extern "C"dan alur kerja kompilasi multi-tahap. - Menyelesaikan ambiguitas pointer menggunakan
nullptrdan menerapkan logika compile-time menggunakanconstexprdanif constexpr. - Menyederhanakan deklarasi kompleks menggunakan
auto,decltype, dan alias tipe (using) sambil memastikan desain berbasis objek yang kuat denganoverridedanfinal. - Merancang kode yang sangat generik menggunakan template variadic, ekspresi lipat, dan deduksi parameter template non-type.
- Mendefinisikan dan menerapkan ekspresi Lambda dengan berbagai mode tangkapan (Nilai, Referensi, Ekspresi, dan Umum).
- Memanfaatkan
std::functiondanstd::binduntuk membuat pembungkus fungsi fleksibel dan aplikasi parsial fungsi. - Mengategorikan ekspresi menjadi Lvalue, Prvalue, dan Xvalue, serta menerapkan Semantik Pindah untuk mengoptimalkan manajemen sumber daya kelas.
- Membedakan antara model memori dan kasus penggunaan
std::array(ukuran tetap, stack) danstd::vector(ukuran dinamis, heap).
🔹 Pelajaran 1: Evolusi Historis C++ dan Lingkungan
Gambaran Umum: Pelajaran ini membahas dasar teknis lingkungan pengembangan C++ dan hubungan historisnya dengan bahasa C. Dijelaskan bagaimana standar C++ (C++98 hingga C++1x) tumpang tindih dengan standar C (C89 hingga C11), serta mekanisme khusus seperti extern "C" yang diperlukan untuk berhasil mengompilasi dan menghubungkan basis kode campuran C dan C++.
Hasil Pembelajaran:
- Mengidentifikasi dan memverifikasi lingkungan kompiler C++ dan arsitektur target menggunakan alat baris perintah.
- Menjelaskan kompatibilitas standar dan sejarah tumpang tindih antara C (C89, C99, C11) dan C++ (C++98, C++1x).
- Menerapkan tautan lintas bahasa secara fungsional dengan menggunakan header
extern "C"dan alur kerja kompilasi multi-tahap.
🔹 Pelajaran 2: Keringanan Bahasa: Sintaks Modern dan Template
Gambaran Umum: Pelajaran ini mengeksplorasi perkembangan C++ dari C++11 hingga C++20, dengan fokus pada peningkatan yang meningkatkan kejelasan kode, keamanan tipe, dan fleksibilitas template. Siswa akan menguasai fitur sintaks modern seperti inferensi tipe, evaluasi compile-time dengan constexpr, serta teknik template lanjutan termasuk template variadic dan ekspresi lipat.
Hasil Pembelajaran:
- Menyelesaikan ambiguitas pointer menggunakan
nullptrdan menerapkan logika compile-time menggunakanconstexprdanif constexpr. - Menyederhanakan deklarasi kompleks menggunakan
auto,decltype, dan alias tipe (using) sambil memastikan desain berbasis objek yang kuat denganoverridedanfinal. - Merancang kode yang sangat generik menggunakan template variadic, ekspresi lipat, dan deduksi parameter template non-type.
🔹 Pelajaran 3: Peningkatan Runtime: Lambdas dan Semantik Pindah
Gambaran Umum: Pelajaran ini membahas peningkatan runtime penting yang diperkenalkan dalam C++ modern (C++11/14), dengan fokus pada konstruksi pemrograman fungsional dan manajemen sumber daya yang efisien. Siswa akan menguasai ekspresi Lambda—termasuk tangkapan umum dan ekspresi C++14—serta mendalami mekanisme Semantik Pindah, Kategori Nilai (Lvalue/Rvalue), dan Pengiriman Sempurna untuk menghilangkan salinan mendalam yang tidak perlu dalam aplikasi performa tinggi.
Hasil Pembelajaran:
- Mendefinisikan dan menerapkan ekspresi Lambda dengan berbagai mode tangkapan (Nilai, Referensi, Ekspresi, dan Umum).
- Memanfaatkan
std::functiondanstd::binduntuk membuat pembungkus fungsi fleksibel dan aplikasi fungsi parsial. - Mengategorikan ekspresi menjadi Lvalue, Prvalue, dan Xvalue, serta menerapkan Semantik Pindah untuk mengoptimalkan manajemen sumber daya kelas.
🔹 Pelajaran 4: Container Modern: std::array
Gambaran Umum: Pelajaran ini memperkenalkan std::array, sebuah container yang diperkenalkan pada C++11 sebagai alternatif modern dari array gaya C tradisional. Pelajaran ini menjelajahi manfaat menggunakan container ukuran tetap yang mengemas array mentah sambil menyediakan antarmuka yang lebih aman, kompatibel dengan STL, dan alokasi memori berbasis stack.
Hasil Pembelajaran:
- Membedakan antara model memori dan kasus penggunaan
std::array(ukuran tetap, stack) danstd::vector(ukuran dinamis, heap). - Menginisialisasi dan mengelola
std::arraydengan benar menggunakan fungsi anggota seperti.size()dan.empty(). - Menerapkan algoritma Library Template Standar (STL) dan loop berbasis rentang ke objek
std::array.
🔹 Pelajaran 5: Pointer Pintar dan Manajemen Memori RAII
Gambaran Umum: Pelajaran ini memperkenalkan Resource Acquisition Is Initialization (RAII) sebagai filosofi dasar manajemen memori C++ modern. Pelajaran ini membahas transisi dari penanganan pointer manual ke manajemen otomatis menggunakan std::unique_ptr untuk kepemilikan eksklusif, std::shared_ptr untuk berbagi berbasis penghitung referensi, dan std::weak_ptr untuk memecahkan dependensi siklik.
Hasil Pembelajaran:
- Memahami dan menerapkan prinsip RAII untuk memastikan sumber daya dilepaskan saat keluar dari jangkauan.
- Menerapkan model kepemilikan bersama dan eksklusif menggunakan
std::shared_ptrdanstd::unique_ptr. - Mengidentifikasi dan menyelesaikan kebocoran memori akibat referensi siklik menggunakan
std::weak_ptr.
🔹 Pelajaran 6: Ekspresi Reguler dan Parsing String
Gambaran Umum: Pelajaran ini membahas implementasi Ekspresi Reguler menggunakan perpustakaan standar C++11 (std::regex) dan aplikasi praktisnya dalam parsing permintaan HTTP. Siswa akan belajar sintaks kuantifier regex, penggunaan std::smatch untuk menangkap hasil, serta integrasi arsitektural alat-alat ini dalam lingkungan server web berbasis template.
Hasil Pembelajaran:
- Mengidentifikasi dan menerapkan karakter khusus ekspresi reguler (kuantifier) untuk mendefinisikan pola string.
- Memanfaatkan
std::regexdanstd::smatchuntuk memvalidasi nama file dan mengekstrak data dari string. - Menerapkan logika inti server, termasuk parsing permintaan HTTP dan pemetaan sumber daya menggunakan model memori dan container C++ modern.
🔹 Pelajaran 7: Paralelisme, Konkurensi, dan Model Memori
Gambaran Umum: Pelajaran ini membahas pergeseran mendasar dalam C++11 menuju model multithreading yang distandarisasi. Pelajaran ini beralih dari manajemen thread dasar dan penguncian berbasis RAII ke primitif sinkronisasi lanjutan seperti future dan variabel kondisi, diakhiri dengan model memori C++11 yang ketat, operasi atomic, dan jaminan konsistensi memori.
Hasil Pembelajaran:
- Mengelola siklus hidup thread dan melindungi sumber daya bersama menggunakan
std::thread,std::mutex, dan pembungkus RAII (std::lock_guard,std::unique_lock). - Menerapkan alur kerja asinkron dan komunikasi thread menggunakan
std::future,std::packaged_task, danstd::condition_variable. - Menerapkan tipe
std::atomicdan memilih strategistd::memory_orderyang sesuai untuk memastikan visibilitas memori dan mencegah re-order instruksi ilegal.
🔹 Pelajaran 8: Perpustakaan Standar: Pembaruan Filesystem
Gambaran Umum: Pelajaran ini menjelajahi evolusi Perpustakaan Standar C++, dengan fokus pada fitur tingkat tinggi yang diperkenalkan di C++11 dan standar selanjutnya. Pelajaran ini menyoroti transisi dari implementasi spesifik platform atau rendah ke utilitas tingkat tinggi yang distandarisasi seperti std::filesystem dan alat konkurensi.
Hasil Pembelajaran:
- Mengidentifikasi komponen konkurensi utama yang ditambahkan ke Perpustakaan Standar dalam C++11.
- Mengenali
std::filesystemsebagai tambahan besar untuk manajemen path dan file modern. - Memahami peran abstraksi tingkat tinggi dalam modernisasi pengembangan C++.
🔹 Pelajaran 9: Fitur Modern Lainnya
Gambaran Umum: Pelajaran ini membahas sejumlah fitur penting yang diperkenalkan di C++11 dan diperhalus di standar selanjutnya untuk meningkatkan keamanan tipe, performa, dan keterbacaan kode. Siswa akan belajar tentang tipe long long int, spesifikasi pengecualian dengan noexcept, literal string dan pengguna definisi yang ditingkatkan, serta kendali halus atas pengalihan memori melalui alignof dan alignas.
Hasil Pembelajaran:
- Mengidentifikasi dan menerapkan tipe
long long intuntuk presisi bilangan bulat yang diperpanjang. - Menerapkan spesifier
noexceptuntuk mengoptimalkan penanganan pengecualian dan menggunakan operatornoexceptuntuk menanyakan keamanan fungsi. - Memanfaatkan Literal String Mentah untuk menyederhanakan definisi string kompleks dan membuat Literal Pengguna Definisi untuk sufiks tipe kustom.
🔹 Pelajaran 10: C++20: Masa Depan Bahasa
Gambaran Umum: Pelajaran ini memperkenalkan "Empat Pilar Besar" C++20: Konsep, Modul, Korutin, dan Rentang. Fitur-fitur ini mewakili evolusi paling signifikan bahasa sejak C++11, dengan fokus pada peningkatan keamanan template, efisiensi kompilasi, pemrograman asinkron, dan pemrosesan data gaya fungsional.
Hasil Pembelajaran:
- Mengidentifikasi dan menjelaskan empat fitur utama yang diperkenalkan dalam standar C++20.
- Menjelaskan peran Konsep dan Batasan dalam meningkatkan penanganan kesalahan template dan desain.
- Membedakan antara pendekatan berbasis header tradisional dan sistem Modul baru.