Ngoại lệ rất hữu ích trong nhiều trường hợp.
Đầu tiên, có một số hàm trong đó chi phí tính toán điều kiện trước quá cao, tốt hơn là chỉ thực hiện tính toán và hủy bỏ với một ngoại lệ nếu nó được tìm thấy điều kiện trước không được đáp ứng. Ví dụ, bạn không thể đảo ngược một ma trận số ít, tuy nhiên, để tính toán xem nó có phải là số ít hay không, bạn tính toán định thức rất tốn kém: nó có thể phải được thực hiện bên trong hàm, vì vậy chỉ cần "thử" đảo ngược ma trận và báo cáo một lỗi nếu bạn không thể bằng cách ném một ngoại lệ. Về cơ bản, đây là một ngoại lệ khi sử dụng tiền điều kiện phủ định .
Sau đó, có những trường hợp khác mà mã của bạn đã phức tạp và việc chuyển thông tin lỗi lên chuỗi cuộc gọi là khó khăn. Điều này một phần là do C và C ++ có mô hình cấu trúc dữ liệu bị hỏng: có những cách khác, tốt hơn, nhưng C ++ không hỗ trợ chúng (chẳng hạn như sử dụng monads trong Haskell). Việc sử dụng này về cơ bản là tôi không thể bận tâm để làm đúng vì vậy tôi sẽ ném một ngoại lệ : nó không phải là cách đúng nhưng nó thực tế.
Sau đó, có việc sử dụng ngoại lệ chính: để báo cáo khi các điều kiện trước bên ngoài hoặc các bất biến, chẳng hạn như đủ tài nguyên như bộ nhớ hoặc dung lượng đĩa, không khả dụng. Trong trường hợp này, bạn thường sẽ chấm dứt chương trình hoặc một phần phụ chính của nó, và ngoại lệ là một cách tốt để truyền thông tin về sự cố. Ngoại lệ C ++ được thiết kế để báo cáo lỗi ngăn chương trình tiếp tục .
Mô hình xử lý ngoại lệ được sử dụng trong hầu hết các ngôn ngữ hiện đại bao gồm C ++ được biết là đã bị phá vỡ. Nó quá mạnh. Các nhà lý thuyết hiện đã phát triển các mô hình tốt hơn mô hình hoàn toàn mở "ném bất cứ thứ gì" và "có thể và có thể không bắt được nó". Ngoài ra, sử dụng thông tin loại để phân loại ngoại lệ không phải là một ý kiến hay.
Vì vậy, điều tốt nhất bạn có thể làm là ném các ngoại lệ một cách tiết kiệm, khi có lỗi thực sự và khi không còn cách nào khác để giải quyết và bắt các ngoại lệ càng gần điểm ném càng tốt .