C++primer学习笔记-----5.3条件语句

【C++ 语言提供了两种按条件执行的语句。一种是if 语句,它根据条件决定控制流;另一种是switch 语句,它计算一个整形表达式的值,然后根据这个值从几条执行路径中选择一条。】


5.3.1 条件语句


【悬垂else:
当一个if 语句嵌套在另一个if 语句内部时,可能if 分支的数量多于else 分支,这时候if 与else 如何进行匹配。
就C++ 而言,它规定else 与离它最近的尚未匹配的if 匹配,从而消除了程序的二义性。】

【使用花括号控制执行路径:
要想使else 分支和外层的if 语句匹配起来,可以在内层if 语句的两端加上花括号,使其成为一个独立的功能完全的块。
if(i = 0)
{if(t = 0);} // 花括号括起来表明内层if 语句已经结束,此时离else 最近的尚未匹配的if 是外层if 语句
else // 如果没有上行语句的花括号,则此行else 语句会与上行语句匹配
...;

5.3.2 switch 语句

【switch 语句的使用方法(注意必须是整形的分支):
switch(i) // switch 语句首先对括号里的表达式求值,该表达式可以是一个初始化的变量声明。
{
  case 1: // case 关键字和它对应的值一起被称为case 标签,default 也是标签。
    ...;
    break;
  case 2:
    ...;
    break;
  default: // 如果没有任何一个case 标签能匹配上switch 表达式的值,程序将执行紧跟在default 标签后的语句
    ...;
    break;
}
switch 语句表达式的值将会转换成 整数类型,然后与每个case 标签的值进行比较。
case 标签必须是 整形常量表达式
即使不准备在default 标签下做任何工作,也有必要定义一个default 标签,以表明 考虑到了默认的情况只是故意不处理或者 在其后跟上提醒我们程序出现了意外情况的语句
标签不能孤零零的出现,它后边 必须跟上一条语句或者另外一个标签。(若switch 以一个空的default 标签作为结束,语法要求该标签后必须跟上一条空语句)】

【switch 的内部控制流:
如果 表达式和某个case 标签的值匹配成功,或者都不匹配而转向default,程序将从 该标签之后的第一条语句开始向下忽略case 标签的满足情况并顺次执行所有case 分支,直到 到达了switch 的结尾或是遇到一条break 语句为止(对于default 标签在case 标签之前出现也适用,因为两者可视为等价的)。
通常程序的规范是在每个标签后的语句中都包含一条break 语句,但是当我们 需要用到默认的switch 行为时,比如 希望两个或更多个值共享同一组操作、或是 出现的早的case 将包含出现的晚的case 的全部操作时,也可以不加break,但最好注明这种操作的意图。】

【switch 内部的变量定义:
如果某个标签内含有变量的初始化的话,那么从该标签跳到其之后的标签分支(即该标签不是最后一个标签)是非法行为,因为隐藏着使用未经初始化变量的危险。
但是单纯的定义不会触发这种错误。(定义不需要执行,始终生效?)
为了避免这种情形,可以标签内的变量初始化放在一个块内,从而将变量的作用域限定在块内已消除使用未初始化变量的潜在危险。】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值