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
- try, catch, throw
- Keamanan Pengecualian
- Penentu noexcept
- Tipe Pengecualian Kustom