第五章
1
switch
中定义变量,需要在块内定义。
否则可能会跳过变量的初始化。
2
case
标签必须是常量表达式
do while
不能在条件中定义变量
goto
不能跳过执行变量的定义,向后跳过一个已经执行的定义是合法的,跳回到定义之前意味着系统将销毁该变量,然后重新创建它。
3
异常处理:
try{
}catch(){
}catch(){
}
具体代码:
while(cin>>item1>>item2){
try{
if(item1.isbn()==item2.isbn())cout<<item1+item2<<endl;
else throw runtime_error("Data must refer to same ISBN");
}catch(runtime_error err){
cout<<err.what()
<<"\n Try again?Enter y or n" <<endl;
char c;cin>>c;
}
}
err.waht()
返回的是初始化时候的string
对象副本。
4
异常处理的时候,函数在寻找处理代码的过程中退出。
首先搜索抛出该异常的函数,如果没找到对应的catch
子句,终止函数。在调用该函数的函数中继续寻找,以此类推,沿着程序的执行路径逐层回退。
如果最终还是没找到,程序转到terminate
的标准库函数。一般情况下,执行该程序将导致程序非正常退出。
5
标准异常类
exception
:最通用的异常类,只报告异常的产生,不提供额外信息。
stdexcept
:定义了几种常用的异常类
new
:定义了bad_alloc
异常类型
type_info
:定义了bad_cast
异常类型
exception
、bad_alloc
、bad_cast
只能默认初始化,其他异常类型的行为应该用string
对象或C
风格字符串初始化,并且不允许默认初始化。