C++ Primer 第五章 语句

C++ Primer 第五章 语句

    • 5.1 简单语句
    • 5.3 条件语句
      • 5.3.2 switch语句
    • 5.4 迭代语句
      • 5.4.1 while语句
      • 5.4.2 传统的for语句
    • 5.5 跳转语句
      • 5.5.1 break语句
      • 5.5.2 continue语句
      • 5.5.3 goto语句
    • 5.6 try 语句块和异常处理
      • 5.6.3 标准异常

5.1 简单语句

  • 空语句
    使用空语句时应该加上注释,从而令读这段代码的人知道该语句是有意省略的。
    多余的空语句并非总是无害的。

  • 复合语句
    复合语句也被称作块(block),指用花括号括起来的(可能为空的)语句和声明的序列。
    块(block)不以分号作为结束。

5.3 条件语句

5.3.2 switch语句

switch内部的变量定义
switch的执行流程有可能会跨过某些case标签。如果程序跳转到了某个特定的case,则switch结构中该case标签之前的部分会被忽略掉。这种忽略掉一部分代码的行为引出了一个有趣的问题:如果被略过得代码中含有变量的定义该怎么办?
答案是:如果在某处一个带有初值的变量位于作用域之外,在另一处该变量位于作用域之内,则从前一处跳转到后一处的行为是非法行为。
C++语言规定,不允许跨过变量的初始化语句直接跳转到该变量作用域内的另一个位置。
如果需要为某个case分支定义并初始化一个变量,我们应该把变量定义在块内,从而确保后面的所有case标签都在变量的作用域之外。

5.4 迭代语句

5.4.1 while语句

定义在while语句条件部分或者while循环体内的变量每次迭代都经历从创建到销毁的过程。

5.4.2 传统的for语句

for(init-statement; condition; expression)
	statement

牢记for语句中定义的对象只在for循环体内可见。

for语句头中的多重定义
和其他的声明一样,init-statement也可以定义多个对象,但是init-statement只能有一条声明语句,因此,所有变量的基础类型必须相同。

5.5 跳转语句

跳转语句中断当前执行的过程。

5.5.1 break语句

break语句负责终止离它最近的while,do while,for或switch语句,并从这些语句之后的第一条语句开始继续执行。break语句的作用范围仅限于最近的循环或者switch。

5.5.2 continue语句

continue语句终止最近循环中的当前迭代并立即开始下一次迭代。
continue语句中断当前的迭代,但是仍然继续执行循环。

5.5.3 goto语句

goto语句的作用是从goto语句无条件跳转到同一函数内的另一条语句。

不要在程序中使用goto语句,因为它使得既难理解又难修改。

goto语句的语法形式是: goto label;
其中,label 是用于标识一条语句的标识符。带标签语句(labeled statement)是一种特殊的语句,在它之前有一个标识符以及一个冒号:

end : return;	//带标签语句,可以作为goto的目标

标签标识符独立于变量或其他标识符的名字,因此,标签标识符可以和程序中其他实体的标识符使用同一个名字而不会相互干扰。goto语句和控制权转向的那条带标签语句必须位于同一个函数之内。

5.6 try 语句块和异常处理

在C++中,异常处理包括:

  • throw表达式(throw expression),异常检测部分使用throw表达式来表示它遇到了无法处理的问题。我们说throw引发(raise)了异常。
  • try语句块(try block),异常处理部分使用try语句块处理异常。try语句块以关键字try开始,并以一个或多个catch子句(catch clause)结束。try语句块中代码抛出的异常通常会被某个catch子句处理。因为catch子句“处理”异常,所以它们也被称作异常处理代码(exception handler)。
  • 一套异常类(exception class),用于在throw表达式和相关catch子句之间传递异常的具体信息。

5.6.3 标准异常

C++标准库定义了一组类,用于报告标准库函数遇到的问题。这些异常类可以在用户编写的程序中使用,它们分别定义在4个头文件中:

  • exception头文件定义了最通用的异常类exception。它只报告异常的发生,不提供任何额外信息。
  • stdexcept头文件定义了几种常用的异常类。
  • new头文件定义了bad_alloc异常类型。
  • type_info头文件定义了bad_cast异常类型。

你可能感兴趣的:(cpp)