nested_exception چیست ؟ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

وبـــلاگ هــفت خــط کــد


آموزش های برنامه نویسی
۲۸۰ نفر آنلاین
۱۱۷ عضو و ۱۶۳ مهمان در سایت حاضرند

nested_exception چیست ؟

+2 امتیاز

سلام

چه مواقعی از این
exception  استفاده میکنیم ؟

و terminate چیه ؟ که وقتی این exception نال باشه تابع این را صدا میزنه ؟

ممنون

 

 

سوال شده شهریور 4, 1393  بوسیله ی Azar (امتیاز 628)   29 43 61
دوباره تگ گذاری شد مهر 9, 1393 بوسیله ی BlueBlade
برای terminate  این جا روببینید http://www.cplusplus.com/reference/exception/set_terminate/. این طور که نوشته شده موقعی به درد می‌خوره که exceptionی گرفته نشه که اون وقت تابع قرار داده شده فراخوانی می‌شه. برای nested exception  هم این جا مثالی هست: http://www.cplusplus.com/reference/exception/nested_exception/
و توضیحاتی هم اینجا: http://stackoverflow.com/questions/18108314/use-throw-with-nested-and-catch-nested-exception

1 پاسخ

+2 امتیاز
 
بهترین پاسخ

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 کرد .

پاسخ داده شده شهریور 5, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
انتخاب شد شهریور 5, 1393 بوسیله ی Ali Rahbar
...