else语句对应的始终是最近的那条if语句,除非有{}强行控制,如:
if(A){
if(B){/*.............*/}
}else{/*.......*/}//这里else和if(A)对应
break和continue处理的都是离其最近的循环(if语句不算循环)
异常处理:
throw语句(引发异常),try语句块(处理异常),catch子句(结束try语句)
例如:throw:
if(item1.isbn()!=item2.isbn){
throw runtime_error("Data must refer to same ISBN!");}//抛出异常,中止函数(runtime_error为一种异常类型,在头文件stdexcept中)
cout<<item1+item2<<endl;
try:
while(cin>>item1>>item2){
try{
cout<<item1+item2<<endl;}//想要执行的语句
catch(runtime_error err){//若失败则执行catch语句,抛出runtime_error 异常
cout<<err.what()<<"\nTry again? Enter 'y' or 'n'"<<endl;
char c;
cin>>c;
if(!cin||c=='n')break;} }
标准异常:
头文件:
exception | 定义最通用的异常类,只报告异常发生,无额外信息 |
stdexcept | 定义几种常见的异常类 |
new | 定义bad_alloc异常类型 |
type_info | 定义bad_cast异常类型 |
stdexcept头文件中的异常类:
exception | 常见问题 |
runtime_error | 运行时才能检测到的问题 |
range_error | 运行时错误:结果超出值域范围 |
overflow_error | 运行时错误:上溢 |
underflow_error | 运行时错误:下溢 |
logic_error | 逻辑错误 |
domain_error | 逻辑错误:参数对应结果值不存在 |
invalid_argument | 逻辑错误:参数无效 |
length_error | 逻辑错误:试图创建超出类型最大长度的对象 |
out_or_range | 逻辑错误:使用超出有效范围的值 |
对exception,bad_alloc,bad_cast对象只能默认初始化(不提供初始值),其他类型用string或c字符数组初始化;
异常类只有what()唯一成员函数,返回c字符数组,提供异常信息。