语句----条件语句,迭代语句,跳转语句,异常处理

一、条件语句

1、if语句

  C++规定了else与离它最近的尚未匹配的if匹配,从而消除程序的二义性。

2、switch语句

  switch语句首先对括号里的表达式求值,该表达式紧跟在关键字switch的后面,可以是一个初始化的变量声明。表达式的值转换成整数类型,然后与每个case标签的值比较。

  case关键字和它对应的值一起被称为case标签。case标签必须是整型常量表达式(指值不会改变且在编译过程就能得到计算结果的表达式)。任何两个case标签的值不能相同,否则会引发错误。

  如果某个case标签匹配成功,将从该标签开始往后顺序执行所有case分支,除非程序显示地中断这一过程(break),否则直到switch的结尾处才会停下来。

  如果没有任何一个case标签能匹配上switch表达式的值,程序将执行紧跟在default标签后面的语句。

二、迭代语句

1、范围for语句

  C++11新标准引入了一种更简单的for语句,这种语句可以遍历容器或其他序列的所有元素。范围for语句的语法形式是:

  for(declaration : expression)

    statement

  expression表示的必须是一个序列,比如用花括号括起来的初始值列表、数组、vector、string等类型的对象,这些类型的共同特点是拥有能返回迭代器的begin和end成员。

  declaration 定义一个变量。序列中的每个元素都得能转换成该变量的类型。确保类型相容最简单的办法是使用auto类型说明符,这个关键字可以令编译器帮助我们指定合适的类型。如果需要对序列中的元素进行写操作,循环变量必须声明成引用类型。

  每次迭代都会重新定义循环控制变量,并将其初始化成序列的下一个值,之后才会执行statement。

三、跳转语句

  跳转语句中断当前的执行过程。C++语句提供了4种跳转语句:break、continue、goto、return。

1、break语句

  break语句负责终止离它最近的while、do while、for或switch语句,并从这些语句之后的第一条语句开始执行。

2、continue语句

  continue语句终止最近的循环中的当前迭代并立即开始下一次迭代。continue语句只能出现在for、while和do while循环的内部,或者嵌套在此类循环里的语句或块的内部。和break语句一样,continue也仅作用于离它最近的循环

3、goto语句

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

四、try语句块和异常处理

1、标准异常

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

  exception头文件定义了最通用的异常类exception。它只报告异常的发生,不提供额外信息;

  stdexcept头文件定义了几种常用的异常类;

  new头文件定义了bad_alloc异常类型;

  typeinfo头文件定义了bad_cast异常类型;

  

                              <stdexcept>定义的异常类如下表所示:

异常类 描述
exception 最常见的问题
runtime_error 只有在运行时才能检测出的问题
range_error 运行时错误:生成的结果超出了有意义的值域范围
overflow_error 运行时错误:计算上溢
underflow_error 运行时错误:计算下溢
logic_error 程序逻辑错误
domain_error 逻辑错误:参数对应的结果值不存在
invalid_argument 逻辑错误:无效参数
length_error 逻辑错误:试图创建一个超出该类型最大长度的对象
out_of_range 逻辑错误:使用一个超出有效范围的值

  标准库异常类只定义了几种运算,包括创建或拷贝异常类型的读写,以及为异常类型的对象赋值。

  我们只能以默认初始化的方式初始化exception、bad_alloc、bad_cast对象,不允许为这些对象提供初始值。

  其他异常类型的行为则恰好相反:应该使用string对象或者C风格字符串初始化这些类型的对象,但是不允许使用默认初始化的方式。当创建此类对象,必须提供初始值,该初始值含有错误相关的信息。

  异常类型只定义了一个名为what的成员函数,该函数没有任何参数,返回值是一个指向C风格字符串的const char*。该字符串的目的是提供关于异常的一些文本信息。

  what函数返回的C风格字符串的内容与异常对象的类型有关。如果异常类型有一个字符串初始值,则what返回该字符串。对于其他无初始值的异常类型来说,what返回的内容由编译器决定。

2、异常处理

  异常处理机制为程序中异常检测和异常处理这两部分的协作提供支持。在C++语言中,异常处理包括:

  throw表达式:异常检测部分使用throw表达式来表示它遇到了无法处理的问题。我们说throw引发了异常;

  try语句块:异常处理部分使用try语句块处理异常。try语句块以关键字try开始,并以一个或多个catch子句结束。try语句块中代码抛出的异常通常会被某个catch子句处理。

  一套异常类:用于在throw表达式和相关的catch子句之间传递异常的具体信息。

1、try语句块

  try语句块的通用语法形式是:

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

  当选中了某个catch子句处理异常之后,执行与之对应的块。catch一旦完成,程序跳转到try语句块最后一个catch子句之后的那条语句继续执行。

2、函数在寻找处理代码的过程中退出

  在复杂系统中,程序在遇到抛出异常的代码前,其执行路径可能已经经过了多个try语句块。例如一个try语句块可能调用了包含了另一个try语句块的函数,新的try语句块可能调用了包含又一个try语句块的新函数,以此类推。

  寻找处理代码的过程与函数调用链刚好相反。当异常被抛出时,首先搜索出抛出该异常的函数。如果没找到匹配的catch子句,终止该函数,并在调用该函数的函数中继续寻找。如果还是没有找到匹配的catch子句,这个新的函数也被终止,继续搜索调用它的函数。以此类推,沿着程序的执行路径逐层回退,直到找到适当类型的catch子句为止。

  如果最终还是没有找到任何匹配的catch子句,程序转到名为terminate的标准库函数。该函数的行为与系统无关,一般情况下,执行该函数将导致程序非正常退出。

3、例子

 1 #include <iostream>
 2 #include <stdexcept>
 3 
 4 void func()
 5 {
 6     throw std::runtime_error("this is exception.");
 7 }
 8 int main()
 9 {
10     try{
11         func();
12     } catch (std::runtime_error e){
13         std::cout << e.what() << std::endl;
14     }
15     return 0;
16 } 

原文地址:https://www.cnblogs.com/ACGame/p/10173714.html