浣庡眰浜嬩歡錛氭寚紜歡鐩稿叧鐨勯敊璇紝姣斿錛岄櫎闆躲佹誕鐐歸敊璇佸唴瀛樿繚渚嬨佷腑鏂寚浠ゃ傛寜鐓++鐨勮鐐癸紝瀹冧滑涓嶅睘浜嶤++寮傚父鐨勮寖鐣達紝搴旂敱搴曞眰閿欒澶勭悊鏈哄埗錛堟鏌ラ槻鑼冩垨SEH寮傚父錛夋潵闃茶寖鎴栬呭寘瑁呮垚C++寮傚父錛堢瑪鑰呮敞錛氬簲璇ユ槸浠庡鐞嗘晥鐜囩殑瑙掑害鑰冭檻鐨勶級銆傚叿浣撴潵璇達紝闄ら浂鍜屾誕鐐歸敊璇紝搴斾互闃茶寖涓轟富錛屼負浜嗘晥鐜囦篃鍙互鐢⊿EH淇濇姢浠g爜孌碉紱涓柇鎸囦護灞炰簬鐢ㄦ埛鐗規畩琛屼負錛岀敱鐢ㄦ埛鑷澶勭悊錛涘唴瀛樿繚渚嬶紝搴旇鏄粷瀵圭姝㈢殑錛屼互闃茶寖涓轟富錛屼竴鏃﹀嚭鐜幫紝鍗沖簲璇ヤ互鏈崟鑾風殑SEH寮傚父鐨勫艦寮忥紝鎶涚粰璋冭瘯鎶ラ敊宸ュ叿澶勭悊錛屽繀瑕佹椂鐢卞叾榪涜閿欒鐜板満杞偍錛堢瑪鑰呮敞錛氱敱浜嶹in32鍚勪釜騫沖彴涓嬶紝榛樿璋冭瘯鎶ラ敊宸ュ叿甯鎬笉涓鑷淬佽繕鍙楀畨瑁呯殑璋冭瘯杞歡褰卞搷錛屾墍浠ュ疄璺典腑錛屾帹鑽愮敤鑷畾涔夌殑鏈崟鑾稴EH寮傚父澶勭悊鍑芥暟鏇挎崲緋葷粺鏍囧噯澶勭悊榪囩▼錛屾洿鍙潬瀹炵幇閿欒鐜板満杞偍錛夈?/p>
C榪愯搴撲簨浠訛細鎸嘺bort璋冪敤銆佽繍琛屾椂瀹夊叏媯鏌?鍫嗘爤婧㈠嚭)銆乢invalid_parameter閿欒銆傚悓鏍峰畠浠笉灞炰簬C++寮傚父鐨勮寖鐣達紝涓鏃﹀嚭鐜幫紝涔熺珛鍗崇粓姝㈢▼搴忋俈C2005 C榪愯搴撳皢鍏剁洿鎺ユ姏緇欑郴緇熺駭鐨勬湭鎹曡幏SEH寮傚父澶勭悊鍑芥暟鏉ュ鐞嗐?絎旇呮敞錛氬彲鐢╛set_abort_behavior(0, _WRITE_ABORT_MSG | _CALL_REPORTFAULT), signal(SIGABRT, ...), _set_invalid_parameter_handler錛屾潵鎴幏澶勭悊銆傝屽爢鏍堟孩鍑猴紝鍒欓渶瑕佹埅鑾稶nhandledExceptionFilter鏉ュ疄鐜?銆?/p>
鏍囧噯C++搴撲簨浠訛細new銆乼erminate銆乽nexpected璋冪敤銆傝繖浜涗簨浠墮粯璁や互SEH鏈崟鑾峰紓甯哥殑鏂瑰紡澶勭悊銆?/p>
SEH寮傚父錛歋EH寮傚父鍖呮嫭浜嗕笂榪扮殑搴曞眰浜嬩歡銆係EH寮傚父鏈哄埗涓嶉噴鏀懼眬閮ㄥ璞★紝鍥犳鍙帹鑽愮敤浜庡搴曞眰寮傚父鏈哄埗鐨勫寘瑁呫?/p>
C++寮傚父錛氭寜鐓++寮傚父琚湅鎴愪簡涓縐嶉敊璇鐞嗘満鍒訛紝鍥犳錛屽畠騫朵笉鎶婂簳灞備簨浠剁湅浣滃紓甯革紝鑰屽彧鎶妕hrow瑙嗕負寮傚父錛屽嵆C++寮傚父鏈哄埗鍙洿鎺ユ崟鑾瘋蔣浠跺紓甯革紝紜歡寮傚父闇瑕侀棿鎺ユ崟鑾楓傜悊瑙h繖涓鐐癸紝灝嗘湁鍔╀簬鎴戜滑鐪熸鐞嗚ВC++寮傚父鏄竴縐嶈蔣浠舵墜孌碉紝鑰屼笉鏄繚鎶ょ▼搴忕殑涓囪兘鐏佃嵂銆侰++寮傚父浼氳嚜鍔ㄩ噴鏀懼眬閮ㄥ璞★紝榪欎嬌寰桟++寮傚父鐪熸鍏鋒湁浜嗚祫婧愬畨鍏ㄦэ紝褰撶劧鍓嶆彁鏄紝浣跨敤灞閮ㄥ璞¤嚜鍔ㄩ噴鏀劇殑鏈哄埗鏉ヤ繚鎶よ祫婧愬垎閰嶃侰++寮傚父鏄簲鐢ㄥ眰寮鍙戜腑閿欒澶勭悊鐨勯噸瑕佸伐鍏鳳紝榪欎竴鐐規樉鐒惰繕鏈緱鍒拌凍澶熺殑閲嶈錛屽綋鐒惰繖鏄敱浜庤璁°佷嬌鐢–++寮傚父閮介渶瑕佸叏鏂扮殑鎬濈淮瑙傚拰璁捐鎶宸с?/p>
闄勶細鍚屾寮傚父涓庡紓姝ュ紓甯?br>1) VC鐨凜++ Exception 閲囩敤涓ょ妯″紡鎹曡幏寮傚父錛氬悓姝ユā寮忓拰寮傛妯″紡銆俈C鐨勫伐紼嬬殑璋冭瘯鐗堟湰緙虹渷浣跨敤寮傛妯″紡錛屽伐紼嬬殑鍙戝竷鐗堟湰緙虹渷浣跨敤鍚屾妯″紡銆傚湪鍚屾妯″紡涓嬶紝VC鐨勭紪璇戝櫒鍋囧畾浠g爜涓彧鏈夊湪鏄劇ず浣跨敤throw鍜岃皟鐢ㄥ嚱鏁扮殑鏃跺欐墠浼氬紩鍙戝紓甯革紝鍥犳錛屽湪鍚屾妯″紡涓嬶紝VC緙栬瘧鍑虹殑浠g爜姣旇緝灝忥紝浣嗗湪榪欑妯″紡涓嬶紝try-catch瀵逛笉鑳芥崟鑾峰唴瀛樿闂紓甯鎬笌綆楁湳闄ら浂寮傚父絳夈傚湪寮傛妯″紡涓嬶紝VC鐨勭紪璇戝櫒涓簍ry鍧楀唴鐨勬瘡涓鏉¤鍙ョ敓鎴愬紓甯告崟鑾蜂唬鐮侊紝鍦ㄨ繖縐嶆儏鍐典笅錛屼粬鑳藉鎹曡幏鍏ㄩ儴鐨勫紓甯革紝榪樿兘淇濊瘉鏍堜笂瀵硅薄鍦ㄨВ鏍堜腑姝g‘閲婃斁銆備負浜嗚鍦ㄥ彂琛岀増鏈腑涔熻兘澶熸崟鑾峰叏閮ㄥ紓甯稿氨闇瑕佹墦寮寮傛妯″紡錛屼絾浠d環鏄▼搴忕紪璇戝嚭浠g爜鍙樺ぇ錛岃繍琛岄熷害鍙樻參銆?br>2)緙栬瘧閫夐」錛?br>鍚屾妯″紡鐨勭紪璇戦夐」涓?EHs鎴栬?GX(絳夊悓浜?EHsc)
寮傛妯″紡鐨勭紪璇戦夐」涓?EHa
杞歡榪愯鏃ュ織鏄粰璋佺湅鐨勶紵鎴戣涓烘槸杞歡緇存姢浜哄憳銆佽祫娣卞鎴鳳紙姣斿瀹㈡埛鏂圭殑緋葷粺綆$悊鍛橈級銆傝蔣浠朵腑鐨勯敊璇俊鎭紝搴旇鍒嗕負涓ょ被錛屼竴綾繪槸杞歡鐢ㄦ埛鑳藉鐞嗚В鐨勶紝鍙︿竴綾繪槸杞歡鐢ㄦ埛涓嶈兘鐞嗚В鐨勶紝闇瑕佽蔣浠剁淮鎶や漢鍛樹粙鍏ョ殑銆傚墠鑰咃紝閫氬父涓庤蔣浠剁敤鎴風殑鎿嶄綔琛屼負鐩稿叧錛岃蔣浠剁敤鎴峰湪寰楀埌鎻愮ず鍚庯紝鍙互鑷榪涜澶勭悊錛涜屽悗鑰咃紝閫氬父涓庤蔣浠惰嚜韜己闄楓佽蔣浠墮儴緗茬幆澧冮棶棰樼浉鍏崇殑錛屽彧鏈夎蔣浠剁淮鎶や漢鍛樻墠鑳藉鐞嗙殑銆傚緢鏄庢樉錛屽浜庡悗鑰呯殑璇︾粏鍐呭錛屾病蹇呰鐢ㄥ憡璀﹀璇濇鐨勬柟寮忔彁渚涚粰杞歡鐢ㄦ埛錛岃屼笖榪欐牱鍋氾紝浼氬ぇ澶у鍔犺蔣浠墮敊璇鐞嗙殑澶嶆潅搴︺傜洿鎺ュ皢鍏跺啓鍏ヨ繍琛屾棩蹇楋紝鏄渶綆渚褲佷篃鏈鍙潬鐨勬柟娉曘傚彲浠ユ兂璞′笅闈㈢殑鍦烘櫙錛屽簲鐢ㄨ蔣浠跺湪鏌愬彴鐢佃剳涓婅繍琛屽嚭閿欙紝杞歡緇存姢浜哄憳鎴栧鎴鋒柟緋葷粺綆$悊鍛樻煡鐪嬭繍琛屾棩蹇楋紝鍙戠幇浜嗕竴浜涚郴緇熸ā鍧楄皟鐢ㄥけ璐ョ殑淇℃伅錛屽茍涓庡紑鍙戜漢鍛樿繙紼嬫矡閫氾紝寮鍙戜漢鍛樻牴鎹繖浜涗俊鎭紝榪呴熷畾浣嶆姤鍛婇敊璇殑浠g爜錛岄殢鍚庡紑鍙戜漢鍛樺彲鑳藉弽棣堬紝鏌愪釜緋葷粺緇勪歡娌℃湁鐨勫埌姝g‘鐨勯厤緗紝涔熷彲鑳藉弽棣堬紝杞歡涓湁涓澶勭己闄鳳紝灝嗗湪涓嬩竴涓増鏈垨琛ヤ竵鍖呬腑寰楀埌淇銆備笉綆℃槸鍝竴縐嶆儏鍐碉紝榪欎竴榪囩▼璁╂垜浠劅鍒扮殑鏄晥鐜囧拰鎰夋偊銆?/p>
鍦ㄤ簡瑙e埌杞歡鏃ュ織鏄粰璋佺湅鐨勪箣鍚庯紝鎴戜滑灝卞彲浠ュ悎鐞嗗埗瀹氳蔣浠朵腑鐨勯敊璇鐞嗙瓥鐣ャ備竴浜涢敊璇紝鎴戜滑闇瑕侀愬眰鍚戜笂鎶ワ紝鏈緇堝緱鍒板Ε鍠勫鐞嗘垨鑰呭悜鐢ㄦ埛緇欏嚭鎻愮ず錛涘彟涓浜涢敊璇紝鎴戜滑鐩存帴灝嗗叾淇℃伅鍐欏叆杞歡榪愯鏃ュ織錛屽茍鍚戜笂鍙嶉鏈嚱鏁板彂鐢熶簡閿欒錛屾湭鑳芥垚鍔熸墽琛屻?/p>
杞歡榪愯鏃ュ織鐨勫唴瀹規湁鍝簺錛熸垜璁や負鍙互鍒嗕負錛氬叧閿俊鎭彁紺恒佽鍛婃彁紺恒侀敊璇彁紺恒佽嚧鍛介棶棰樻彁紺恒佽皟璇曟棩蹇椼傚叧閿俊鎭彁紺猴紝鏄寚杞歡鎵ц鍒頒簡鏌愪簺閲嶈鐨勮妭鐐癸紝灝卞皢鐩稿簲鐨勪俊鎭啓鍏ヨ蔣浠惰繍琛屾棩蹇楋紝閫氳繃榪欎簺鍏抽敭淇℃伅鎻愮ず錛屾垜浠彲浠ヤ簡瑙h蔣浠剁殑澶ц嚧榪愯榪囩▼鏄惁姝e父錛岃屽畠鎴愭湰闈炲父浣庡粔錛岀浉姣斿畨瑁呭簽澶х殑寮鍙戣皟璇曠幆澧冦傝鍛婃彁紺哄拰閿欒鎻愮ず錛岄兘鏄敤浜庢彁紺鴻蔣浠朵腑鐨勯敊璇紝閭d箞涓よ呬箣闂寸殑鍖哄埆濡備綍鐣屽畾鍛紵榪樻湁錛岃皟璇曟棩蹇椾篃鏄姤鍛婅蔣浠墮敊璇殑錛屼笌榪欎袱鑰呭張濡備綍鐩稿尯鍒憿錛?/p>
鎴戣涓猴紝璋冭瘯鏃ュ織涓庤鍛婃彁紺恒侀敊璇彁紺虹殑鏈川鎬у尯鍒湪浜庯紝璋冭瘯鏃ュ織鏄潰鍚戝紑鍙戜漢鍛樼殑錛屾槸浠庤蔣浠舵墽琛岀殑瑙掑害鍙戝嚭鐨勶紱璀﹀憡鎻愮ず銆侀敊璇彁紺烘槸浠庤蔣浠跺姛鑳界殑瑙掑害鍙戝嚭鐨勩傛崲鑰岃█涔嬶紝璋冭瘯鏃ュ織鏄褰曡蔣浠惰繍琛屼腑鐨勯潪姝e父鐜拌薄錛岃岃鍛婃彁紺恒侀敊璇彁紺烘槸璁板綍杞歡鏌愰」鍔熻兘澶卞父鐨勭浉鍏充俊鎭?/p>
鎴戣涓猴紝璀﹀憡鎻愮ず銆侀敊璇彁紺虹殑鏈川鎬у尯鍒湪浜庯紝璀﹀憡鎻愮ず鏄蔣浠跺姛鑳藉嚭鐜伴棶棰橈紝浣嗘病鏈夊交搴曞け鏁堬紱閿欒鎻愮ず錛屽氨鏄欏瑰姛鑳藉畬鍏ㄥけ鏁堬紝璇ラ」鍔熻兘鍋滄鎵ц錛岀珛鍗寵繑鍥烇紱鑷村懡闂鎻愮ず錛屽垯鏄蔣浠舵暣浣撳畨鍏ㄥ彈鍒板▉鑳併傚弽鏄犲埌紼嬪簭涓紝閫氬父灝辨槸錛屽湪涓涓嚱鏁頒腑媯嫻嬪埌閿欒鍚庯紝璇ュ嚱鏁頒互澶辮觸鐨勬柟寮忚繑鍥烇紝灝辨姤鍛婇敊璇彁紺猴紱鑻ュ嚱鏁頒粛鑳界戶緇墽琛岋紝灝辨姤鍛婂憡璀︽彁紺猴紱鑻ヨ閿欒涓ラ噸榪濅緥錛屾瘮濡傛柇璦榪濅緥銆佸唴瀛樻孩鍑恒佸爢鏍堟孩鍑虹瓑濞佽儊紼沖畾鎬х殑閿欒錛屽氨鎶ュ憡鑷村懡闂鎻愮ず銆?/p>
涓鑸潵璇達紝鑷村懡鎬ф彁紺猴紝閫氬父鏄笌杞歡鑷韓緙洪櫡寮曡搗鐨勶紝搴斿綋寮曡搗寮鍙戜漢鍛樼殑閲嶈錛涜鍛婃彁紺恒侀敊璇彁紺哄鍗婃槸杞歡榪愯鐜閰嶇疆闂寮曡搗鐨勶紝浣嗕篃涓嶆帓闄よ蔣浠剁己闄楓佺敤鎴鋒搷浣滅瓑鍥犵礌錛屽簲褰撳紩璧瘋蔣浠剁淮鎶や漢鍛樸佺郴緇熺鐞嗗憳鐨勬敞鎰忋?/p>
瀵逛簬杞歡緇存姢浜哄憳錛岃皟璇曟棩蹇楁剰涔変笉澶э紝鑰屽叾鏁版嵁杈撳嚭閲忓嵈寰寰鐩稿綋澶э紝鍥犳錛屽湪杞歡閮ㄧ講榪愯鐜涓嬶紝閫氬父搴斿綋閫氳繃閰嶇疆寮鍏籌紝鍏抽棴璋冭瘯鏃ュ織杈撳嚭銆傚彧鏈夊紑鍙戜漢鍛樹粙鍏ュ悗錛屾墠鏈夊繀瑕佹墦寮璇ュ紑鍏籌紝浠庤屽湪緙轟箯璋冭瘯宸ュ叿鐨勭幆澧冧腑錛岃幏寰椾赴瀵岀殑璋冭瘯淇℃伅銆?/p>
鎬葷殑鏉ヨ錛屽皢姣忎竴縐嶉敊璇佹瘡涓縐嶈蔣浠剁幆澧冮厤緗棶棰橀兘浠ュ璇濇鐨勬柟寮忔彁紺哄嚭鏉ワ紝鎴栬鍙互鍑忓皬緇存姢鎴愭湰錛屼唬浠峰嵈鏄紑鍙戞垚鏈垚鍑犱綍綰ф暟澧為暱錛涜蔣浠跺紑鍙戜腑鐪佹帀閿欒澶勭悊錛岀殑紜彲鍑忓皯涓浜涙垚鏈紝浠d環鏄嵆渚夸竴涓幆澧冮厤緗棶棰橈紝閮介渶瑕佸紑鍙戜漢鍛樼幇鍦鴻皟璇曪紝杞歡緇存姢鎴愭湰澶уぇ澧炲姞銆傝岃蔣浠惰繍琛屾棩蹇楋紝鏃犵枒鏄袱鑰呬箣闂村彇寰楀鉤琛$殑鍏抽敭鎬ф鍣ㄣ?br>
KISS - Keep It Simple Stupid
DRY - Don't Repeat Yourself
鍦ㄨ繖涓ゅ彞闈㈠墠錛屾垜鍐嶅啓涓嬩換浣曚笢瑗塊兘鏄浣欑殑銆?/p>
鍓╀笅鐨勫氨鏄墷璁板拰瀹炶返!
錛堟鏂囨槸闃呰涓嬫枃鐨勭瑪璁般?a >http://blog.csdn.net/pongba/archive/2009/03/09/3974110.aspx錛?/p>
Make it work, make it right, make it effective.
DOTDIW鍘熷垯(Do One Thing,Do It Well).
鎽樿嚜http://www.shnenglu.com/converse/