Rumah >pembangunan bahagian belakang >C++ >Mengapa C Tidak Membuang Pengecualian untuk Pembahagian Integer dengan Sifar, dan Bagaimana Kami Boleh Mengendalikannya?
Dalam coretan kod yang diberikan, pembahagian dengan sifar tidak mencetuskan pengecualian. Mengapakah ini berlaku dan bagaimanakah kita boleh memastikan pengecualian dilemparkan untuk ralat sedemikian?
Tidak seperti ralat masa jalan biasa yang lain, pembahagian integer dengan sifar bukanlah pengecualian dalam standard C . Pembahagian titik terapung atau operasi baki juga tidak semestinya membuang pengecualian. Sebaliknya, operasi ini mempunyai tingkah laku yang tidak ditentukan apabila operan kedua adalah sifar. Ini bermakna sistem berkemungkinan berkelakuan tidak dapat diramalkan, termasuk melontar pengecualian, ranap program atau bahkan melakukan tindakan di luar skop program.
Memandangkan standard C tidak mengendalikan pembahagian dengan sifar sebagai pengecualian, pembangun mesti menyemak keadaan sedemikian secara manual dan membuang pengecualian tersuai jika perlu. Contohnya, seseorang boleh membuang overflow_error atau domain_error untuk menunjukkan pembahagian dengan ralat sifar.
Coretan kod yang diubah suai berikut menunjukkan cara menangkap pembahagian dengan pengecualian sifar menggunakan intDivEx tersuai fungsi:
#include <iostream> #include <stdexcept> // Integer division, catching divide by zero. inline int intDivEx(int numerator, int denominator) { if (denominator == 0) throw std::overflow_error("Divide by zero exception"); return numerator / denominator; } int main() { int i = 42; try { i = intDivEx(10, 0); } catch (std::overflow_error &e) { std::cout << e.what() << " -> " << i << std::endl; } std::cout << i << std::endl; try { i = intDivEx(10, 2); } catch (std::overflow_error &e) { std::cout << e.what() << " -> " << i << std::endl; } std::cout << i << std::endl; return 0; }
Divide by zero exception -> 42 5
Kod ini dengan betul melempar dan menangkap pembahagian dengan pengecualian sifar, mengekalkan nilai asal i.
Atas ialah kandungan terperinci Mengapa C Tidak Membuang Pengecualian untuk Pembahagian Integer dengan Sifar, dan Bagaimana Kami Boleh Mengendalikannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!