悬垂else
else与离他最近的尚未匹配的if匹配。
switch
如果表达式和某个case标签的值匹配成功,程序从该标签之后的第一条语句开始执行,直到到达switch的结尾或遇到一条break语句为止。
case标签必须是整型常量表达式。
char ch=getval();
int ival=42;
switch(ch){
case 3.14://错误,不是整型
case ival://错误,不是常量
}
如果没有任何一个case标签能匹配上,程序将执行default标签后面的语句。
for语句
语法形式:
for(initializer;condition;expression)
initializer可以定义多个对象,但是只能有一条声明语句,因此,所有变量的基础类型必须相同。
范围for语句
这种语句用于遍历容器或其他序列的所有元素。语法形式如下:
for(declaration:expression)
statement
expresssion表示的是一个序列,比如用花括号括起来的初始值列表,数组,vector对象,string对象等。
declaration定义一个变量,序列中的每个元素都得能转换成该变量的类型,如果需要对序列中的元素执行写操作,循环变量必须声明成引用类型。
跳转语句
break语句终止离他最近的while,do while,for或switch语句,并从这些语句之后的第一条语句开始继续执行。
continue语句终止离他最近的循环中的当前迭代的并开始下一次迭代。
goto语句
goto语句的作用是从goto语句无条件跳转到同一函数内的另一条语句。
语法形式如下:
goto label;
label是用于标识一条语句的标识符,带标签语句是一种特殊的语句,在它之前有一个标识符以及一个冒号。标签标识符可以和程序中其他实体的标示符使用同一个名字而不会互相干扰,goto语句和控制权转向的那条带标签的语句必须位与同一函数内。
当goto语句跳向已经执行过的语句时,系统将会销毁已经定义的变量,然后重新创建它。
begin:
int sz=get_size();
if(sz<0)
goto begin;
goto语句执行后会将sz销毁,跳回begin处重新创建sz。
goto语句如果跳过某个变量的声明,将会发生错误。即使后面程序没有用到该变量,跳过变量声明也会出错。
goto end;
int ix=10;//错误:跳过了ix的声明
end:
ix=42;
goto end;
int x=10;//错误,跳过变量声明
end:
cout<<"yes";
try语句块和异常处理
异常处理包括:
throw表达式:异常检测部分使用throw表达式来表示它遇到了无法处理的问题;
try语句块:try语句块以关键字try开始,并以一个或多个catch子句结束。try语句块中代码抛出的异常通常被某个catch子句处理;
一套异常类。
throw表达式
程序的异常检测部分使用throw表达式引发一个异常,throw表达式包含throw关键字和一个表达式,其中表达式类型就抛出的异常类型。
抛出异常后将终止当前的函数,将控制权转移给能处理该异常的代码。
try语句块
语法形式如下:
try {
program-statements
}catch(exception-declaration){
handler-statements
}catch(exceptino-declaration){
handler-statements
}
catch子句包括三部分:
(1)关键字catch;
(2)括号内一个(可能未命名的)对象的声明
(3)一个处理块
当选中某个catch子句处理异常之后,执行对应的处理块,catch执行完后,程序跳转到try语句块最后一个catch子句之后的那条语句继续执行。
try语句块内部声明的变量在块外部无法访问,特别是在catch子句内也无法访问。
当异常被抛出后,首先搜索抛出该异常的函数,如果没找到匹配的catch子句,终止该函数,在调用该函数的函数中继续寻找,如果仍没有找到匹配的catch子句,这个新函数也终止,继续搜索调用他的函数,以此类推,逐层回退。如果最终还没能找到任何匹配的catch子句,程序转到名为terminate的标准库函数,一般情况下,该函数导致程序非正常退出。