看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《icetofux ()》之銘言: : 程式碼(Code): (請善用置底文標色功能) : http://codepad.org/oQyBJLMx : 補充說明(Supplement): : 上面的程式碼是我參考其他網站用類別來做出陣列,其中37~46行的地方,我在使用者 : 發生違規取值時拋出一個例外,但是除了印出警告外,使用者還是可以取得一個我指 : 定的返回值0,我希望用更嚴謹的方式來處理類似的問題,比方說發生違規存取時直接 : 終止程式的執行,但是我不想把try、throw、catch拉到54行的for迴圈來處理,因為 : 這表示未來我在處理Get()成員函式都得加上冗長的例外處理。 : 請問有沒有其他方式可以達到我想要的效果呢? : 謝謝 我猜你想做到的效果是這樣:當 Get() 越界的時候印出警告,並且終止程式 如果目的是這樣的話,程式碼其實很簡單: int Array::Get(int Inx) { if(Inx>EndAddr){ cout<<"Input index: "<<Inx<<" over then array size!"<<endl; throw Inx; // 如果Inx超過陣列大小,丟出例外。 } return ArrPtr[Inx]; } 迴圈的地方不變 這麼一來只要使用者越界存取, 這個 exception 因為沒有被 catch 到 會直接中止程式執行 如果使用者不希望程式被中止 只要在迴圈外加上 try/catch 即可 不過建議你不要直接拿 int 當作 exception 物件 用 std::range_error 會比較好 然後你可以把警告訊息存在 exception 物件中 讓使用者自行決定如何顯示 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.15.163
icetofux:謝謝你,書中確實有提到throw沒被catch到程式就會中止, 12/31 14:22
icetofux:我漏看了。 12/31 14:23
loveme00835:std::range_error 是用來表示計算結果超出值域, 我覺 12/31 20:48
loveme00835:得用 out_of_range 比較好, STL containers也是這麼做 12/31 20:48
littleshan:嗯 我弄錯了 12/31 23:14