亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: c++開發(fā)代碼中到底該不該用異常? [打印本頁]

作者: wwdwwd    時(shí)間: 2010-04-23 17:26
標(biāo)題: c++開發(fā)代碼中到底該不該用異常?
本帖最后由 wwdwwd 于 2010-04-23 17:28 編輯

我之前用c開發(fā),錯(cuò)誤處理基本上是用錯(cuò)誤碼,經(jīng)常要判斷很多次錯(cuò)誤,而且要一層一層的往上傳。最近的項(xiàng)目用c++開發(fā),想用異常處理,有幾個(gè)問題想請(qǐng)教一下大家。
1:項(xiàng)目中的錯(cuò)誤處理方式應(yīng)該統(tǒng)一,這是前提。也就是要么全部用錯(cuò)誤碼,要么全部用異常,對(duì)吧?那假設(shè)我們?nèi)坑卯惓5脑挘倳?huì)調(diào)用一些底層的函數(shù),底層函數(shù)都是c函數(shù),而c函數(shù)都是用錯(cuò)誤碼返回的,那就與項(xiàng)目中錯(cuò)誤處理方式統(tǒng)一的前提相違背了,那結(jié)論就是永遠(yuǎn)不能用異常了?
2:如果說我的程序全部使用異常的話,又假設(shè)我的程序有三層,第一層調(diào)用系統(tǒng)函數(shù),第二層調(diào)用第一層函數(shù)或系統(tǒng)函數(shù),第三層調(diào)用第一,第二層函數(shù)和系統(tǒng)函數(shù),那我應(yīng)該在哪一層或什么地方拋出異常呢?
3:異常的目的是干什么?是想把錯(cuò)誤統(tǒng)一處理,對(duì)吧。但是對(duì)于錯(cuò)誤我總要處理吧,我可以把不同的異常統(tǒng)一拋出,但是不能統(tǒng)一處理,因?yàn)橥粋(gè)異?赡苡蓭追N情況產(chǎn)生,理想的方法應(yīng)該是對(duì)每種情況作對(duì)應(yīng)的處理,如果是這樣的話,那用錯(cuò)誤碼返回也一樣,都挺麻煩的;有人說可以對(duì)不同的情況產(chǎn)生不同類型的異常,那更麻煩,還是得對(duì)每種異常做對(duì)應(yīng)的處理,也許異常唯一的好處是強(qiáng)制上層捕捉錯(cuò)誤,而不能忽略,已保證程序的健壯性或者說錯(cuò)誤不擴(kuò)散。唯一可用的地方是對(duì)所有的錯(cuò)誤都做統(tǒng)一處理,但這有怎么可能?其他的地方我想不出異常比錯(cuò)誤碼返回好在哪里
作者: fera    時(shí)間: 2010-04-23 17:30
不到萬不得已不要使用異常——開銷太大
作者: hellioncu    時(shí)間: 2010-04-23 17:30
用了異常沒有必要全部使用異常,簡(jiǎn)單的還是可以用錯(cuò)誤碼
作者: wwdwwd    時(shí)間: 2010-04-23 17:52
不到萬不得已不要使用異常——開銷太大
fera 發(fā)表于 2010-04-23 17:30

暫時(shí)不管開銷的問題
作者: peijue    時(shí)間: 2010-04-23 21:47
還有一個(gè)異常的可靠性問題, 是否真的能完全捕捉還不一定
作者: numdisp    時(shí)間: 2010-04-23 22:12
前面討論了怎么看面向?qū)ο,現(xiàn)在又討論該不該用異常。
都是一些仁者見仁智者見智的東西。

我的問題是:為什么這些日子總是在討論這些純學(xué)術(shù)問題呢?
作者: ydfgic    時(shí)間: 2010-04-24 10:19
錯(cuò)誤和異常 應(yīng)該看作不同的概念。
我是這樣理解的:
錯(cuò)誤是可以容忍的部分或者 你可以接受的部分 處理簡(jiǎn)單
異常是可能上一層也無法處理的,非常極端的情況

比較少用異常,除非萬不得已
作者: rain_fish    時(shí)間: 2010-04-24 19:05
不知道該不該用,不過平時(shí)很少用
作者: yecheng_110    時(shí)間: 2010-04-24 22:35
異常很重要的一點(diǎn)是不能忽略
作者: geel    時(shí)間: 2010-04-24 22:56
本帖最后由 geel 于 2010-04-24 22:59 編輯

用異常的好處是在外圍控制簡(jiǎn)單,并且有一些層次可以不寫錯(cuò)誤控制的代碼。比如有層次 A->B->C->D ,假設(shè)D里可能產(chǎn)生異常,那可以B和C不做處理,只在A捕獲異常,也能知道是誰拋的,拋的什么,這樣里面的層次只管拋,不管具體處理,最外層(一般都是具體流程控制層)再負(fù)責(zé)寫日志做clean up以及安撫用戶之類的瑣事。錯(cuò)誤碼需要每一層都處理上層的錯(cuò)誤并且手工傳遞。

我的意見是根據(jù)層次以及項(xiàng)目組人員素質(zhì)來決定用何種方式,最外層和最內(nèi)層(指代碼邏輯結(jié)構(gòu))強(qiáng)制使用異常,中間那些就隨便寫了。這樣問題1和3也就自然解決了。

還有一種情況是每一層都可能產(chǎn)生跟上一層無關(guān)的錯(cuò)誤,那一是要看設(shè)計(jì),二是看看人員整體喜歡用哪種了。
作者: benjiam    時(shí)間: 2010-04-26 09:44
有很多人說了區(qū)別, 還是不太懂啊。 不知道錯(cuò)誤碼和異常的根本區(qū)別。

c 就沒有異常。
作者: ecjtubaowp    時(shí)間: 2010-04-26 09:48
前段時(shí)間總結(jié)了一下異常:http://hi.baidu.com/baowup/blog/ ... dcbdce7d1e7105.html
作者: noword2k    時(shí)間: 2010-04-26 10:12
不到萬不得已不要使用異!_銷太大
fera 發(fā)表于 2010-04-23 17:30



其實(shí),設(shè)計(jì)良好的話,異常的開銷可以忽略不計(jì)。
與帶來的好處相比,還是可以接受的。
作者: zxrjkl    時(shí)間: 2010-04-26 10:27
我認(rèn)為C++中的異常與錯(cuò)誤是不同的概念,
我們通常在函數(shù)調(diào)用中,實(shí)施不變式的檢查。不變式分為三類:前條件,后條件和不變式。前條件是指在函數(shù)調(diào)用之前,必須滿足的邏輯條件,后條件是函數(shù)調(diào)用后必須滿足的邏輯條件,不變式則是整個(gè)函數(shù)執(zhí)行中都必須滿足的條件。不變式既是前條件又是后條件。
前條件不滿足為錯(cuò)誤,前條件滿足而后條件不滿足才是異常,
如數(shù)組下標(biāo)越界是前條件不滿足,故僅為錯(cuò)誤。
按照這樣說,異常處理應(yīng)與錯(cuò)誤處理混合使用
具體見http://www.sf.org.cn/Article/base/200612/19694.html
作者: wwdwwd    時(shí)間: 2010-04-27 18:09
用異常的好處是在外圍控制簡(jiǎn)單,并且有一些層次可以不寫錯(cuò)誤控制的代碼。比如有層次 A->B->C->D ,假設(shè)D里可 ...
geel 發(fā)表于 2010-04-24 22:56

非常感謝,完全理解你所說的意思,以前的項(xiàng)目組,現(xiàn)在的項(xiàng)目組中大家都不用異常,感覺很奇怪,其實(shí)我覺得應(yīng)該盡量用異常(除非性能真的很重要),c++的優(yōu)點(diǎn)就是更加嚴(yán)格編程,異常正是體現(xiàn)了這點(diǎn),迫使錯(cuò)誤必須得被捕獲和處理,這在企業(yè)軟件開發(fā)中至為重要,因?yàn)槠髽I(yè)關(guān)心的是軟件的穩(wěn)定性,性能倒是其次,一件事情慢一點(diǎn)關(guān)系不大,但不能錯(cuò)。
我自己把我的幾個(gè)問題回答一下:

1:所有的異常都是程序拋出的,不論是我們自己的程序還是c/c++運(yùn)行庫。底層c函數(shù)如果用錯(cuò)誤碼返回,我們?cè)诜庋b的時(shí)候應(yīng)該拋異常
2:正如你所說,在底層拋異常,在最上層捕獲異常,中間層一般是組件層不管,相關(guān)的clean up 析構(gòu)函數(shù)會(huì)處理的;
3:我們?cè)趻伄惓5臅r(shí)候應(yīng)該按某個(gè)功能邏輯拋,同一功能的異?梢越y(tǒng)一處理,例如記錯(cuò)誤日志,顯示錯(cuò)誤信息,回滾此功能邏輯;對(duì)于不同的功能邏輯,則拋不同的異常;至于怎么才算是同一個(gè)功能,要具體分析了。

總之,thank you.
作者: OwnWaterloo    時(shí)間: 2010-04-27 21:45
回復(fù) 10# geel

我是來頂10樓的

關(guān)鍵詞: 項(xiàng)目組人員素質(zhì)。
作者: 字母二十六    時(shí)間: 2010-04-28 03:57
平時(shí)很少用的




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2