Vì vậy, tôi đã viết một số mã và tôi nhận thấy rằng ngoài lỗi cú pháp, loại và các lỗi biên dịch khác, C++ không ném bất kỳ ngoại lệ nào khác. Vì vậy, tôi quyết định thử nghiệm này ra với một chương trình rất tầm thường:Xử lý ngoại lệ C++
#include<iostream>
int main() {
std::count<<5/0<<std::endl;
return 1
}
Khi tôi biên soạn nó bằng cách sử g ++, g ++ đã cho tôi một cảnh báo nói rằng tôi đã được chia cho 0. Nhưng nó vẫn biên dịch mã. Sau đó, khi tôi chạy nó, nó in một số số tùy ý thực sự lớn. Khi tôi muốn biết là, C++ đối phó với các ngoại lệ như thế nào? Phân chia số nguyên bằng 0 phải là một ví dụ rất nhỏ khi một ngoại lệ nên được ném và chương trình sẽ chấm dứt.
Tôi có phải chủ yếu bao gồm toàn bộ chương trình của mình trong một khối thử lớn và sau đó bắt một số ngoại lệ nhất định không? Tôi biết trong Python khi một ngoại lệ được ném, chương trình sẽ ngay lập tức chấm dứt và in ra lỗi. C++ làm gì? Có ngay cả trường hợp ngoại lệ thời gian chạy mà dừng thực hiện và giết chương trình?
Cảm ơn điều đó có ý nghĩa. Một câu hỏi khác. Nếu thay vì sử dụng std :: cout, tôi sử dụng std :: cerr, điều này sẽ ném một ngoại lệ, hoặc chỉ in dòng lỗi? Và nếu tôi tạo ra ngoại lệ của riêng mình (cho phép nói foo) và trong mã của tôi tôi nói ném foo, chương trình của tôi sẽ bị giết ngay lập tức và foo.what() được in ra? Hay tôi phải nói rõ ràng C++ để làm như vậy? – user1413793
@ user1413793: Nếu bạn viết thư cho 'std :: cerr', nó sẽ chỉ in ra dòng lỗi. Bạn có thể gửi luồng đầu ra và luồng lỗi tới các vị trí khác nhau thông qua chuyển hướng trên dòng lệnh ('>' vs '2>'). Nếu bạn 'ném' một ngoại lệ, và bạn không bắt được nó ở bất cứ đâu, chương trình sẽ chấm dứt ngay lập tức và in một thông báo lỗi. (Chính xác hơn, một hàm gọi là 'std :: terminate' sẽ được gọi, có hành vi mặc định là chấm dứt chương trình và in thông điệp của exception. Bạn có thể ghi đè hành vi bằng cách gọi' std :: set_terminate'. quan tâm.) – HighCommander4