std::terminate برنامه رو میبنده و زمانی صدا زده میشه که exception برگشت داده بشه ولی جایی catch نشده باشه :
مثلا برنامه زیر با صدا زده شدن terminate بسته میشه .
#include <iostream>
void foo(int a){
if (a < 0)
throw("NEGATIVE NUMBERS NOT ALLOWED");
}
int main() {
foo(-1);
return 0;
}
std::nested_exception که از c++11 هم اضافه شده به شما اجازه میده چند تا exception رو از داخل توابع تو در تو با هم برگردونید .
مثالی که داخل این سایت هست رو ببینید : http://en.cppreference.com/w/cpp/error/nested_exception
چه مواقعی از این
exception استفاده میکنیم ؟
جاهایی که ممکنه کاربر اطلاعات نادرستی وارد کنه یا این که اطلاعات ورودی برنامه فرمت اشتباهی داشته باشن.
.نکته ای که هست اینه این که exception زمان اجرا کنترل میشه که روی سرعت برنامه تاثیر داره .میشه زمان کامپایل با static_assert و زمان دیباگ برنامه با assert هم ورودی توابع رو چک کرد .
تعدادی از توابع C++ هم exception بر میگردونن مثلا خود new اگر نتونه حافظه بگیره exception برمیگردونه یا تابع stoi که برای تبدیل رشته به عدد استفاده میشه اگر رشته ورودی مشکل داشته باشه exception بر می گردونه بعضی وقت ها نیاز میشه این exception ها catch بشن مثلا همون new رو در نظر بگیرید اگر دیگه حافظه در دسترس نباشه exception بر میگردونه با catch کردن new میشه فهمید که حافظه موجود نیست و الگوریتم هایی که حافظه کمتری مصرف می کنن رو استفاده کرد یا منابعی که اضافی هستن رو delete کرد .