try, catch, throw
Kendalikan ralat dengan pengecualian
try, catch, throw ialah pelajaran C++ Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran C++ Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.
Menandakan Ralat dengan throw
Pernyataan throw menaikkan pengecualian, meninggalkan laluan semasa dan mencari pengendali di sepanjang tindanan panggilan.
#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
Kod yang mungkin melontar pengecualian diletakkan dalam blok try; pengendali yang sepadan mengikutinya 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 melalui Rujukan const
Sentiasa tangkap pengecualian melalui const&. Menangkap mengikut nilai akan memotong pengecualian terbitan dan menyalin tanpa keperluan.
Berbilang Blok catch
Senaraikan pengendali daripada yang paling khusus kepada yang paling umum. Blok pertama yang sepadan akan berjalan.
#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 Tindanan
Apabila pengecualian dilontar, tindanan diurai: setiap objek setempat antara lontaran dan pengendali dimusnahkan dalam susunan 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"; }
}Pengendali Tangkap Semua
Blok catch (...) menangkap apa-apa jenis pengecualian. Gunakannya secara berhemat, biasanya untuk melakukan pengelogan dan melontar semula.
Melontar Semula
Dalam pengendali, throw; tanpa argumen melontar semula pengecualian semasa dan mengekalkan jenisnya supaya pengendali luar boleh mengendalikannya.
#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 Piawai
Kebanyakan pengecualian standard terbit daripada std::exception, yang menyediakan what(). Menangkap std::exception akan mengendalikan kesemuanya.
Lontar Mengikut Nilai, Tangkap Mengikut Rujukan
Lontar objek pengecualian sementara mengikut nilai; masa jalan menyalinnya ke kawasan yang selamat. Tangkap mengikut rujukan untuk mengelakkan pemotongan.
Pengecualian berbanding Kod Ralat
Pengecualian memisahkan laluan ralat daripada laluan kejayaan dan tidak boleh diabaikan secara senyap — berbeza daripada kod pemulangan. Simpan pengecualian untuk keadaan yang benar-benar luar biasa.
Pengecualian Tidak Ditangkap Menamatkan Program
Jika tiada pengendali yang sepadan, std::terminate dipanggil dan program dihentikan. Sentiasa kendalikan pengecualian yang anda jangkakan.
Semakan Pantas
Uji pemahaman anda tentang pengendalian pengecualian.
Imbas Kembali
Anda telah mempelajari cara menaikkan ralat dengan throw, mengendalikannya dengan try/catch, serta cara penguraian tindanan memusnahkan objek setempat sepanjang proses tersebut. Tangkap melalui const&, susun pengendali daripada khusus kepada umum, dan lontar semula dengan throw; tanpa argumen.
Pelajari C++ dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 51
- Pelajaran
- 203
Soalan Lazim
Adakah pelajaran “try, catch, throw” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran C++ Academy, termasuk “try, catch, throw”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “try, catch, throw”?
Kendalikan ralat dengan pengecualian Anda berlatih C++ Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan C++ Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran C++ Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “try, catch, throw” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- try, catch, throw
- Keselamatan Pengecualian
- Penentu noexcept
- Jenis Pengecualian Tersuai