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.
Mengenal tiga kategori kesalahan pada C++ — compile error, link error, dan runtime error — beserta strategi menggeser kesalahan ke waktu kompilasi.
Buka → # ExceptionException sebagai mekanisme pelaporan kegagalan yang memisahkan titik deteksi dari titik penanganan, beserta konsep stack unwinding.
Buka → # try-catchMenulis blok try/catch: menangkap exception lewat const reference, menyusun beberapa handler, catch-all, dan urutan handler yang benar.
Buka → # Throwing ExceptionsPernyataan throw secara penuh: melempar by value dan menangkap by reference, rethrow dengan throw;, serta perilaku throw di dalam constructor.
Buka → # Standard ExceptionsHierarki std::exception: what(), keluarga logic_error dan runtime_error, bad_alloc, bad_cast, dan cara memilih tipe yang tepat.
Buka → # Custom ExceptionsMembangun class exception sendiri dengan mewarisi std::exception atau std::runtime_error, meng-override what() noexcept, dan membawa data domain.
Buka → # Exception Safety GuaranteesTiga tingkat jaminan exception safety — basic, strong, dan noexcept — serta idiom copy-and-swap untuk mencapai jaminan kuat.
Buka → # noexceptnoexcept specifier dan operator, destruktor yang implicit noexcept, serta alasan move constructor noexcept mengubah perilaku realokasi vector.
Buka → # assert dan static_assertPelajari 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_codePelaporan kegagalan tanpa exception: errno yang lama, std::error_code dengan std::errc, dan overload filesystem yang menerima error_code.
Buka → # std::expectedstd::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 CodeMatriks keputusan antara exception dan pelaporan lewat nilai (error_code/expected): jenis kegagalan, biaya zero-cost versus mahal saat throw, dan gaya codebase.
Buka →