C ++ Primer | 第五章 语句

使用控制流语句 (flow of control) 以支持复杂的执行路径。

5.1 简单语句

最简单的语句是空语句(null statement) 它只有一个分号;
注意不要多写分号或者少写分号,while或者if后面没有分号
复合语句 compound statement 是指用花括号括起来的语句和声明的序列,复合语句也被称作block块。在一些语句中,语法上需要一条语句,但是逻辑上需要多条语句,则应该使用复合语句,如while或者for。

5.2 语句作用域

while (int i= get_num())
    cout<0;//错误,在循环外部无法访问

5.3 条件语句

5.3.1 if

if (condition)
    statement
//-----------------------
if (condition)
    satement
else
    statement2

5.3.2 switch

unsigned a=0,b=0;
char ch
while(cin>>ch){
switch(ch){
case 'a'://注意这里必须为整型常量
    ++a;// 如果要为分支定义并初始化一个变量,我们应该把变量定义在块{}内,从而确保,后面的标签都在作用域之外
    break;// 一定要有break,要不然会继续运行
case 'b':
    ++b;
    break;//break的作用是转移控制权,如果都没有匹配上就会运行switch之后的的语句
defaultbreak;//
    }
}

5.4 迭代语句

5.4.1 while 语句

当不确定到底要迭代多少次的时候,或者想在循环结束后访问循环控制变量。

5.4.2 传统的for语句

//注意在for语句中定义的对象只有在for循环体内可以见。在for循环结束后init的对象就不能使用了
for (init-statemen;condition;expression)//init-statement 负责初始化一个值,一般为声明语句、表达式语句、或者空语句;也可以同时定义多个语句;最后的expression也可以为空语句
    statement

5.4.3 范围for语句

这是c++11中新引入的一种更加简单的for语句

for(declaration:expression)//expression必须是使用花括号括起来的初始值列表或者数组、vector、string等,他们有能返回迭代器的beginend成员,范围变量必须是引用类型(&)才能对其中的元素进行写操作
    statement

5.4.4 do while 语句

do 
    statement
whilecondition);//注意,作为循环的条件不能定义在do的内部

5.5 跳转语句

break; continue; goto;return

5.5.3 goto语句

注意:不要在程序中使用goto语句,既难理解又难已修改

goto label;//label是用于表示一条语句的标示符,labeled statement是一种特殊的语句,在她之前有一个标识符及一个冒号:
begin:
    int sz=get_size();
    if (sz<=0){
        goto begin;
        }
//标签提示符独立于变量的其他标识符的名字,goto语句和控制全转向的那条带标签的语句必须位于同一个函数之内
//----
     goto end;
     int ix=10; // 错误:goto语句绕过了一个带有初始化的变量定义
end:
  ix=42;//错误,此处的需要使用ix,但是goto语句绕过了他的声明

5.6 try 语句块和异常处理

异常是指超出函数正常功能的范围,当程序检测到它无法处理的问题时,需要用到异常处理,一旦发出异常信号,检测出问题的部分也就完成了任务,无需知道如果解决。
异常处理包括:
- throw 表达式;
- try 语句块:使用catch clause 来处理异常
- exception class ;异常类用以在throw和catch之间传递异常的具体信息

5.6.1 throw 表达式

//检测两条数据是否相同
if (item1.isbn()!=item2.isbn())
    throw runtime_error("Data must refer to same ISBN");// runtime_error 是标准异常库中的一种,stdexcept中定义

5.6.2 try 语句

try{
    program-statement
    }catch (exception-declaration){
        handler-statements
    }catch(exception-declaration){
        handler-statements
    }

5.6.3 异常标准

  • exception 头文件: 只定义了最通用的异常类exception,只报告异常的发生,不含具体信息
  • stdexcept 包含几种异常类
  • new头文件定义了bad_alloc异常类
  • type_info 定义了bad_cast异常类
    注意exception、bad_alloc 、bad_cast只能使用默认初始化,但是其他类不可以使用默认初始化

你可能感兴趣的:(C ++ Primer | 第五章 语句)