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

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

ID:11187678

大小:20.35 KB

頁數(shù):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)的妙用》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫

1、do...while(0)do...while(false)的妙用?在C++中,有三種類型的循環(huán)語句:for,while,和do...while,但是在一般應用中作循環(huán)時,我們可能用for和while要多一些,do...while相對不受重視。?但是,最近在讀我們項目的代碼時,卻發(fā)現(xiàn)了do...while的一些十分聰明的用法,不是用來做循環(huán),而是用作其他來提高代碼的健壯性。1.do...while(0)消除goto語句。通常,如果在一個函數(shù)中開始要分配一些資源,然后在中途執(zhí)行過程中如果遇到錯誤則退出函數(shù),當然,退出前先

2、釋放資源,我們的代碼可能是這樣:version1[cpp]viewplaincopy1.bool?Execute()??2.{??3.???//?分配資源??4.???int?*p?=?new?int;??5.???bool?bOk(true);??6.??7.???//?執(zhí)行并進行錯誤處理??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.???//?執(zhí)行成功,釋放資源并返回??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.???//?執(zhí)行并進行錯誤處理??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、??//?執(zhí)行成功,釋放資源并返回??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)循環(huán):version3[cpp]viewplaincopy1.bool?Execute()??2.{??3.???//?分配資源??4.???int?*p?=?new?int;??5.??6.???bool?bOk(true);??7.???do??8.???{??9.??????//?執(zhí)行并進行錯誤處理??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. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內容,確認文檔內容符合您的需求后進行下載,若出現(xiàn)內容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。