筆記範圍:
2.6節
每個程式設計師都知道,在程式執行過程中,一些情況是不可預料的,無論程式的設計看起來是多麼完善,在某個特定的環境裡同樣會出錯,但是這樣的錯誤往往會有些共同之處,比如
new的時候也許會空間不足。顯然這樣的錯誤。不能完全說是程式設計的問題,但是如果你的程式能對這些情況做出反應,那麼這樣的程式實用性就會更強。異常機制正是為此而生。
注意,這裡用了「機制」這個詞,也就意味者規則,正如本節開頭所說的:對於異常各人都有自己的處理方式。比如就用
if語句處理。本來這是沒什麼問題的,但是我們生活在乙個不幸的時代,程式的規模大得遠遠超出了個人能力能夠接受的程度。我們需要合作,因此統一的編碼風格成了必要的事情了,這也是為什麼程式設計師經常告訴初學者程式設計是最不具備個性化的東西之一的乙個原因,
使用異常機制還有乙個好處。他可以大大減少**的長度和規模。對於相同的異常情況可以集中統一處理。這樣說很空泛,我們來舉乙個小例子
.,假設我們寫個函式分別為,
int,
char
的指標分配相同單位的空間,如不要異常機制,這樣寫:
bool new_space( int *&pev,char *&ch,int size )
這樣的東西恐怕沒人喜歡,因為如果我們這樣呼叫他,
new_space( p, c, 6 )
,無論空間分配成功與否。呼叫者都不知道
( 問:你不會定義個
bool
量嗎??答:會。煩。我用別的
),恩,得讓我們的東西人性化點。修改如下:
bool new_space( int *&pev,char *&ch,int size )
if( !ch )
return true;
} 呵呵,這下對得起可愛的使用者了吧?可是發現有點對不起自己。
cerr << "err1" 我寫了兩遍,這是兩個指標,如果十個呢?天哪。老闆,加工資吧
(回答你們一定知道
),那好,試試異常機制,再改。
boolnew_space(int*&pev,char*&ch,intsize )
catch
( string err )
returntrue;
}
呵呵,這下比較舒服了。大家可能看到上面那函式好像並沒有減少什麼長度,
yes,但如果處理的引數不只兩個,很多,你就會發現他省了你很多力氣,
上面主要想說明異常機制的好處和用法(水平有限,可能例子並不好)在本節中還有個重要的內容,那就是程式處理異常的方式和順序。比如上面的程式,我們想讓它在當分配成功時顯示
ok,那麼
cout << 「ok」
<< endl;
寫在那兒呢?如果我們的
try丟擲的異常在函式裡沒有相應的
catch
怎麼辦呢?這些書上都說很詳細。仔細看吧,一定收穫不少。
C primer 讀書筆記(9)
在函式宣告裡值得注意的一點是預設形參 default parameter 的宣告。預設形參即在呼叫函式時可以省略實參的形參,所以我覺得也可以翻譯成預設形參。在宣告函式時就顯式地給這些引數賦值了,如果沒有傳入實參,則直接使用預設值,如果傳入實參,就會覆蓋原來的預設值。有人可能會擔心,既然可以省略實參,...
《C Primer》讀書筆記(9)
1.運算子過載,當有的時候物件運算與正常運算子的操作意義相同時,為了 的簡潔,我們就可以使用運算子過載。比如乙個簡單的加法操作,沒有必要再寫乙個add方法,還是乙個 看著比較順眼。include stdafx.h include include using namespace std class a...
C primer 讀書筆記
第2 章 變數和基本型別 1 變數直接初始化和變數 複製初始化 int ival 1024 direct initialization int ival 1024 copy initialization 初始化不是賦值 2 內建型別復 制初始化和直接初始化幾乎沒有區別 但 對類型別物件來 說,有些初...