查漏补缺——语句

1、switch内部的变量定义

如果需要为某个case分支定义并初始化一个变量,我们应该把变量定义在这个case的块内,从而确保后面的所有case标签都在变量的作用于之外。

case true:
        {
            //声明语句位于语句块的内部
            string file_name=get_file_name();
            //...
        }
        break;
case false:
        if(file_name.empty())  //错误:file_name不在作用域内


2、定义在while条件部分或while循环体内的变量每次迭代(即循环)都要经历从创建到销毁的过程。


3、do while语句应该在括号围起来的条件后面用一个分号表示语句结束,这点我一直没有注意到。

对于do while来说,先执行语句或者块(即复合语句),后判断条件,所以不允许在条件部分定义变量。因为如果允许在条件部分定义变量,则变量的使用出现在定义之前,这显然是不合理的。


4、break语句

break负责终止离它最近的while /do while /for /switch语句,并从这些语句之后的第一条语句开始继续执行。

continue语句终止最近循环中的当前迭代并立即开始下一次迭代。continue语句只能出现在for /while /do while循环的内部,或嵌套在此类循环里的语句块或块的内部。和break不同的是,只要当switch语句嵌套在迭代语句内部时,才能在switch里使用continue。


5、try语句块和异常处理

(1)throw表达式引发一个异常(也指抛出一个异常),异常检测部分使用throw表达式表示它遇到无法处理的问题,throw关键字后跟的表达式就是抛出的异常类型。

(2)try语句块:将程序中可能出现异常的代码放入try块中。当try块中有语句引发异常时,系统将不再执行try块中未执行的语句,而执行匹配的catch(异常处理代码)块。如果try块中没有语句引发异常,则程序执行完try块中的语句后不执行catch块中的语句,即跳过catch语句,继续执行后面的程序。
每个try语句后面必须伴随一个或多个catch语句,用于捕捉try语句块所产生的异常并作相应的处理。多个catch块 一个catch块只能处理一类异常,当try块中的语句组可能抛出多种异常时,就需要有多个catch块来分别处理各种异常。

如:

try{
int a=args.length; 

 System.out.println("a=" + a);
int b=42/a; 

 int c[]={1};

 c[42]=99;
}catch(ArithmeticException e){
System.out.println("div by 0:" + e);
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("array index oob:" + e);
}


异常安全:表示当抛出异常后,程序能执行正确的行为。

一如往常,try语句块中声明的变量在块外部无法访问,特别在catch子句中也无法访问。

如果一段程序没有try语句块且发生了异常。系统会调用terminate函数并终止当前程序的执行。如果程序包含try语句块,但是最终没有找到匹配的catch子句,程序转到名为terminate的库函数。


6、标准异常

C++定义了一组类用于报告标准库函数遇到的问题,他们分别在以下4个头文件里:

  • exception头文件:定义了最通用的异常类exception。只报告异常的发生,不提供任何额外信息
  • stdexcept头文件:定义了集中异常,exception  /runtime_error  /range_error  /overflow_error  /underflow_error   /logic_error  /domain_error  /invalid_argument  /length_error  /out_of_range
  • new头文件:定义了bad_alloc异常类型
  • type_info头文件:定义了bad_cast异常类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值