do...while(0) do...while(false)的妙用

do...while(0) do...while(false)的妙用

ID:11187678

大小:20.35 KB

页数:6页

时间:2018-07-10

do...while(0) do...while(false)的妙用_第1页
do...while(0) do...while(false)的妙用_第2页
do...while(0) do...while(false)的妙用_第3页
do...while(0) do...while(false)的妙用_第4页
do...while(0) do...while(false)的妙用_第5页
资源描述:

《do...while(0) do...while(false)的妙用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、do...while(0)do...while(false)的妙用 在C++中,有三种类型的循环语句:for,while,和do...while,但是在一般应用中作循环时,我们可能用for和while要多一些,do...while相对不受重视。 但是,最近在读我们项目的代码时,却发现了do...while的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性。1.do...while(0)消除goto语句。通常,如果在一个函数中开始要分配一些资源,然后在中途执行过程中如果遇到错误则退出函数,当然,退出前先

2、释放资源,我们的代码可能是这样:version1[cpp]viewplaincopy1.bool Execute()  2.{  3.   // 分配资源  4.   int *p = new int;  5.   bool bOk(true);  6.  7.   // 执行并进行错误处理  8.   bOk = func1();  9.   if(!bOk)   10.   {  11.      delete p;     12.      p = NULL;  13.      return false;  1

3、4.   }  15.  16.   bOk = func2();  17.   if(!bOk)   18.   {  19.      delete p;     20.      p = NULL;  21.      return false;  22.   }  23.  24.   bOk = func3();  25.   if(!bOk)   1.   {  2.      delete p;     3.      p = NULL;  4.      return false;  5.   }  6

4、.  7.   // ..........  8.  9.   // 执行成功,释放资源并返回  10.    delete p;     11.    p = NULL;  12.    return true;  13.     14.}  这里一个最大的问题就是代码的冗余,而且我每增加一个操作,就需要做相应的错误处理,非常不灵活。于是我们想到了goto:version2[cpp]viewplaincopy1.bool Execute()  2.{  3.   // 分配资源  4.   int *p = new 

5、int;  5.   bool bOk(true);  6.  7.   // 执行并进行错误处理  8.   bOk = func1();  9.   if(!bOk) goto errorhandle;  10.  11.   bOk = func2();  12.   if(!bOk) goto errorhandle;  13.  14.   bOk = func3();  15.   if(!bOk) goto errorhandle;  16.  17.   // ..........  18.  19. 

6、  // 执行成功,释放资源并返回  20.    delete p;     21.    p = NULL;  22.    return true;  23.  1.errorhandle:  2.    delete p;     3.    p = NULL;  4.    return false;  5.     6.}  代码冗余是消除了,但是我们引入了C++中身份比较微妙的goto语句,虽然正确的使用goto可以大大提高程序的灵活性与简洁性,但太灵活的东西往往是很危险的,它会让我们的程序捉摸不定,那么

7、怎么才能避免使用goto语句,又能消除代码冗余呢,请看do...while(0)循环:version3[cpp]viewplaincopy1.bool Execute()  2.{  3.   // 分配资源  4.   int *p = new int;  5.  6.   bool bOk(true);  7.   do  8.   {  9.      // 执行并进行错误处理  10.      bOk = func1();  11.      if(!bOk) break;  12.  13.      bO

8、k = func2();  14.      if(!bOk) break;  15.  16.      bOk = func3();  17.      if(!bOk) break;  18.  19.      // ..........  20.  21.   }while(0);  22.  23.    // 释放资

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。