2011-12-21 19 views
5

Hiện tại chúng tôi chỉ ném về lỗi không thể phục hồi do nguồn bên ngoài (ví dụ như dữ liệu chẳng hạn) và có một lần thử duy nhất bắt xung quanh toàn bộ quá trình thực hiện.Ngoại lệ nên được sử dụng như thế nào trong C++ hiện đại?

Khi nào/Tại sao/Ngoại lệ nên được sử dụng trong C++ hiện đại như thế nào?

C++ 11 có thay đổi câu trả lời cho câu hỏi trên không?

+4

Exceptions nên được sử dụng cho điều kiện đặc biệt, những tình huống mà cần phải được thông qua lên các cuộc gọi stack vì bạn không thể có hiệu quả xử lý chúng ở cấp độ mà chúng đã xảy ra. –

+7

"Tôi không thích cú pháp và thêm độ phức tạp của ngoại lệ" - trái với việc kiểm tra mã lỗi mỗi khi bạn gọi một hàm? Có nhiều lý do để không thích ngoại lệ nhưng tôi không nghĩ đây là một trong số đó. –

+0

Trường hợp ngoại lệ tuyệt vời khi được sử dụng đúng cách. Chúng tôi sử dụng chúng cho những thứ như "vấn đề cấu hình" tức là bắt đầu một quá trình với một cấu hình xấu sẽ gây ra try/catch trong chính để bắt dòng cấu hình xấu. Chúng tôi cũng sử dụng rộng rãi chúng cho "lỗi đặc biệt", nếu chúng ta tìm thấy định dạng xấu trong một datastream đã biết, chúng ta đang đọc một ngoại lệ bị bắt ở mức cao "xấu messge" –

Trả lời

2

Về phần đầu tiên của câu hỏi (các phương pháp hay nhất), tham chiếu chuẩn là "Các vấn đề và ngoại lệ về an toàn ngoại lệ" của "Câu đố kỹ thuật, vấn đề lập trình và giải pháp" của Herb Sutter.

Phát biểu tại phần C++ 11 - tài liệu tham khảo sau đây có thể hữu ích:

tính năng

New ngoại lệ cụ thể đã được thêm vào:

http://www2.research.att.com/~bs/C++0xFAQ.html#rethrow

http://www2.research.att.com/~bs/C++0xFAQ.html#noexcept

Thậm chí dường như không liên quan các tính năng trên thực tế có liên quan rất nhiều đến mức ứng dụng của chúng đi: "Việc sử dụng unique_ptr bao gồm việc cung cấp sự an toàn ngoại lệ để phân bổ động d bộ nhớ [...]" http://www2.research.att.com/~bs/C++0xFAQ.html#std-unique_ptr

thông số kỹ thuật ngoại lệ đã được chấp nhận: http://herbsutter.com/2010/03/13/trip-report-march-2010-iso-c-standards-meeting/

Các vấn đề liên quan