Kesalahan saat program berjalan tidak bisa dihindari, tetapi tanggapannya bisa dirancang. Section ini membahas exception dan try-catch, standard exceptions, noexcept, error_code, hingga std::expected sebagai alternatif modern tanpa exception.

# Compile-time vs Runtime Errors

Mengenal tiga kategori kesalahan pada C++ — compile error, link error, dan runtime error — beserta strategi menggeser kesalahan ke waktu kompilasi.

Buka →
# Exception

Exception sebagai mekanisme pelaporan kegagalan yang memisahkan titik deteksi dari titik penanganan, beserta konsep stack unwinding.

Buka →
# try-catch

Menulis blok try/catch: menangkap exception lewat const reference, menyusun beberapa handler, catch-all, dan urutan handler yang benar.

Buka →
# Throwing Exceptions

Pernyataan throw secara penuh: melempar by value dan menangkap by reference, rethrow dengan throw;, serta perilaku throw di dalam constructor.

Buka →
# Standard Exceptions

Hierarki std::exception: what(), keluarga logic_error dan runtime_error, bad_alloc, bad_cast, dan cara memilih tipe yang tepat.

Buka →
# Custom Exceptions

Membangun class exception sendiri dengan mewarisi std::exception atau std::runtime_error, meng-override what() noexcept, dan membawa data domain.

Buka →
# Exception Safety Guarantees

Tiga tingkat jaminan exception safety — basic, strong, dan noexcept — serta idiom copy-and-swap untuk mencapai jaminan kuat.

Buka →
# noexcept

noexcept specifier dan operator, destruktor yang implicit noexcept, serta alasan move constructor noexcept mengubah perilaku realokasi vector.

Buka →
# assert dan static_assert

Pelajari cara menjaga kontrak kode dengan assert untuk invariant runtime, static_assert untuk pemeriksaan compile time, dan efek NDEBUG pada build debug vs release.

Buka →
# error_code

Pelaporan kegagalan tanpa exception: errno yang lama, std::error_code dengan std::errc, dan overload filesystem yang menerima error_code.

Buka →
# std::expected

std::expected<T,E> dari C++23: membawa nilai atau galat dalam satu return value, akses has_value/value/error/value_or, operator bool, dan operasi monadic and_then, transform, or_else.

Buka →
# Memilih Exception atau Error Code

Matriks keputusan antara exception dan pelaporan lewat nilai (error_code/expected): jenis kegagalan, biaya zero-cost versus mahal saat throw, dan gaya codebase.

Buka →