Đây là thiết lập.Điều gì sẽ xảy ra nếu tôi sử dụng "ném"; mà không có ngoại lệ để ném?
Tôi có chương trình C++ gọi một số chức năng, tất cả đều có khả năng ném cùng một ngoại lệ và tôi muốn cùng một hành vi cho các ngoại lệ trong mỗi hàm (ví dụ: thông báo lỗi in & đặt lại tất cả dữ liệu về mặc định cho exceptionA; chỉ cần in cho exceptionB; shut-down cleanly cho tất cả các ngoại lệ khác).
Nó có vẻ như tôi sẽ có thể thiết lập các hành vi đánh bắt để gọi một chức năng riêng mà chỉ đơn giản rethrows lỗi, và thực hiện các quảng cáo, như vậy:
void aFunction()
{
try{ /* do some stuff that might throw */ }
catch(...){handle();}
}
void bFunction()
{
try{ /* do some stuff that might throw */ }
catch(...){handle();}
}
void handle()
{
try{throw;}
catch(anException)
{
// common code for both aFunction and bFunction
// involving the exception they threw
}
catch(anotherException)
{
// common code for both aFunction and bFunction
// involving the exception they threw
}
catch(...)
{
// common code for both aFunction and bFunction
// involving the exception they threw
}
}
Bây giờ, những gì sẽ xảy ra nếu "xử lý" được gọi bên ngoài lớp ngoại lệ. Tôi biết rằng điều này sẽ không bao giờ xảy ra, nhưng tôi tự hỏi nếu hành vi này không được xác định bằng tiêu chuẩn C++.
Nó bị chấm dứt, nhưng bạn muốn tôi làm gì ?, cung cấp cho bạn trình biên dịch để thực thi chương trình này để bạn có thể xác minh kết quả. –
Tất cả trình biên dịch sẽ làm là biên dịch nó. Và nó sẽ biên dịch, bởi vì không có gì về định nghĩa * của xử lý để cảnh báo người dùng rằng nó chắc chắn sẽ yêu cầu một ngoại lệ được tải. Trình biên dịch không thể cho bạn biết nhiều hữu ích về hành vi không xác định, đặc biệt là một cái gì đó như thế này sẽ không được chọn cho đến thời gian chạy. – deworde