0Pricing
C++ Academy · Pelajaran

try, catch, throw

Tangani error dengan pengecualian

try, catch, throw adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.

Menandakan Kesalahan dengan throw

Pernyataan throw memunculkan pengecualian, meninggalkan jalur saat ini dan mencari penangan di sepanjang tumpukan pemanggilan.

#include <iostream>
#include <stdexcept>

int main() {
    try {
        throw std::runtime_error("boom");
    } catch (const std::exception& e) {
        std::cout << e.what() << "\n";
    }
}

try dan catch

Kode yang mungkin melempar pengecualian ditempatkan dalam blok try; penangan yang sesuai mengikuti dalam blok catch.

#include <iostream>
#include <stdexcept>

int divide(int a, int b) {
    if (b == 0) throw std::invalid_argument("divide by zero");
    return a / b;
}

int main() {
    try {
        std::cout << divide(10, 0) << "\n";
    } catch (const std::invalid_argument& e) {
        std::cout << "error: " << e.what() << "\n";
    }
}

Tangkap dengan Referensi const

Selalu tangkap pengecualian dengan const&. Menangkap berdasarkan nilai akan memangkas pengecualian turunan dan menyalinnya tanpa perlu.

Beberapa Blok catch

Urutkan penangan dari yang paling spesifik hingga yang paling umum. Blok pertama yang cocok akan dijalankan.

#include <iostream>
#include <stdexcept>

int main() {
    try {
        throw std::out_of_range("bad index");
    } catch (const std::out_of_range& e) {
        std::cout << "range: " << e.what() << "\n";
    } catch (const std::exception& e) {
        std::cout << "other: " << e.what() << "\n";
    }
}

Penguraian Tumpukan

Saat pengecualian dilemparkan, tumpukan diurai: setiap objek lokal antara titik pelemparan dan penangan dihancurkan dalam urutan terbalik.

#include <iostream>
#include <stdexcept>

struct Trace {
    ~Trace() { std::cout << "unwound\n"; }
};

void f() {
    Trace t;
    throw std::runtime_error("x");
}

int main() {
    try { f(); } catch (...) { std::cout << "caught\n"; }
}

Penangan Semua Pengecualian

Blok catch (...) menangkap jenis pengecualian apa pun. Gunakan dengan hemat, biasanya untuk mencatat dan melemparnya kembali.

Melempar Kembali

Di dalam penangan, throw; tanpa argumen melempar kembali pengecualian saat ini dan mempertahankan jenisnya, sehingga penangan di luar dapat menanganinya.

#include <iostream>
#include <stdexcept>

void inner() { throw std::runtime_error("deep"); }

void middle() {
    try { inner(); }
    catch (...) { std::cout << "logged\n"; throw; }   // rethrow
}

int main() {
    try { middle(); } catch (const std::exception& e) { std::cout << e.what() << "\n"; }
}

Hierarki Pengecualian Standar

Sebagian besar pengecualian standar diturunkan dari std::exception, yang menyediakan what(). Menangkap std::exception akan menangani semuanya.

Lempar Berdasarkan Nilai, Tangkap Berdasarkan Referensi

Lempar objek pengecualian sementara berdasarkan nilai; waktu proses menyalinnya ke area yang aman. Tangkap berdasarkan referensi untuk menghindari pemangkasan.

Pengecualian vs Kode Kesalahan

Pengecualian memisahkan jalur kesalahan dari jalur normal dan tidak dapat diabaikan secara diam-diam—berbeda dari kode hasil. Gunakan pengecualian untuk situasi yang benar-benar luar biasa.

Pengecualian yang Tidak Tertangkap Menghentikan Program

Jika tidak ada penangan yang cocok, std::terminate dipanggil dan program dibatalkan. Selalu tangani pengecualian yang Anda perkirakan.

Pemeriksaan Cepat

Uji pemahaman Anda tentang penanganan pengecualian.

Ringkasan

Anda telah mempelajari cara menaikkan kesalahan dengan throw, menanganinya dengan try/catch, serta cara penguraian tumpukan menghancurkan objek lokal di sepanjang jalurnya. Tangkap dengan const&, urutkan penangan dari yang spesifik ke yang umum, dan lempar kembali dengan throw; tanpa argumen.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “try, catch, throw” gratis?

Ya — teks lengkap “try, catch, throw” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “try, catch, throw”?

Tangani error dengan pengecualian Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C++ Academy?

Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “try, catch, throw” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?

Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. try, catch, throw
  2. Keamanan Pengecualian
  3. Penentu noexcept
  4. Tipe Pengecualian Kustom
← Kembali ke C++ Academy