Penentu noexcept
Tandai fungsi yang tidak melempar pengecualian
Penentu noexcept adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.
Makna Deklarasi noexcept
Penentu noexcept menjanjikan bahwa fungsi tidak akan melempar pengecualian. Jika ternyata tetap melempar, program akan memanggil std::terminate.
#include <iostream>
int square(int x) noexcept {
return x * x;
}
int main() {
std::cout << square(5) << "\n";
}Mengapa Ini Penting
Mengetahui bahwa suatu fungsi tidak dapat melempar pengecualian memungkinkan kompiler dan pustaka melakukan optimasi—misalnya, memilih pemindahan daripada penyalinan saat wadah bertambah besar.
Operasi Pemindahan Sebaiknya noexcept
std::vector hanya menggunakan konstruktor pemindahan Anda saat melakukan realokasi jika konstruktor tersebut noexcept; jika tidak, std::vector akan menyalin demi keamanan. Jadi, tandai operasi pemindahan sebagai noexcept.
struct Buffer {
int* p;
Buffer(Buffer&& o) noexcept : p(o.p) { o.p = nullptr; }
};Destruktor Secara Bawaan Bersifat noexcept
Sejak C++11, destruktor secara implisit bersifat noexcept. Membiarkan pengecualian keluar dari destruktor akan menghentikan program.
noexcept Bersyarat
noexcept(expr) membuat jaminan bergantung pada nilai benar/salah saat kompilasi—berguna dalam templat yang meneruskan jaminan dari jenis lain.
template <class T>
void swapValues(T& a, T& b) noexcept(noexcept(T(std::move(a)))) {
T tmp = std::move(a);
a = std::move(b);
b = std::move(tmp);
}Menguji dengan Operator noexcept
noexcept(expr) sebagai operator menghasilkan true jika ekspresi tersebut dinyatakan tidak melempar pengecualian—berguna dalam templat.
#include <iostream>
int f() noexcept { return 1; }
int g() { return 2; }
int main() {
std::cout << noexcept(f()) << " " << noexcept(g()) << "\n"; // 1 0
}noexcept Adalah Bagian dari Jenis
Sejak C++17, noexcept menjadi bagian dari jenis penunjuk fungsi, sehingga fungsi yang dapat melempar pengecualian tidak dapat diikat ke penunjuk noexcept.
Jangan Memberikan Janji Berlebihan
Tandai fungsi sebagai noexcept hanya jika Anda yakin fungsi tersebut tidak dapat melempar pengecualian. Janji palsu yang dilanggar akan membuat seluruh program berhenti.
Kandidat yang Baik
Pertukaran, pemindahan, destruktor, pengambil sederhana, dan fungsi pembantu aritmetika merupakan kandidat alami untuk fungsi noexcept.
noexcept vs throw()
Spesifikasi dinamis throw() yang lama sudah tidak digunakan lagi dan telah dihapus. Gunakan noexcept sebagai gantinya dalam C++ modern.
Kinerja dan Keamanan
noexcept mendokumentasikan maksud sekaligus memungkinkan optimasi seperti pemindahan saat realokasi—anotasi kecil dengan dampak nyata.
Pemeriksaan Cepat
Uji pemahaman Anda tentang noexcept.
Ringkasan
Anda telah mempelajari bahwa penentu noexcept menjanjikan tidak adanya pengecualian, sehingga memungkinkan optimasi seperti pemindahan saat realokasi. Tandai operasi pemindahan, pertukaran, dan destruktor sebagai noexcept, gunakan bentuk bersyarat dalam templat, dan jangan pernah memberikan janji berlebihan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Penentu noexcept” gratis?
Ya — teks lengkap “Penentu noexcept” 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 “Penentu noexcept”?
Tandai fungsi yang tidak melempar 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 3 dari 4.
Berapa lama pelajaran “Penentu noexcept” 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