C++ 学习笔记之(5)-语句和异常

C++ 学习笔记之(5)-语句和异常

C++ 提供了一组控制流语句以支持更复杂的执行路径

条件语句

C++语言提供了两种条件语句,if语句和switch语句

  • 悬垂else:else与离它最近的尚未匹配的if匹配
  • case 标签必须是整型常量表达式
  • switch内部的变量定义:如果要在某个case分支定义并初始化一个变量,应该把变量定义在块内,确保后面的所有case标签都在变量的作用域之外。

迭代语句

C++11新标准引入了范围for语句,可以遍历容器或其他序列的所有元素,其语法形式为

for(declaration: expression)
    statement

expression表示的是一个序列,即拥有能返回迭代器的beginend成员

  • 花括号括起来的初始值列表
  • 数组
  • vectorstring等类型
for(int a : {1, 2, 3})  // 初始化列表
    cout << a << endl;  

try语句块和异常处理

异常处理机制为程序中异常检测和异常处理提供支持,C++中异常处理包括

  • throw表达式(throw expression):异常检测部分使用throw表达式来引发异常
  • try语句块(try block):异常处理部分使用try语句块处理异常,try抛出异常,catch捕获异常
  • 一套异常类:用于在throw表达式和相关的catch字句之间传递异常的具体信息

throw 表达式

  • 抛出异常

    throw runtime_error("This is the first runtime_error");

try 语句块

try{
    // 处理代码,失败就会抛出 runtime_error 异常
    throw runtime_error("This is the second runtime_error");
}catch(runtime_error err){
    cout << err.what();  // 捕获异常,输出异常信息 "This is the second runtime_error"
}

try语句块抛出异常后,程序沿着程序的执行路径逐层回退寻找适当类型的catch子句处理异常,若最终还是没能找到,则转到名为terminate的标准库函数,非正常退出。

标准异常

C++标准库定义的异常类如下

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

  • exceptionbad_allocbad_cast对象只能执行默认初始化,不能为其提供初始值

  • 除了以上,其他异常类型不允许默认初始化,应该使用string对象或者C风格字符串初始化异常对象
  • 异常类型只定义了what成员函数,没有参数,返回值为const char *, 若异常类型有字符串初始值,则返回该字符串,若无初始值,则返回内容由编译器决定
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章