语句
范围for语句
for(declaration:expression)
statement
vector<int>v={0,1,2,3,4,5,6};
for(auto &r :v)//对于v中的每一个元素
R *= 2;//将v中每个元素的值乘2
try语句块和异常处理
- C++中异常处理
- throw表达式,异常检测部分使用throw表达式表示其遇到了无法处理的问题。throw引发了异常
- try语句块,异常处理部分使用try语句块处理异常,try语句块以关键字try开始,并以一个或多个catch子句结束。try语句块中代码抛出的异常通常会被某个catch子句处理。
- 一套异常类,用于在throw表达式和相关的catch子句之间传递异常的具体信息
throw表达式
if(item1.isbn()!=item2.isbn())
throw runtime_error("Dada must refer to same ISBN");
cout<<item1+item2<<endl;
try语句块
try{
program-statements
}catch(exception-declaration){
handler-statements
}catch(exception-declaration){
handler-statements
}//...
while(cin>>item1>>item2){
try{
//指向添加两个Sales_item对象的代码
//如果添加失败,代码抛出一个runtime_error异常
}catch(runtime_error err){
//提醒用户两个ISBN必须一致,询问是否重新输入
cout<<err.what()<<"\nTry Again?Enter y or n"<<endl;
char c;
cin>>c;
if (!cin||c=='n')
break;
}
}
标准异常
- C++标准库定义了一组类,用于报告标准库函数遇到的问题,包含在4个头文件中
- exception定义了最通用的异常类exception,只报告异常的发送,不提供任何额外信息
- stdexcept头文件定义了集中常用的异常类
- new头文件定义了bad_alloc异常类型
- type_info头文件定义了bad_cast异常类型
- 定义的异常类
exception | 最常见的问题 |
---|
runtime_error | 只有在运行时才能检测出问题 |
range_error | 运行时错误:生成的结果超出了有意义的值域范围 |
overflow_error | 运行时错误:计算上溢 |
underflow_error | 运行时错误:计算下溢 |
logic_error | 程序逻辑错误 |
domain_error | 逻辑错误:参数对应的结果值不存在 |
invalid_argument | 逻辑错误:无效参数 |
length_error | 逻辑错误:试图创建一个超出该类型最大长度的对象 |
out_of_range | 逻辑错误:使用一个超出有效范围的值 |