C++中有几种常见的语句类型,如switch语句,while语句,do while语句,break语句,continue语句,try...catch语句等。使用这些语句时有各自的注意事项。
switch语句
switch语句计算一个整型表达式的值,然后根据这个值从几条执行路径中选择一条。如果需要为某一case分支定义并初始化一个变量,则应该把变量定义在块内,从而确保后面的所有case标签都在变量的作用域外。
while循环
定义在while条件部分或者while循环体内的变量,每次迭代都经历从创建到销毁的过程。
范围for语句
范围for语句,遍历容器或其他序列的所有元素。
for (declaration : expression);
statement
expression是一个序列,如:初始值列表、数组、vector或string对象。
declaration定义一个变量,序列中的每一个元素都能转换成该变量的类型。每次迭代将其初始化成序列中的下一个值,然后执行statement。
不能在范围for语句中增加vector对象中的元素,因为在范围for语句中,预存了end()的值。一旦在序列中添加(删除)元素,end函数的值就可能变得无效了。
do while语句
在括号包围起来的条件后面,用一个分号表示语句结束。
break语句
负责终止离它最近的迭代语句或switch语句,并从之后的语句开始继续执行。
continue语句
终止最近的循环中的当前迭代并立即开始下一次迭代。
对于while或者do while语句来说,继续判断条件的值;
对于for循环来说,继续执行for语句头中的expression;
对于范围for语句来说,则是用序列中的下一个元素初始化循环控制变量。
goto语句
作用是从goto语句无条件的跳转到同一函数内的另一条语句。
goto label; //label是标识一条语句的标识符
label: return ; //带标签语句,可以作为goto的目标
带标签语句是一种特殊的语句,有一个标识符和一个冒号。标签标识符独立于变量或其他标识符的名字,因此可以和程序中其他实体使用同一名字而不相互干扰。
throw语句
当程序某部分检测到它无法处理的问题时,需要异常处理。此时,检测出问题的部分应该发出某种信号表明程序遇到了故障,无法继续下去了,信号的发出方无须知道故障将在何处得到解决。一旦发出信号,检测出问题的部分也就完成了任务。
throw表达式引发一个异常,其中表达式的类型就是抛出的异常类型。
if (item1.ID != item1.ID); //首先检查两条数据是否是同一类型
throw runtime_error(“Data must refer to same ID”);
cout << item1 + item2 << endl ; //如果程序执行到这里,表示两个ID是相同的
上面代码中,如果ID不同就抛出一个异常,该异常的类型时runtime_error的对象。抛出异常将终止当前的函数,并把控制权转移给能处理该异常的代码。
try...catch语句
异常处理,关键字try开始,并以一个或多个catch子句结束。try语句块中代码抛出的异常通常会被某个catch子句处理。
try
{
program-statements
}
catch(exception-declaration)
{
handler-statements
}
catch(exception-declaration)
{
handler-statements
}
程序本来要执行的任务出现在try语句块中,这段代码可能会抛出异常。一个catch语句负责处理一种类型的异常。如果程序最终没能找到任何匹配的catch子句,就会转到terminate标准库函数。该函数的行为与系统有关,一般情况下,执行该函数将导致程序的非正常退出。
异常检测及处理的语句总结如下:
语句 | 作用 |
throw 语句 | 异常检测,表示遇到了无法处理的问题。 |
try语句块 | 异常处理,try语句块中代码抛出的异常通常会被某个catch子句处理。 |
异常类 | 在throw表达式和相关的catch子句之间传递异常的具体信息。 |