写在前面
没想到这么快就到了第五章
5.1 简单语句
C++语言中的大多数语句都以分号结束,一个表达式,比如iva1+5
,末尾加上分号就变成了表达式语句(expression statement)。表达式语句的作用是执行表达式并丢弃掉求值结果。
复合语句(compound statement)是指用花括号括起来的(可能为空的)语句和声明的序列,复合语句也被称作块(block)。一个块就是一个作用域,在块中引入的名字只能在块内部以及嵌套在块中的子块里访问。通常,名字在有限的区域内可见,该区域从名字定义处开始,到名字所在的(最内层)块的结尾为止。
5.2 语句作用域
可以在if、switch、while和for语句的控制结构内定义变量。定义在控制结构当中的变量只在相应语句的内部可见,一旦语句结束,变量也就超出其作用范围了
5.3 条件语句
5.3.1 if语句
这个很简单,记住,if
语句可以单独存在,也可以搭配else
存在,也可以在if
或者else
中嵌套。给个例子
if(条件1)
{
if(在条件1的前提下判断条件2)
{
执行分枝1;
}
else
{
执行分枝2;
}
}
else if(条件3)
{
执行分枝3;
}
else
{
执行分枝4;
}
悬垂else
那如果,if
数量比else
多呢?在C++中,它规定else与离它最近的尚未匹配的if匹配,从而消除了程序的二义性。
像是代码中,else
本意应该是和第一个if
配对,但是实际运行却发现,else
是和第二个if配对的,可以使用花括号控制执行路径。
5.3.2 switch 语句
这个我之前讲过,不过可以在讲一次
首先结构是
switch(key)
{
case key1:
执行语句;
break;
case key2:
执行语句;
break;
.
.
.
.
default:
执行语句;
break;
}
这是我之前说的,每个语句后要加一个break
,但是!有一种情况除外,比如我们需要计算所有元音字母出现次数
switch(key)
{
case a:
case e:
case i:
case o;
case u;
执行语句;
break;
.
.
.
.
default:
执行语句;
break;
}
就可以这么写
5.4 迭代语句
5.4.1 while 语句
这个说过了,给个伪代码吧
while(条件)
{
执行循环;
}
是和不知道有多少数量的情况
5.4.2 传统的for语句
这个太简单了,给个伪代码吧
for(语句头,可以定义多个变量;结束条件;变化)
{
循环语句;
}
5.4.3 范围for
这个也很简单,给个伪代码吧
for(变量:序列)
{
循环语句;
}
5.4.4 dowhile语句
这个也简单
do
{
循环语句;
}
while(条件);
5. 5 跳转语句
这个也简单
5.5.1 break语句
break语句(break statement)负责终止离它最近的while、dowhile、for或switch语句,并从这些语句之后的第一条语句开始继续执行。
5.5.2continue语句
中止最近一条语句的执行并马上开始下一次循环。
5.5.3 goto语句
5.6 try 语句块和异常处理
5.6.1 throw表达式
程序的异常检测部分使用throw表达式引发一个异常。作用是抛出异常将终止当前的函数,并把控制权转移给能处理该异常的代码。
if(条件)
{
throw 执行操作;
}
5.6.2 try语句块
try语句块的一开始是关键字try,随后紧跟着一个块,这个块就像大多数时候那样是花括号括起来的语句序列。
跟在 try 块之后的是一个或多个 catch 子句。catch 子句包括三部分:关键字、catch、括号内一个(可能未命名的)对象的声明(称作异常声明,exception declaration)以及一个块。当选中了某个 catch 子句处理异常之后,执行与之对应的块。catch 一旦完成,程序跳转到try语句块最后一个 catch 子句之后的那条语句继续执行。
try
{
可能出问题的代码;
}
catch(异常1)
{
执行操作;
}
catch(异常2)
{
执行操作;
}
5. 6.3 标准异常
见表