<C++学习十六>C++语句
摘要: 本篇博客仅作为笔记,如有侵权,请联系,立即删除(网上找博客学习,然后手记笔记,因纸质笔记不便保存,所以保存到网络笔记)
一、简单语句
二、语句作用域
以上两点都特别简单,任何书籍都有描写,并且在实践中很容易掌握。
三、条件语句
if语句和switch语句
关于switch的两点说明:1、case后面结束后必须加break,否则将在执行某个case之后的所有case语句都会继续执行;1、default可以省略。
四、循环语句
for(int it;condition of continue circular;variable update) while(condition) for(auto it:A)
关于while的一点说明,当while(1)时一般在内部会有break来终止程序结束,不然会进入死循环。
五、跳转语句
语法:break;continue;return [expression];goto identifier;
break语句与swhich条件语句以及do、for和while循环语句配合使用。
break语句只终止直接包围它的循环语句。你可以使用return或者goto语句从较深嵌套的结构转移控制权。
continue将不会执行当前迭代中的所有剩余语句,直接转到执行下一轮循环。
函数块中的控制流return expression。
goto identifier;(尽量避免使用,只有迫不得已才使用它,一般是在多层嵌套中)
由identifier指定的标记语句必须位于当前函数中。所有identifier名称都是内部命名空间的成员,因此不会干扰其他标识符。
六、try语句块和异常处理
异常是指存在于运行时的反常行为,这些行为超出了函数正常功能的范围。处理反常行为可能是设计所有系统最难的一部分。
异常处理机制为程序中异常检测和异常处理这两部分的协作提供支持。在C++语言中,异常处理包括:
· throw表达式。异常检测。
· try语句块。异常处理。
· 一套异常类,用于throw表达式和相关的catch子句之间传递异常的具体信息。
1、throw表达式
程序的异常检测部分使用throw表达式引发一个异常。throw表达式包括关键字throw和紧随其后的一个表达式,其中表达式的类型就是抛出的异常类型。throw表达式后面紧跟一个分号,从而构成一条表达式;
throw runtime_error("Data must refer to...");
抛出异常将终止当前的函数,并把控制权转移给能处理该异常的代码。
2、try语句块
try{ program-statements }catch(exception-declaration){ handler-statements }catch(exception-declaration){ handler-statements }
一如往常,try语句块内声明的变量在块外无法访问,特别是在catch子句内也无法访问。
函数在寻找处理代码的过程中退出。
一个try语句块可以调用了包含了另一个try语句块的函数,新的try语句块可能调用了包含又一个try语句块的新函数,一次类推(可以多层嵌套)。
寻找处理函数的过程与函数调用链刚好相反。当异常被抛出时,首先搜索抛出该异常的函数。如果没有找到catch子句,终止该函数,并在调用该函数的函数中继续寻找。以此类推,沿着程序的执行路径逐层回退,直到找到适当类型的catch为止(有点点类似递归)。
如果最终还是没能找到任何匹配的catch子句,程序转到名为terminate的标准函数。该函数的行为与系统有关,一般情况,执行该函数将导致程序非正常退出。
如果一段程序没有try语句块且发生了一场,系统会调用terminate函数并终止当前程序的运行。
注意:编写异常安全的代码非常困难(实践出真知)。异常终止了程序的正常流程。
对于一些程序来说,当异常发生时只是简单地终止程序。但对于那些要处理异常并继续执行的程序,就要加倍注意了。我们必须时刻清楚异常任何时候发生。异常发生后程序应该如何确保对象有效、资源无泄漏,程序处于合理状态,等等。
3、标准异常
C++标准库定义了一组类,用于报告标准库函数遇到的问题。这些异常类也可以在用户编写的程序中使用,它们分别定义在4个头文件中:
exception
stdexcept
new
type_info
标准库异常类只定义了几种运算,包括创建或拷贝异常类型的对象,以及为异常类型的对象赋值。应该使用string对象或者C风格字符串初始化这些类型的对象,但是不允许使用默认初始化的方式。当创建此类对象时,必须提供初始值,该初始值含有错误相关的信息。除了exception、bad_alloc和bad_cast对象,不允许为这些对象提供初始值。
<stdexcept>定义的异常类
exception最常见的问题:
runtimer_error //运行时检测出的问题 range_error //生成结果超出了有意义的值域范围 overflow_error //计算上溢 underflow_error //计算下溢 logic_errer //程序逻辑错误 domain_error //参数对应的结果值不存在 invalid_argement //无效参数 length_error //试图创建一个超出该类型最大长度的对象 out_of_range //使用一个超出有效范围的值