C++Primer学习笔记05.语句
## 语句### 作用域
定义在控制结构当中的变量只在相应语句的内部可见,一旦语句结束,变量也就超出其作用范围了
```cpp
while(int i = get_num()) // 每次迭代时创建并初始化 1
cout<< i <<endl;
i = 0; // 错误,在循环外部无法访问 i
```
### 条件语句
if 语句的使用,不赘述。
switch 语句
```cpp
#include<iostream>
using std::cout;
using std::cin;
using std::endl;
using std::begin;
using std::end;
int main() {
// switch 统计 a-c 字符出现的个数
char c;
int ca = 0;
int cb = 0;
int cc = 0;
while (cin >> c) {
switch (c) {
case 'a':
ca++;
break;
case 'b':
cb++;
break;
case 'c':
cc++;
break;
default:
cout << "over";
}
}
cout << "ca=" << ca;
cout << "cb=" << cb;
cout << "cc=" << cc;
}
```
switch 的简写,不要省略 break;
```cpp
switch(ch){
case 'a': case 'e': case 'i': case 'o':
++cnt;
break;
}
```
<b>switch 内部的变量定义</b>
目前不是很明白书里说的,但是在 switch 内部定义变量的话,建议这样做。
```cpp
case true:
{
string file_name = get_file_name();
}
break;
case false:
// some code;
```
### 迭代语句
while 循环、for 循环、 范围 for(Java 的增强 for)、do while
### 跳转语句
break:负责终止离它最近的 while、do while、for 或 switch 语句,并从这些语句之后的第一条语句开始继续执行。
continue:终止最近的循环中的当前迭代并立即开始下一次迭代。 continue 语句只能出现在 for、while 和 do while 循环的内部,或者嵌套在此类循环里的语句或块的内部。
goto:从 goto 语句无条件跳转到同一函数内的另一条语句。不要在程序中使用 goto 语句,因为它使得程序既难理解又难修改,这里也就不记怎么用 goto 了。
#### throw表达式
抛出异常,throw exception_obj;
```cpp
if(a!=b)
throw runtime_error("a!=b");
cout<<"a=b"<<endl;
```
类型 runtime_error 是标准库异常类型的一种,定义在 stdexcept 头文件中。后面学异常的时候再讨论。
#### try语句块
try 语句块的通用语法形式是
```cpp
try{
program-statements
}cache(exception-declaration){
handler-statements
}catch(exception-declaration){
handler-statements;
}// ...
```
捕获异常的代码
```cpp
#include<iostream>
#include<string>
using std::cout;
using std::cin;
using std::endl;
using std::begin;
using std::end;
using std::string;
using std::runtime_error;
int main() {
int item1, item2;
while (cin >> item1 >> item2) {
try {
if (item1 != item2) {
throw runtime_error("item1!=item2");
}
} catch (runtime_error err) {
cout << err.what() << endl;
char c;
cin >> c;
if (c == 'q') {
cout << "不继续处理了,退出!";
break;
}
}
}
}
```
#### 标准异常
C++ 标准库定义了一组类,用于报告标准库函数遇到的问题。这些异常类也可以在用户编写的程序中使用,它们分别定义在 4 个头文件中。
- exception:定义了最通用的异常类 exception。它只报告异常的发生,不提供任何额外信息。
- stdexcept:定义了几种常用的异常类
- new:定义了 bad_alloc 异常类型
- type_info:定义了 bad_cast 异常类型
<div align="center"><h6><stdexcept>定义的异常类</h6></div>
| 异常类型 | 说明 |
| ------------------ | ------------------------------------------------ |
| 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 对象,不允许为这些对象提供初始值。
页:
[1]