《一》C++函数结束与异常处理:
(1)return:
(1.1)功能简介:
return语句用于结束当前正在执行的函数,并将控制权返回给调用此函数的函数。
(1.2)使用方法:
(1.2.1)不带返回值的return语句只能用于返回类型为void的函数。
(1.2.2)任何返回类型不是void的函数都必须返回一个值,而且这个返回值的类型必须和函数的返回类型相同,或者能隐式转化为函数的返回类型。
如: return 0;
(3)try{ ...; throw }catch(){};
funA(){
//....
while(...){
if(...){
throw new exception;
}
}
}
funB(){
funA();
}
int main(){
try{
funB();
}catch(exception* e) {
//捕获到异常
}
}
解析:在函数A中,由于某种原因抛出了一个异常,这不但会退出循环,同时还会退出整个A函数。由于调用A函数的B没有捕获这个异常,因此B也要退出。异常继续往上传递,现在到了main函数,它里面使用try-catch捕获到了这个异常,因此进入了catch代码块。简而言之就是 throw一个异常会退出这个函数的调用堆栈,直到其上级堆栈有捕获为止。如果都没有捕获,那么程序退出。退出错误为,unhandled exception。
总结:throw 抛出异常后,程序会跳转到catch处,如果没有匹配的catch,则程序结束。
(4)setjmp的使用:
---------------------------------------
《二》程序终止执行:
C++程序的终止和C语言中的程序终止函数很类似
(1)•从main函数返回
(2)•exit()函数被调用
(3)•abort()函数被调用
(4)•抛出一个未被捕捉到的异常
(5)用户通过Ctrl+C或Ctrl+break操作来终止程序:
注意:利用exit()函数终止的程序,所有已经构造起来的静态对象的析构函数都将被调用,然而,如果程序是调用abort函数终止,那么析构函数都不会被调用。因此在析构函数里调用exit()函数可能会造成无穷递归。
-----------------------------------------------