做网站平台成本,珠海自适应网站设计,什么网站做电子章做得好,萤栈WordPress分享一下我老师大神的人工智能教程#xff01;零基础#xff0c;通俗易懂#xff01;http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识#xff0c;造福人民#xff0c;实现我们中华民族伟大复兴#xff01;为了能够编写适当的catch子句#xff0c;了…分享一下我老师大神的人工智能教程零基础通俗易懂http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识造福人民实现我们中华民族伟大复兴为了能够编写适当的catch子句了解一个函数是否抛出异常或会抛出哪些异常对函数的用户来说是很有帮助的。而我们可以通过 异常说明 进行对一个函数的异常进行说明 如果函数抛出异常被抛出的异常将是包含在该说明中的一种或是从列出的异常中派生的类型。异常说明有如下的几种形式1. 指定异常T funNname parameterlist throw T1 T2····Tn其中 T 是类型 parameterlist 是参数列表 而类型 T1 T2····Tn 是函数会抛出的异常。2. 不抛出异常T funNname parameterlist throw 抛出异常类型列表为空表示的是该函数不抛出任何类型异常。3. 抛出任意类型的异常T funNname parameterlist 这表示该函数可以抛出任意类型的异常。下面通过一段简单的代码来说明异常说明的特别之处#include iostreamclass demo{};using namespace std; double divd(int a, int b) throw(int) //异常说明表示函数divd会抛出类型为int的异常{ if(b 0) throw demo(); //抛出类型为demo的异常 return a/b;}int main(){ try { divd(1,0); } catch(demo) //捕获异常类型demo { cout divided by zero endl; } catch(int) //捕获异常类型int { coutzeroendl; } return 0;}这段代码的运行结果是输出 divided by zero奇怪了在 divd 函数的声明中只说明了抛出类型为 int 的异常为什么其函数内抛出的异常类型却为demo呢 我们可以暂时理解为在某函数的异常说明中的列出的类型与该函数内抛出的异常类型不完全匹配时 但在异常处理代码中的catch有对其类型的捕获 所以程序运行正常。好下面我们根据异常说明进行一些修改double divd(int a, int b) throw( ) //将throw(int) 改为 throw( )修改之后编译运行看到的输出结果还是 divided by zero根据上面对异常说明的三种形式介绍我们知道在函数声明后面添加 throw的意思是说明了此函数不会抛出任何的异常。那为什么这里抛出了而且又被捕获呢其实在编译的时候编译器不能也不会试图验证异常说明。因不能在编译时检查异常说明异常说明的应用通常是有限的修改后的 divd 函数内继续编写有抛出异常的代码 编译后再次运行程序其输出结果也表示异常机制执行正常。 其原因就如上述所说的理解那样编译器不会对异常说明进行检测异常说明更多的是写给函数的用户看。而在一开始函数异常说明的类型与实际抛出的异常类型不匹配的情况中同样由于 “编译器不会对异常说明进行检测” 的原因所以编译通过异常机制运行正常。总结异常说明还是有用的但更多是写给函数用户看的。让函数用户清楚知道抛出的异常类型从而更好和正确地在运用此函数时编写对其的异常检测。由于初学者在学语法的时候更多的只是看书不进行实践验证。就算实践验证了也可能只是照书上代码敲看看运行结果是否一样。这里给出一个建议初学者在学习语法的时候应该多上机实践验证书上语法的准确性就算运行结果与书上一致也应该多动脑筋对其进行变形或改动。这样往往能学到的东西和印象都会更深的 给我老师的人工智能教程打callhttp://blog.csdn.net/jiangjunshow