C++ 学习笔记(5)语句、异常
参考书籍:《C++ Primer 5th》
5.3 条件语句
5.3.2 switch语句
- switch内部的变量定义:不能初始化变量,仅可以定义。最好使用花括号已限制变量作用域。
5.4 迭代语句
5.4.3 范围for语句(range for statement)
- 遍历序列(拥有能返回begin和end成员的类型):
- 用花括号括起来的初始值列表。
- 数组。
- vector或string等类型。
for (int a : {2, 3, 4}) // 初始化列表
cout << a << endl;
int b[] = { 4,2,6,2 };
for (int v : b) // 数组
cout << v << endl;
string s = "cool";
for (auto c : s) // 字符串
cout << c << endl;
5.6 try语句块和异常处理
5.6.1 throw表达式
- 直接抛出异常:
throw runtime_error("Throw the fucking error!")
5.6.2 try语句块
- try块中如果有异常,会被catch块检测,如果匹配到会执行其内容,否则一直找到合适的catch,最后没有找到的,程序会转到名为terminate的标准库函数。
try
{
throw runtime_error("Shit! Man!"); // 抛出异常
}
catch (runtime_error err)
{
cout << err.what(); // 捕获了异常,输出了异常的信息:"Shit! Man!"
}
5.6.3 标准异常
- 标准库函数的异常类:
- exception头文件:最通用的异常类exception。只报告异常发生,不提供额外信息。
- new头文件:bad_alloc异常类型。
- type_info头文件:定义了bad_cast异常类型。
- stdexcept头文件:常用异常类,如下表。
- 只能默认初始化,而不能提供初始值的对象:exception、bad_alloc和bad_cast。
- 除了上面的,其他异常类型只能用string或C风格字符串,来初始化异常对象,而不能使用默认初始化。
- 异常类型只定义了一个what的成员函数。返回值是const char *。如果异常有字符串初始值,就返回这个字符串,否则其返回内容由编译器决定。