《C++ Primer》读书笔记-第五章 语句

作者:马志峰
链接:https://zhuanlan.zhihu.com/p/23669058
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

声明:

  • 文中内容收集整理自《C++ Primer 中文版 (第5版)》,版权归原书所有。
  • 原书有更加详细、精彩的释义,请大家购买正版书籍进行学习。
  • 本文仅作学习交流使用,禁止任何形式的转载
  • 简单语句
    • 表达式语句
    • 空语句
    • 复合语句
  • 语句作用域
  • 条件语句
    • if
    • switch
  • 迭代语句
    • while
    • for
    • 范围for
    • do while
  • 跳转语句
    • break
    • continue
    • goto
    • return
  • try语句和异常处理
    • try语句
    • throw表达式
    • 异常类

表达式语句

表达式末尾加上分号就成了表达式语句

作用是执行表达式并丢弃掉求值结果

空语句

只含有一个单独的分号

如果我们多写了一个分号

int i = 0;;

实际是两句语句,后面一个分号是空语句

这种情况不会有什么影响,但是

while( i < 10 ) ;  
    ++i;

空语句构成了while循环的循环体,导致死循环

复合语句(块)

用花括号括起来的语句和声明序列,也称为块

块不以分号结束

语句作用域

一个块就是一个作用域

if、switch、while、for内定义的变量都属于局部作用域

条件语句

MZF: 多加花括号会使事情变得简单很多

if

if语句可以嵌套

if(condition)  
    if(condition)  
        statement  
else  
    if(condition)  
        statement  
    else if(condition)  
        statement

我们会通过缩进来给if...else进行配对,实际上,if的个数多余else的情况,称为悬垂else问题,else总是和离它最近的未匹配的if匹配

所以第一个else实际和内层的if匹配,整个语句开始变得复杂和难以理解

多加花括号会使事情变得简单

if(condition)  
{  
    if(condition)  
    {  
        //do something  
    }  
}  
else  
{  
    if(condition)  
    {  
        //do something  
    }  
    else if(condition)  
    {  
        //do something  
    }  
}

花括号内的语句只有块作用域,所以对第一个else来说,内层的if是不可见的,它会和第一个if进行匹配,这也正是我们希望的

switch

case标签必须是整型常量表达式

一种简单明了的写法

switch( i ) 
{  
    case 0:  
        {  
            //do something 
        }  
        break;  
    case 1:  
        {  
            //do something  
        }  
        break;  
    case 2:  
        {  
            //do something  
        }  
        break;  
    default:  
        {  
            //do something  
        }  
        break;  
}

如果某个case标签匹配成功,将从该标签开始往后顺序执行所有case分支,除非显式地中断这一过程

因此多加花括号和break,事件会变得简单

迭代语句

  • while
  • for
  • 范围for
  • do while

这些语句我们都不陌生了,再把书看看就行

for语句头能省略掉init-statement、condition和expression中的任何一个(或者全部)

do while语句是先执行循环体再检查条件,因此无论条件是否为真,循环体至少会执行一次

注意do while不是以花括号结束的,应当在后面加上分号

do  
    statement  
while(condition);

跳转语句

  • break负责终止离它最近的while、do while、for或switch语句
  • continue终止当前这次迭代并立即开始下一次迭代
  • 只有当switch嵌套在迭代语句内部时,才能在switch里使用continue
  • 不要在程序中使用goto语句

try语句和异常处理

异常是指程序运行时的反常行为,这些行为超出了函数正常功能的范围,有的时候也超出了程序员的意料

通常情况下,异常会导致整个程序的终止

可以使用try语句块来处理异常。

try语句块以关键字try开始,并以一个或多个catch子句结束

try语句块中抛出的异常有机会被catch子句处理

我们程序员也可以主动的抛出异常,比如当检测程序中的数据库连接断开了,我们可以抛出异常来通知程序的其他部分进行处理

使用throw表达式抛出异常

要完成异常处理,除了try语句块和throw表达式外,我们还需要异常类,它负责携带异常的具体信息

标准库定义了一些异常类,不过多数情况下我们需要自定义自己的异常类

猜你喜欢

转载自blog.csdn.net/qq_26751117/article/details/53175593
今日推荐