锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 聽聽聽
鐜頒唬璁$畻鏈轟腑鍐呭瓨絀洪棿閮芥槸鎸夌収byte鍒掑垎鐨勶紝浠庣悊璁轟笂璁蹭技涔庡浠諱綍綾誨瀷鐨勫彉閲忕殑璁塊棶鍙互浠庝換浣曞湴鍧寮濮嬶紝浣嗗疄闄呮儏鍐墊槸鍦ㄨ闂壒瀹氱被鍨嬪彉閲忕殑鏃跺欑粡甯稿湪鐗?
瀹氱殑鍐呭瓨鍦板潃璁塊棶錛岃繖灝遍渶瑕佸悇縐嶇被鍨嬫暟鎹寜鐓т竴瀹氱殑瑙勫垯鍦ㄧ┖闂翠笂鎺掑垪錛岃屼笉鏄『搴忕殑涓涓帴涓涓殑鎺掓斁錛岃繖灝辨槸瀵歸綈銆?br />聽聽聽
瀵歸綈鐨勪綔鐢ㄥ拰鍘熷洜錛氬悇涓‖浠跺鉤鍙板瀛樺偍絀洪棿鐨勫鐞嗕笂鏈夊緢澶х殑涓嶅悓銆備竴浜涘鉤鍙板鏌愪簺鐗瑰畾綾誨瀷鐨勬暟鎹彧鑳戒粠鏌愪簺鐗瑰畾鍦板潃寮濮嬪瓨鍙栥傛瘮濡傛湁浜涙灦鏋勭殑CPU鍦ㄨ闂?
涓涓病鏈夎繘琛屽榻愮殑鍙橀噺鐨勬椂鍊欎細鍙戠敓閿欒,閭d箞鍦ㄨ繖縐嶆灦鏋勪笅緙栫▼蹇呴』淇濊瘉瀛楄妭瀵歸綈.鍏朵粬騫沖彴鍙兘娌℃湁榪欑鎯呭喌錛屼絾鏄渶甯歌鐨勬槸濡傛灉涓嶆寜鐓ч傚悎鍏跺鉤鍙拌姹傚
鏁版嵁瀛樻斁榪涜瀵歸綈錛屼細鍦ㄥ瓨鍙栨晥鐜囦笂甯︽潵鎹熷け銆傛瘮濡傛湁浜涘鉤鍙版瘡嬈¤閮芥槸浠庡伓鍦板潃寮濮嬶紝濡傛灉涓涓猧nt鍨嬶紙鍋囪涓?2浣嶇郴緇燂級濡傛灉瀛樻斁鍦ㄥ伓鍦板潃寮濮嬬殑鍦版柟錛岄偅
涔堜竴涓鍛ㄦ湡灝卞彲浠ヨ鍑鴻繖32bit錛岃屽鏋滃瓨鏀懼湪濂囧湴鍧寮濮嬬殑鍦版柟錛屽氨闇瑕?涓鍛ㄦ湡錛屽茍瀵逛袱嬈¤鍑虹殑緇撴灉鐨勯珮浣庡瓧鑺傝繘琛屾嫾鍑戞墠鑳藉緱鍒拌32bit鏁?
鎹傛樉鐒跺湪璇誨彇鏁堢巼涓婁笅闄嶅緢澶氥?/p> 聽聽聽 鍏堣鎴戜滑鐪嬪嚑涓緥瀛愬惂(32bit,x86鐜,gcc緙栬瘧鍣?: 緇撴瀯浣揂涓寘鍚簡4瀛楄妭闀垮害鐨刬nt涓涓紝1瀛楄妭闀垮害鐨刢har涓涓拰2瀛楄妭闀垮害鐨剆hort鍨嬫暟鎹竴涓?B涔熶竴鏍?鎸夌悊璇碅,B澶у皬搴旇閮芥槸7瀛楄妭銆?br />涔嬫墍浠ュ嚭鐜頒笂闈㈢殑緇撴灉鏄洜涓虹紪璇戝櫒瑕佸鏁版嵁鎴愬憳鍦ㄧ┖闂翠笂榪涜瀵歸綈銆備笂闈㈡槸鎸夌収緙栬瘧鍣ㄧ殑榛樿璁劇疆榪涜瀵歸綈鐨勭粨鏋?閭d箞鎴戜滑鏄笉鏄彲浠ユ敼鍙樼紪璇戝櫒鐨勮繖縐嶉粯璁ゅ榻愯緗憿,褰撶劧鍙互.渚嬪: 聽聽聽 鍏堣鎴戜滑鐪嬪洓涓噸瑕佺殑鍩烘湰姒傚康錛?br />1.鏁版嵁綾誨瀷鑷韓鐨勫榻愬鹼細 1.鍦╒C IDE涓紝鍙互榪欐牱淇敼錛歔Project]|[Settings],c/c++閫夐」鍗ategory鐨凜ode Generation閫夐」鐨凷truct Member Alignment涓慨鏀癸紝榛樿鏄?瀛楄妭銆?br />2.鍦ㄧ紪鐮佹椂錛屽彲浠ヨ繖鏍峰姩鎬佷慨鏀癸細#pragma pack .娉ㄦ剰:鏄痯ragma鑰屼笉鏄痯rogma. 聽聽聽 浠g爜涓叧浜庡榻愮殑闅愭偅錛屽緢澶氭槸闅愬紡鐨勩傛瘮濡傚湪寮哄埗綾誨瀷杞崲鐨勬椂鍊欍備緥濡傦細 p=&i; 濡傛灉鍑虹幇瀵歸綈鎴栬呰祴鍊奸棶棰橀鍏堟煡鐪?br />1. 緙栬瘧鍣ㄧ殑big little绔緗?br />2. 鐪嬭繖縐嶄綋緋繪湰韜槸鍚︽敮鎸侀潪瀵歸綈璁塊棶 鍏?鐩稿叧鏂囩珷:杞嚜http://blog.csdn.net/goodluckyxl/archive/2005/10/17/506827.aspx 聽ARM涓嬬殑瀵歸綈澶勭悊 3.13 type聽 qulifiers 鏈夐儴鍒嗘憳鑷狝RM緙栬瘧鍣ㄦ枃妗e榻愰儴鍒?/p> 瀵歸綈鐨勪嬌鐢? 聽p = (char*)&a;聽聽聽聽聽聽聽聽聽 /* 褰撻珮綰ц璦鍑芥暟琚紪璇戞垚鏈哄櫒鐮佹椂錛屾湁涓涓棶棰樺氨蹇呴』瑙e喅錛氬洜涓篊PU娌℃湁鍔炴硶鐭ラ亾涓涓嚱鏁拌皟鐢ㄩ渶瑕佸灝戜釜銆佷粈涔堟牱鐨勫弬鏁般傚嵆璁$畻鏈轟笉鐭ラ亾鎬庝箞緇欒繖涓嚱鏁頒紶閫掑弬鏁幫紝浼犻掑弬鏁扮殑宸ヤ綔蹇呴』鐢卞嚱鏁拌皟鐢ㄨ呭拰鍑芥暟鏈韓鏉ュ崗璋?/font>銆備負姝わ紝璁$畻鏈烘彁渚涗簡涓縐嶈縐頒負鏍堢殑鏁版嵁緇撴瀯鏉ユ敮鎸佸弬鏁頒紶閫掋? 聽聽 鍑芥暟璋冪敤鏃訛紝璋冪敤鑰呬緷嬈℃妸鍙傛暟鍘嬫爤錛岀劧鍚庤皟鐢ㄥ嚱鏁幫紝鍑芥暟琚皟鐢ㄤ互鍚庯紝鍦ㄥ爢鏍堜腑鍙栧緱鏁版嵁錛屽茍榪涜璁$畻銆傚嚱鏁拌綆楃粨鏉熶互鍚庯紝鎴栬呰皟鐢ㄨ呫佹垨鑰呭嚱鏁版湰韜慨鏀瑰爢鏍堬紝浣垮爢鏍堟仮澶嶅師瑁呫傚湪鍙傛暟浼犻掍腑錛屾湁涓や釜寰堥噸瑕佺殑闂蹇呴』寰楀埌鏄庣‘璇存槑錛?/p>
1) 褰撳弬鏁頒釜鏁板浜庝竴涓椂錛屾寜鐓т粈涔堥『搴忔妸鍙傛暟鍘嬪叆鍫嗘爤錛?br />2) 鍑芥暟璋冪敤鍚庯紝鐢辮皝鏉ユ妸鍫嗘爤鎭㈠鍘熻銆?br />3錛夊嚱鏁扮殑榪斿洖鍊兼斁鍦ㄤ粈涔堝湴鏂?/font> stdcall
寰堝鏃跺欒縐頒負pascal璋冪敤瑙勮寖錛屽洜涓簆ascal鏄棭鏈熷緢甯歌鐨勪竴縐嶆暀瀛︾敤璁$畻鏈虹▼搴忚璁¤璦錛屽叾璇硶涓ヨ皚錛屼嬌鐢ㄧ殑鍑芥暟璋冪敤綰﹀畾鏄痵tdcall銆?
鍦∕icrosoft C++緋誨垪鐨凜/C++緙栬瘧鍣ㄤ腑錛屽父甯哥敤PASCAL瀹忔潵澹版槑榪欎釜璋冪敤綰﹀畾錛岀被浼肩殑瀹忚繕鏈塛INAPI鍜孋ALLBACK銆? stdcall璋冪敤瑙勮寖澹版槑鐨勮娉曚負錛?/p> 鑰屽湪緙栬瘧鏃訛紝榪欎釜鍑芥暟鐨勫悕瀛楄緲昏瘧鎴恄function@8 娉ㄦ剰涓嶅悓緙栬瘧鍣ㄤ細鎻掑叆鑷繁鐨勬眹緙栦唬鐮佷互鎻愪緵緙栬瘧鐨勯氱敤鎬э紝浣嗘槸澶т綋浠g爜濡傛銆傚叾涓湪鍑芥暟寮濮嬪淇濈暀esp鍒癳bp涓紝鍦ㄥ嚱鏁扮粨鏉熸仮澶嶆槸緙栬瘧鍣ㄥ父鐢ㄧ殑鏂規硶銆? 浠庡嚱鏁拌皟鐢ㄧ湅錛?鍜?渚濇琚玴ush榪涘爢鏍堬紝鑰屽湪鍑芥暟涓張閫氳繃鐩稿浜巈bp(鍗沖垰榪涘嚱鏁版椂鐨勫爢鏍堟寚閽堬級鐨勫亸縐婚噺瀛樺彇鍙傛暟銆傚嚱鏁扮粨鏉熷悗錛宺et 8琛ㄧず娓呯悊8涓瓧鑺傜殑鍫嗘爤錛屽嚱鏁拌嚜宸辨仮澶嶄簡鍫嗘爤銆? cdecl璋冪敤綰﹀畾鍙堢О涓篊璋冪敤綰﹀畾錛屾槸C璇█緙虹渷鐨勮皟鐢ㄧ害瀹氾紝瀹冪殑瀹氫箟璇硶鏄細 聽
cdecl璋冪敤綰﹀畾鐨勫弬鏁板帇鏍堥『搴忔槸鍜宻tdcall鏄竴鏍風殑錛屽弬鏁伴鍏堢敱鏈夊悜宸﹀帇鍏ュ爢鏍堛傛墍涓嶅悓鐨勬槸錛屽嚱鏁版湰韜笉娓呯悊鍫嗘爤錛岃皟鐢ㄨ呰礋璐f竻鐞嗗爢鏍堛傜敱浜庤繖
縐嶅彉鍖栵紝C璋冪敤綰﹀畾鍏佽鍑芥暟鐨勫弬鏁扮殑涓暟鏄笉鍥哄畾鐨勶紝榪欎篃鏄疌璇█鐨勪竴澶х壒鑹層傚浜庡墠闈㈢殑function鍑芥暟錛屼嬌鐢╟decl鍚庣殑姹囩紪鐮佸彉鎴愶細 MSDN涓錛岃淇グ鑷姩鍦ㄥ嚱鏁板悕鍓嶅姞鍓嶅鐨勪笅鍒掔嚎錛屽洜姝ゅ嚱鏁板悕鍦ㄧ鍙瘋〃涓璁板綍涓篲function銆? 鐢變簬鍙傛暟鎸夌収浠庡彸鍚戝乏欏哄簭鍘嬫爤錛屽洜姝ゆ渶寮濮嬬殑鍙傛暟鍦ㄦ渶鎺ヨ繎鏍堥《鐨勪綅緗紝鍥犳褰撻噰鐢ㄤ笉瀹氫釜鏁板弬鏁版椂錛岀涓涓弬鏁板湪鏍堜腑鐨勪綅緗偗瀹氳兘鐭ラ亾錛屽彧瑕佷笉瀹氱殑鍙傛暟涓暟鑳藉鏍規嵁絎竴涓悗鑰呭悗緇殑鏄庣‘鐨勫弬鏁扮‘瀹氫笅鏉ワ紝灝卞彲浠ヤ嬌鐢ㄤ笉瀹氬弬鏁幫紝渚嬪瀵逛簬sprintf鍑芥暟錛屽畾涔変負錛?/p> thiscall鏄敮涓涓涓笉鑳芥槑紜寚鏄庣殑鍑芥暟淇グ錛屽洜涓簍hiscall涓嶆槸鍏抽敭瀛椼傚畠鏄疌++綾繪垚鍛樺嚱鏁扮己鐪佺殑璋冪敤綰﹀畾銆傜敱浜庢垚鍛樺嚱鏁拌皟鐢ㄨ繕鏈変竴涓猼his鎸囬拡錛屽洜姝ゅ繀欏葷壒孌婂鐞嗭紝thiscall鎰忓懗鐫錛? C++璧勬簮涔嬩笉瀹屽叏瀵煎紩錛堝畬鏁寸増錛?/p>
鏉ユ簮錛?a >www.csdn.net 鎾版枃錛氭浘姣呫侀櫠鏂?/p>
澹版槑錛氭湰鏂?004騫?鏈堥鍙戜簬銆奀SDN寮鍙戦珮鎵嬨嬶紝鐗堟潈褰掕鏉傚織涓庛婄▼搴忓憳銆嬫潅蹇楃ぞ ------------------------------------------------------------------------ 銆銆1錛屽墠璦 銆銆鏃犳暟嬈″惉鍒扳滄垜瑕佸紑濮嬪涔燙++!鈥濈殑鍛愬枈錛屾棤鏁版鍚埌鈥淐++澶鏉備簡錛屾垜鐪熺殑 銆銆鎾板啓鏈枃鐨勫垵琛峰茍涓嶆墦綆楀甫棰嗗ぇ瀹朵綋楠屽彜鑰佺殑C++鍘嗗彶錛屽鏋滀綘鎯充簡瑙++鐨勫巻 銆銆鏈枃浠嬬粛騫跺垎鏋愪簡涓浜涚紪璇戝櫒錛屽紑鍙戠幆澧冿紝搴擄紝灝戦噺鐨勪功綾嶄互鍙婂弬鑰冪綉绔欙紝騫?br />涓斿敖鍙兘灝濊瘯鐫緇欏嚭涓涓埄鐢ㄨ繖浜涜祫婧愮殑瀵煎紩錛屾湜瀵瑰鍚屾垜浠竴鏍風殑鍒濆鑰呰兘澶熸湁 ------------------------------------------------------------------------ 銆銆2錛岀紪璇戝櫒 銆銆鍦–++涔嬪鐨勪換浣曡璦涓紝緙栬瘧鍣ㄩ兘浠庢潵娌℃湁鍙楀埌榪囧姝や箣閲嶈銆傚洜涓篊++鏄竴 銆銆2.1 Borland C++ 銆銆榪欎釜鏄疊orland C++ Builder鍜孊orland C++ Builder X榪欎袱縐嶅紑鍙戠幆澧冪殑鍚庡彴 銆銆2.2 Visual C++ 銆銆榪欎釜姝f槸鎴戜滑鐔熺煡鐨刅isual Studio 鍜?Visual Studio.net 2002, 2003浠ュ強2 銆銆2.3 GNU C++ 銆銆钁楀悕鐨勫紑婧怌++緙栬瘧鍣ㄣ傛槸綾籙nix鎿嶄綔緋葷粺涓嬬紪鍐機++紼嬪簭鐨勯閫夈傜壒鐐規槸鏈夐潪 銆銆鍩轟簬GNU C++鐨勭紪璇戝櫒鏈夊緢澶氾紝姣斿錛?/p>
銆銆(1) Mingw 銆銆GCC鐨勪竴涓猈indows鐨勭Щ妞嶇増鏈紙Dev-C++鐨勫悗鍙幫級 銆銆(2) Cygwin 銆銆http://sources.redhat.com/cygwin/ 銆銆GCC鐨勫彟澶栦竴涓猈indows縐繪鐗堟湰鏄疌ygwin鐨勪竴閮ㄥ垎錛孋ygwin鏄疻indows涓嬬殑涓涓?br />Unix浠跨湡鐜銆備弗鏍肩殑璇存槸妯℃嫙GNU鐨勭幆澧冿紝榪欎篃灝辨槸"Gnu's Not Unix"瑕佽〃杈劇殑鎰?br />鎬濓紝鍣紝鎵繙浜嗭紝榪欏茍涓嶆槸鎴戜滑鍦ㄨ繖閲屽叧蹇冪殑瀹炶川鍐呭銆?/p>
銆銆(3) Djgpp 銆銆http://www.delorie.com/djgpp/ 銆銆榪欐槸GCC鐨凞OS縐繪鐗堟湰銆?/p>
銆銆(4) RSXNT 銆銆http://www.mathematik.uni-bielefeld.de/~rainer/ 銆銆榪欐槸GCC鐨凞OS鍜學indows縐繪鐗堟湰銆?/p>
銆銆(5) Intel C++ 銆銆钁楀悕CPU鍒墮犲巶鍟咺ntel鍑哄搧鐨勭紪璇戝櫒錛孲pecial Design for Intel x86錛佸浜?br />Intel x86緇撴瀯鐨凜PU緇忚繃鐗瑰埆鐨勪紭鍖栥傚湪鏈変簺搴旂敤鎯呭喌涓嬶紝鐗瑰埆鏄暟鍊艱綆楃瓑楂樻?br />鑳藉簲鐢紝浠呬粎閲囩敤Intel鐨勭紪璇戝櫒緙栬瘧灝辮兘澶у箙搴︾殑鎻愰珮鎬ц兘銆?/p>
銆銆(6) Digital Mars C++ 銆銆緗戠粶涓婃彁渚涘厤璐逛笅杞斤紝Zortech/Symantec C++鐨勭戶鎵胯咃紝鍏跺墠韜湪褰撳勾鎯ㄧ儓鐨?br />C++鍥涘浗鎴樹腑涔熸槸涓昏涔嬩竴銆?/p>
------------------------------------------------------------------------ 銆銆3錛屽紑鍙戠幆澧?/p>
銆銆寮鍙戠幆澧冨浜庣▼搴忓憳鐨勪綔鐢ㄤ笉璦鑰屽柣銆傞夋嫨鑷繁鏈濆鐩稿鐨勭幆澧冧篃涓嶆槸瀹規槗鐨?br />浜嬫儏錛岀壒鍒槸鍦↖DE濡傛涓板瘜鐨勬儏鍐典笅銆備笅闈㈠氨鏄垜浠帹鑽愮殑涓浜涘父瑙佺殑C++寮鍙戠幆 銆銆3.1 Visual Studio 6.0 銆銆榪欎釜铏界劧鏄疢icrosoft鍏徃鐨勮佺増鏈殑寮鍙戠幆澧冿紝浣嗘槸閴翠簬鍏跺悗緇х増鏈琕isual 銆銆3.2 Visual Studio.NET 2003 銆銆浣滀負Microsoft鍏徃瀹樻柟姝e紡鍙戝竷鐨勬渶鏂扮増鏈紑鍙戠幆澧冿紝鍏朵腑鏈夊お澶氭縺鍔ㄤ漢蹇冪殑 銆銆3.3 Borland C++ Builder 6 銆銆榪欎釜騫朵笉鏄疊orland鐨凜++寮鍙戠幆澧冪殑鏈鏂扮増鏈傞夋嫨瀹冪殑鍘熷洜鏄畠涓嶆槸鐢↗ava 銆銆3.4 Borland C++ Builder X 銆銆姝e鍓嶆枃鎵榪幫紝铏界劧鐗堟湰鍙蜂笂鍜屽墠闈㈤偅涓狪DE闈炲父鐩歌薄錛屼絾鏄叾瀹炲畠浠槸瀹屽叏涓?br />鍚岀殑涓や釜闆嗘垚寮鍙戠幆澧冦侰++Builder鏇村鐨勬槸涓涓拰Delphi鍚屾鐨凜++鐗堟湰鐨勫紑鍙戠幆 銆銆3.5 Emacs + GCC 銆銆鍓嶉潰璁茬殑澶ч儴鍒嗘槸Windows鐜涓嬬殑闆嗘垚寮鍙戠幆澧冦侺inux涓婄殑寮鍙戣呮洿鍊懼悜浜?br />浣跨敤Emacs鏉ョ紪杈慍++鐨勬枃浠訛紝鐢∕akefile鏉ュ懡浠CC鍋氱紪璇戙傝櫧鐒剁湅涓婂幓姣旇緝鏉炬暎錛?br />浣嗘槸榪欎簺涓滆タ緇煎悎璧鋒潵榪樻槸涓涓紑0鍙戠幆澧冦傚鏋滀綘鑳藉濞寸啛鐨勪嬌鐢ㄨ繖鏍風殑鐜鍐欑▼ 銆銆3.6 Dev C++ 銆銆GCC鏄竴涓緢濂界殑緙栬瘧鍣ㄣ傚湪Windows涓婄殑C++緙栬瘧鍣ㄤ竴鐩村拰鏍囧噯鏈夌潃涓孌佃窛紱葷殑 銆銆3.7 Eclipse + CDT 銆銆Eclipse鍙槸榪戞潵澶у悕榧庨紟鐨勫紑鍙戝伐鍏楓傛渶鏂頒竴鏈熺殑Jolt澶у灝遍緇欎簡榪欎釜鏉板嚭 ------------------------------------------------------------------------ 銆銆4錛屽伐鍏?/p>
銆銆C++鐨勮緟鍔╁伐鍏風箒澶氾紝鎴戜滑鍒嗛棬鍒被鐨勪負澶у浣滀粙緇嶏細 銆銆4.1 鏂囨。綾?/p>
銆銆(1) Doxygen 銆銆鍙傝冪珯鐐癸細http://www.doxygen.org 銆銆Doxygen鏄竴縐嶉傚悎C椋庢牸璇█錛堝C++銆丆銆両DL銆丣ava鐢氳嚦鍖呮嫭C#鍜孭HP錛夌殑銆?br />寮鏀炬簮鐮佺殑銆佸熀浜庡懡浠よ鐨勬枃妗d駭鐢熷櫒銆?/p>
銆銆(2) C++2HTML 銆銆鍙傝冪珯鐐癸細http://www.bedaux.net/cpp2html/ 銆銆鎶奀++浠g爜鍙樻垚璇硶楂樹寒鐨凥TML 銆銆(3) CodeColorizer 銆銆鍙傝冪珯鐐癸細http://www.chami.com/colorizer/ 銆銆瀹冭兘鎶婂ソ鍑犵璇█鐨勬簮浠g爜鐫鑹蹭負HTML 銆銆(4) Doc-O-Matic 銆銆鍙傝冪珯鐐癸細http://www.doc-o-matic.com/ 銆銆Doc-O_Matic涓轟綘鐨凜/C++錛孋++.net錛孌elphi/Pascal, VB.NET錛孋#鍜孞ava紼嬪簭 銆銆(5) DocVizor 銆銆鍙傝冪珯鐐癸細http://www.ucancode.net/Products/DocBuilder/Features.htm 銆銆DocVizor婊¤凍浜嗛潰鍚戝璞¤蔣浠跺紑鍙戣呯殑鍩烘湰瑕佹眰鈥斺斿畠璁╂垜浠兘澶熺湅鍒癈++宸ョ▼ 銆銆(6) SourcePublisher C++ 銆銆鍙傝冪珯鐐癸細http://www.scitools.com/sourcepublisher_c.html 銆銆緇欐簮浠g爜浜х敓鎻愪緵蹇熺洿瑙傜殑HTML鎶ヨ〃錛屽寘鎷唬鐮侊紝綾誨眰嬈$粨鏋勶紝璋冪敤鍜岃璋?br />鐢ㄦ爲錛屽寘鍚拰琚寘鍚爲銆傛敮鎸佸縐嶆搷浣滅郴緇熴?/p>
銆銆(7) Understand 銆銆鍙傝冪珯鐐癸細http://www.scitools.com/ucpp.html 銆銆鍒嗘瀽浠諱綍瑙勬ā鐨凜鎴栬匔++宸ョ▼錛屽府鍔╂垜浠洿濂界殑鐞嗚В浠ュ強緙栧啓鏂囨。銆?/p>
銆銆4.2 浠g爜綾?/p>
銆銆(1) CC-Rider 銆銆鍙傝冪珯鐐癸細http://www.cc-rider.com 銆銆CC-Rider鏄敤浜嶤/C++紼嬪簭寮哄ぇ鐨勪唬鐮佸彲瑙嗗寲宸ュ叿錛岄氳繃浜や簰寮忔祻瑙堛佺紪杈戝強鑷?br />鍔ㄦ枃浠舵潵淇冭繘紼嬪簭鐨勭淮鎸佸拰鍙戝睍銆?/p>
銆銆(2) CodeInspect 銆銆鍙傝冪珯鐐癸細http://www.yokasoft.com/ 銆銆涓縐嶆柊鐨凜/C++浠g爜鍒嗘瀽宸ュ叿銆傚畠媯鏌ユ垜浠殑婧愪唬鐮佹壘鍑洪潪鏍囧噯鐨勶紝鍙兘鐨勶紝浠?br />鍙婃櫘閫氱殑閿欒浠g爜銆?/p>
銆銆(3) CodeWizard 銆銆鍙傝冪珯鐐癸細http://www.parasoft.com 銆銆鍏堣繘鐨凜/C++婧愪唬鐮佸垎鏋愬伐鍏鳳紝浣跨敤瓚呰繃500涓紪鐮佽鑼冭嚜鍔ㄥ寲鍦版爣鏄庡嵄闄╃殑錛?br />浣嗘槸緙栬瘧鍣ㄤ笉鑳芥鏌ュ埌鐨勪唬鐮佺粨鏋勩?/p>
銆銆(4) C++ Validation Test Suites 銆銆鍙傝冪珯鐐癸細http://www.plumhall.com/suites.html 銆銆涓緇勭敤浜庢祴璇曠紪璇戝櫒鍜屽簱瀵逛簬鏍囧噯鍚誨悎紼嬪害鐨勪唬鐮佸簱銆?/p>
銆銆(5) CppRefactory 銆銆鍙傝冪珯鐐癸細http://cpptool.sourceforge.net/ 銆銆CPPRefactory鏄竴涓嬌寰楀紑鍙戣呰兘澶熼噸鏋勪粬浠殑C++浠g爜鐨勭▼搴忋傜洰鐨勬槸浣垮緱C 銆銆(6) Lzz 銆銆鍙傝冪珯鐐癸細http://www.lazycplusplus.com/ 銆銆Lzz鏄竴涓嚜鍔ㄥ寲璁稿C++緙栫▼涓殑浣撳姏媧葷殑宸ュ叿銆傚畠鑳藉鑺傜渷鎴戜滑璁稿浜嬩歡騫?br />涓斾嬌寰楃紪鐮佹洿鍔犳湁涔愯叮銆傜粰鍑轟竴緋誨垪鐨勫0鏄庯紝Lzz浼氱粰鎴戜滑鍒涘緩澶存枃浠跺拰婧愭枃浠躲?/p>
銆銆(7) QA C++ Generation 2000 銆銆鍙傝冪珯鐐癸細http://www.programmingresearch.com/solutions/qacpp.htm 銆銆瀹冨叧娉ㄩ潰鍚戝璞$殑C++婧愪唬鐮侊紝瀵規湁鍏充簬璁捐錛屾晥鐜囷紝鍙潬鎬э紝鍙淮鎶ゆх殑閮ㄥ垎 銆銆(8) s-mail project - Java to C++DOL 銆銆鍙傝冪珯鐐癸細http://sadlocha.strefa.pl/s-mail/ja2dol.html 銆銆鎶奐ava婧愪唬鐮佺炕璇戜負鐩稿簲鐨凜++婧愪唬鐮佺殑鍛戒護琛屽伐鍏楓?/p>
銆銆(9) SNIP from Cleanscape Software International 銆銆鍙傝冪珯鐐癸細http://www.cleanscape.net/stdprod/snip/index.html 銆銆涓涓~騫崇紪鐮佸拰璁捐涔嬮棿娌熷鐨勬槗浜庝嬌鐢ㄧ殑C++寮鍙戝伐鍏鳳紝鑺傜渷澶ч噺緙栬緫鍜岃皟璇?br />鐨勪簨浠訛紝瀹冭繕浣垮緱寮鍙戣呰兘澶熸寚瀹氳璁℃ā寮忎綔涓哄璞℃ā鍨嬶紝鑷姩浠庡璞℃ā鍨嬩腑浜х敓 銆銆(10) SourceStyler C++ 銆銆鍙傝冪珯鐐癸細http://www.ochresoftware.com/ 銆銆瀵笴/C++婧愪唬鐮佹彁渚涘畬鏁寸殑鏍煎紡鍖栧拰鎺掔増鎺у埗鐨勫伐鍏楓傛彁渚涘浜?5涓殑鏍煎紡鍖栭?br />欏逛互鍙婂畬鍏ㄦ敮鎸丄NSI C++銆?/p>
銆銆4.3 緙栬瘧綾?/p>
銆銆(1) Compilercache 銆銆鍙傝冪珯鐐癸細http://www.erikyyy.de/compilercache/ 銆銆Compilercache鏄竴涓浣犵殑C鍜孋++緙栬瘧鍣ㄧ殑灝佽鑴氭湰銆傛瘡嬈℃垜浠繘琛岀紪璇戯紝灝?br />瑁呰剼鏈紝鎶婄紪璇戠殑緇撴灉鏀懼叆緙撳瓨錛屼竴鏃︾紪璇戠浉鍚岀殑涓滆タ錛岀粨鏋滃皢浠庣紦瀛樹腑鍙栧嚭鑰屼笉 銆銆(2) Ccache 銆銆鍙傝冪珯鐐癸細http://ccache.samba.org/ 銆銆Ccache鏄竴涓紪璇戝櫒緙撳瓨銆傚畠浣跨敤璧鋒潵灝卞儚C/C++緙栬瘧鍣ㄧ殑緙撳瓨棰勫鐞嗗櫒錛岀紪璇?br />閫熷害閫氬父鑳芥彁楂樻櫘閫氱紪璇戣繃紼嬬殑5~10鍊嶃?/p>
銆銆(3) Cmm (C++ with MultiMethods) 銆銆鍙傝冪珯鐐癸細http://www.op59.net/cmm/cmm-0.28/users.html 銆銆榪欐槸涓縐岰++璇█鐨勬墿灞曘傝鍏mm婧愪唬鐮佽緭鍑篊++鐨勬簮浠g爜錛屽姛鑳芥槸瀵笴++璇█ 銆銆(4) The Frost Project 銆銆鍙傝冪珯鐐癸細http://frost.flewid.de/ 銆銆Forst浣垮緱浣犺兘澶熷湪C++紼嬪簭涓儚鍘熺敓鐨凜++鐗規т竴鏍蜂嬌鐢╩ultimethod浠ュ強铏氬嚱 銆銆4.4 嫻嬭瘯鍜岃皟璇曠被 銆銆(1) CPPUnit 銆銆CppUnit 鏄釜鍩轟簬 LGPL 鐨勫紑婧愰」鐩紝鏈鍒濈増鏈Щ妞嶈嚜 JUnit錛屾槸涓涓潪甯鎬紭 銆銆(2) C++Test 銆銆鍙傝冪珯鐐癸細http://www.parasoft.com/ 銆銆C++ Test鏄竴涓崟鍏冩祴璇曞伐鍏鳳紝瀹冭嚜鍔ㄥ寲浜咰鍜孋++綾伙紝鍑芥暟鎴栬呯粍浠剁殑嫻嬭瘯銆?/p>
銆銆鍙傝冪珯鐐癸細http://www.iplbath.com/products/tools/pt400.shtml 銆銆璁捐鐨勭洰鐨勬槸涓轟簡婊¤凍鍦ㄥ悎鐞嗙殑緇忔祹寮閿涓嬩嬌鐢ㄨ繖涓伐鍏峰彲浠ヨ寮鍙戝伐紼嬪笀寮 銆銆(4) Purify 銆銆鍙傝冪珯鐐癸細http://www-900.ibm.com/cn/software/rational/products/purif 銆銆IBM Rational PurifyPlus鏄竴濂楀畬鏁寸殑榪愯鏃跺垎鏋愬伐鍏鳳紝鏃ㄥ湪鎻愰珮搴旂敤紼嬪簭鐨?br />鍙潬鎬у拰鎬ц兘銆侾urifyPlus灝嗗唴瀛橀敊璇拰娉勬紡媯嫻嬨佸簲鐢ㄧ▼搴忔ц兘鎻忚堪銆佷唬鐮佽鐩?br />鍒嗘瀽絳夊姛鑳界粍鍚堝湪涓涓崟涓銆佸畬鏁寸殑宸ュ叿鍖呬腑銆?/p>
銆銆(5) BoundsChecker 銆銆BoundsChecker鏄竴涓狢++榪愯鏃墮敊璇嫻嬪拰璋冭瘯宸ュ叿銆傚畠閫氳繃鍦╒isual Studi 銆銆鍙傝冪珯鐐癸細http://www.parasoft.com/ 銆銆涓涓嚜鍔ㄥ寲鐨勮繍琛屾椂紼嬪簭嫻嬭瘯宸ュ叿錛屾鏌ラ毦浠ュ療瑙夌殑閿欒,濡傚唴瀛樿鐩栵紝鍐呭瓨娉?br />婕忥紝鍐呭瓨鍒嗛厤閿欒錛屽彉閲忓垵濮嬪寲閿欒錛屽彉閲忓畾涔夊啿紿侊紝鎸囬拡閿欒錛屽簱閿欒錛岄昏緫閿?br />璇拰綆楁硶閿欒絳夈?/p>
銆銆(7) GlowCode 銆銆鍙傝冪珯鐐癸細http://www.glowcode.com/ 銆銆GlowCode鍖呮嫭鍐呭瓨娉勬紡媯鏌ワ紝code profiler錛屽嚱鏁拌皟鐢ㄨ窡韙瓑鍔熻兘銆傜粰C++寮 銆銆(8) Stack Spy 銆銆鍙傝冪珯鐐癸細http://www.imperioustech.com/ 銆銆瀹冭兘鎹曟崏stack corruption, stack over run, stack overflow絳夋湁鍏蟲爤鐨勯敊 ------------------------------------------------------------------------ 銆銆5錛屽簱 銆銆鍦–++涓紝搴撶殑鍦頒綅鏄潪甯擱珮鐨勩侰++涔嬬埗 Bjarne Stroustrup鍏堢敓澶氭琛ㄧず浜?br />璁捐搴撴潵鎵╁厖鍔熻兘瑕佸ソ榪囪璁℃洿澶氱殑璇硶鐨勮█璁恒傜幇瀹炰腑錛孋++鐨勫簱闂ㄧ被綣佸錛岃В鍐?br />鐨勯棶棰樹篃鏄瀬鍏跺箍娉涳紝搴撲粠杞婚噺綰у埌閲嶉噺綰х殑閮芥湁銆備笉灝戦兘鏄浜虹溂鐣屽ぇ寮錛屼害鎴?br />鏄湜鑰岀敓鍙圭殑鎬濈淮鏉頒綔銆傜敱浜庡簱鐨勬暟閲忛潪甯稿簽澶э紝鑰屼笖闄愪簬絎旇呮按騫籌紝鍏朵腑寰堝騫?br />涓嶄簡瑙c傛墍浠ユ枃涓墍鎻愮殑涓浜涘簱閮芥槸姣旇緝钁楀悕鐨勫ぇ鍨嬪簱銆?/p>
銆銆5.1 鏍囧噯搴?/p>
銆銆鏍囧噯搴撲腑鎻愪緵浜咰++紼嬪簭鐨勫熀鏈鏂姐傝櫧鐒禖++鏍囧噯搴撻殢鐫C++鏍囧噯鎶樿吘浜嗚澶氬勾 銆銆(1) Dinkumware C++ Library 銆銆鍙傝冪珯鐐癸細http://www.dinkumware.com/ 銆銆P.J. Plauger緙栧啓鐨勯珮鍝佽川鐨勬爣鍑嗗簱銆侾.J. Plauger鍗氬+鏄疍r. Dobb's紼嬪簭璁?br />璁℃澃鍑哄鐨勮幏寰楄呫傚叾緙栧啓鐨勫簱闀挎湡琚玀icrosoft閲囩敤錛屽茍涓旀渶榪態orland涔熷彇寰椾簡 銆銆(2) RogueWave Standard C++ Library 銆銆鍙傝冪珯鐐癸細http://www.roguewave.com/ 銆銆榪欎釜搴撳湪Borland C++ Builder鐨勬棭鏈熺増鏈腑鏇劇粡琚噰鐢紝鍚庢潵琚叾浠栫殑搴撶粰鏇?br />鎹簡銆傜瑪鑰呬笉鎺ㄨ崘浣跨敤銆?/p>
銆銆(3) SGI STL 銆銆鍙傝冪珯鐐癸細http://www.roguewave.com/ 銆銆SGI鍏徃鐨凜++鏍囧噯妯$増搴撱?/p>
銆銆(4) STLport 銆銆鍙傝冪珯鐐癸細http://www.stlport.org/ 銆銆SGI STL搴撶殑璺ㄥ鉤鍙板彲縐繪鐗堟湰銆?/p>
銆銆5.2 鈥滃噯鈥濇爣鍑嗗簱 - Boost 銆銆鍙傝冪珯鐐癸細http://www.boost.org 銆銆鍥藉唴闀滃儚錛?a >http://www.c-view.org/tech/lib/boost/index.htm 銆銆Boost搴撴槸涓涓粡榪囧崈閿ょ櫨鐐箋佸彲縐繪銆佹彁渚涙簮浠g爜鐨凜++搴擄紝浣滀負鏍囧噯搴撶殑鍚?br />澶囷紝鏄疌++鏍囧噯鍖栬繘紼嬬殑鍙戝姩鏈轟箣涓銆?Boost搴撶敱C++鏍囧噯濮斿憳浼氬簱宸ヤ綔緇勬垚鍛樺彂璧?br />錛屽湪C++紺懼尯涓獎鍝嶇敋澶э紝鍏舵垚鍛樺凡榪?000浜恒?Boost搴撲負鎴戜滑甯︽潵浜嗘渶鏂般佹渶閰楓?br />鏈瀹炵敤鐨勬妧鏈紝鏄笉鎶樹笉鎵g殑鈥滃噯鈥濇爣鍑嗗簱銆?/p>
銆銆Boost涓瘮杈冩湁鍚嶆皵鐨勬湁榪欎箞鍑犱釜搴擄細 銆銆Regex 銆銆姝e垯琛ㄨ揪寮忓簱 銆銆Spirit 銆銆LL parser framework錛岀敤C++浠g爜鐩存帴琛ㄨ揪EBNF 銆銆Graph 銆銆鍥劇粍浠跺拰綆楁硶 銆銆Lambda 銆銆鍦ㄨ皟鐢ㄧ殑鍦版柟瀹氫箟鐭皬鍖垮悕鐨勫嚱鏁板璞★紝寰堝疄鐢ㄧ殑functional鍔熻兘 銆銆concept check 銆銆媯鏌ユ硾鍨嬬紪紼嬩腑鐨刢oncept 聽 銆銆Mpl 銆銆鐢ㄦā鏉垮疄鐜扮殑鍏冪紪紼嬫鏋?/p>
聽 銆銆Thread 銆銆鍙Щ妞嶇殑C++澶氱嚎紼嬪簱 聽 銆銆Python 銆銆鎶奀++綾誨拰鍑芥暟鏄犲皠鍒癙ython涔嬩腑 銆銆Pool 銆銆鍐呭瓨姹犵鐞?/p>
聽 銆銆smart_ptr 銆銆5涓櫤鑳芥寚閽堬紝瀛︿範鏅鴻兘鎸囬拡蹇呰錛屼竴浠戒笉閿欑殑鍙傝冩槸鏉ヨ嚜CUJ鐨勬枃绔狅細 銆銆Smart Pointers in Boost錛屽摝錛岃繖綃囨枃绔犲彲浠ユ煡鍒幫紝CUJ鏄彁渚涘湪綰挎祻瑙堢殑銆?br />涓枃鐗堣絎旇呭湪銆奃r. Dobb's Journal杞歡鐮斿彂鏉傚織銆嬬7杈戜笂鐨勮瘧鏂囥?/p>
銆銆Boost鎬諱綋鏉ヨ鏄疄鐢ㄤ環鍊煎緢楂橈紝璐ㄩ噺寰堥珮鐨勫簱銆傚茍涓旂敱浜庡叾瀵硅法騫沖彴鐨勫己璋冿紝 銆銆5.3 GUI 銆銆鍦ㄤ紬澶欳++鐨勫簱涓紝GUI閮ㄥ垎鐨勫簱綆楁槸姣旇緝綣佽崳錛屼篃姣旇緝寮曚漢娉ㄧ洰鐨勩傚湪瀹為檯寮 銆銆(1) MFC 銆銆澶у悕榧庨紟鐨勫井杞熀紜綾誨簱錛圡icrosoft Foundation Class錛夈傚ぇ鍑″榪嘨C++鐨?br />浜洪兘搴旇鐭ラ亾榪欎釜搴撱傝櫧鐒朵粠鎶鏈搴﹁錛孧FC鏄笉澶ф紓浜殑錛屼絾鏄畠鏋勫緩浜嶹indo 銆銆(2) QT 銆銆鍙傝冪綉绔欙細http://www.trolltech.com/ 銆銆Qt鏄疶rolltech鍏徃鐨勪竴涓騫沖彴鐨凜++鍥懼艦鐢ㄦ埛鐣岄潰搴旂敤紼嬪簭妗嗘灦銆傚畠鎻愪緵緇?br />搴旂敤紼嬪簭寮鍙戣呭緩绔嬭壓鏈駭鐨勫浘褰㈢敤鎴風晫闈㈡墍闇鐨勬墍鐢ㄥ姛鑳姐俀t鏄畬鍏ㄩ潰鍚戝璞$殑 銆銆(3) WxWindows 銆銆鍙傝冪綉绔欙細http://www.wxwindows.org/ 銆銆璺ㄥ鉤鍙扮殑GUI搴撱傚洜涓哄叾綾誨眰嬈℃瀬鍍廙FC錛屾墍浠ユ湁鏂囩珷浠嬬粛浠嶮FC鍒癢xWindows鐨?br />浠g爜縐繪浠ュ疄鐜拌法騫沖彴鐨勫姛鑳姐傞氳繃澶氬勾鐨勫紑鍙戜篃鏄竴涓棩瓚嬪畬鍠勭殑GUI搴擄紝鏀寔鍚?br />鏍蜂笉寮變簬鍓嶉潰涓や釜搴撱傚茍涓旀槸瀹屽叏寮鏀炬簮浠g爜鐨勩傛柊榪戠殑C++ Builder X鐨凣UI璁捐 銆銆(4) Fox 銆銆鍙傝冪綉绔欙細http://www.fox-toolkit.org/ 銆銆寮鏀炬簮浠g爜鐨凣UI搴撱備綔鑰呬粠鑷繁浜茶韓鐨勫紑鍙戠粡楠屼腑寰楀嚭浜嗕竴涓悊鎯崇殑GUI搴撳簲
銆銆鍩轟簬ATL鐨勪竴涓簱銆傚洜涓轟嬌鐢ㄤ簡澶ч噺ATL鐨勮交閲忕駭鎵嬫硶錛屾ā鏉跨瓑鎶鏈紝鍦ㄤ唬鐮佸昂 銆銆(6) GTK 銆銆鍙傝冪綉绔欙細http://gtkmm.sourceforge.net/ 銆銆GTK鏄竴涓ぇ鍚嶉紟榧庣殑C鐨勫紑婧怗UI搴撱傚湪Linux涓栫晫涓湁Gnome榪欐牱鐨勬潃鎵嬪簲鐢ㄣ?br />鑰孏TK灝辨槸榪欎釜搴撶殑C++灝佽鐗堟湰銆?/p>
銆銆5.4 緗戠粶閫氫俊 銆銆(1) ACE 銆銆鍙傝冪綉绔欙細http://www.cs.wustl.edu/~schmidt/ACE.html 銆銆C++搴撶殑浠h〃錛岃秴閲嶉噺綰х殑緗戠粶閫氫俊寮鍙戞鏋躲侫CE鑷傞厤閫氫俊鐜錛圓daptive 銆銆(2) StreamModule 銆銆鍙傝冪綉绔欙細http://www.omnifarious.org/StrMod/ 銆銆璁捐鐢ㄤ簬綆鍖栫紪鍐欏垎甯冨紡紼嬪簭鐨勫簱銆傚皾璇曠潃浣垮緱緙栧啓澶勭悊寮傛琛屼負鐨勭▼搴忔洿瀹?br />鏄擄紝鑰屼笉鏄敤鍚屾鐨勫澹沖寘璧峰紓姝ョ殑鏈川銆?/p>
銆銆(3) SimpleSocket 銆銆鍙傝冪綉绔欙細http://home.hetnet.nl/~lcbokkers/simsock.htm 銆銆榪欎釜綾誨簱璁╃紪鍐欏熀浜巗ocket鐨勫鎴?鏈嶅姟鍣ㄧ▼搴忔洿鍔犲鏄撱?/p>
銆銆(4) A Stream Socket API for C++ 銆銆鍙傝冪綉绔欙細http://www.pcs.cnu.edu/~dgame/sockets/socketsC++/sockets.h 銆銆鍙堜竴涓Socket鐨勫皝瑁呭簱銆?/p>
銆銆5.5 XML 銆銆(1) Xerces 銆銆鍙傝冪綉绔欙細http://xml.apache.org/xerces-c/ 銆銆Xerces-C++ 鏄竴涓潪甯稿仴澹殑XML瑙f瀽鍣紝瀹冩彁渚涗簡楠岃瘉錛屼互鍙奡AX鍜孌OM API 銆銆(2) XMLBooster 銆銆鍙傝冪綉绔欙細http://www.xmlbooster.com/ 銆銆榪欎釜搴撻氳繃浜х敓鐗瑰埗鐨刾arser鐨勫姙娉曟瀬澶х殑鎻愰珮浜哫ML瑙f瀽鐨勯熷害錛屽茍涓旇兘澶熶駭 銆銆(3) Pull Parser 銆銆鍙傝冪綉绔欙細http://www.extreme.indiana.edu/xgws/xsoap/xpp/ 銆銆榪欎釜搴撻噰鐢╬ull鏂規硶鐨刾arser銆傚湪姣忎釜SAX鐨刾arser搴曞眰閮芥湁涓涓猵ull鐨刾arse
銆銆鍙傝冪綉绔欙細http://xml.apache.org/xalan-c/ 銆銆Xalan鏄竴涓敤浜庢妸XML鏂囨。杞崲涓篐TML錛岀函鏂囨湰鎴栬呭叾浠朮ML綾誨瀷鏂囨。鐨刋SLT澶?br />鐞嗗櫒銆?/p>
銆銆(5) CMarkup 銆銆鍙傝冪綉绔欙細http://www.firstobject.com/xml.htm 銆銆榪欐槸涓縐嶄嬌鐢‥DOM鐨刋ML瑙f瀽鍣ㄣ傚湪寰堝鎬濊礬涓婇潰闈炲父鐏墊椿瀹炵敤銆傚煎緱澶у鍦― 銆銆(6) libxml++ 銆銆http://libxmlplusplus.sourceforge.net/ 銆銆libxml++鏄钁楀悕鐨刲ibxml XML瑙f瀽鍣ㄧ殑C++灝佽鐗堟湰 銆銆5.6 縐戝璁$畻 銆銆(1) Blitz++ 銆銆鍙傝冪綉绔欙細http://www.oonumerics.org/blitz/ 銆銆Blitz++ 鏄竴涓珮鏁堢巼鐨勬暟鍊艱綆楀嚱鏁板簱錛屽畠鐨勮璁$洰鐨勬槸甯屾湜寤虹珛涓濂楁棦鍏?br />鍍廋++ 涓鏍鋒柟渚匡紝鍚屾椂鍙堟瘮Fortran閫熷害鏇村揩鐨勬暟鍊艱綆楃幆澧冦傞氬父錛岀敤C++鎵鍐欏嚭 銆銆(2) POOMA 銆銆鍙傝冪綉绔欙細http://www.codesourcery.com/pooma/pooma 銆銆POOMA鏄竴涓厤璐圭殑楂樻ц兘鐨凜++搴擄紝鐢ㄤ簬澶勭悊騫惰寮忕瀛﹁綆椼侾OOMA鐨勯潰鍚戝 銆銆(3) MTL 銆銆鍙傝冪綉绔欙細http://www.osl.iu.edu/research/mtl/ 銆銆Matrix Template Library(MTL)鏄竴涓珮鎬ц兘鐨勬硾鍨嬬粍浠跺簱錛屾彁渚涗簡鍚勭鏍煎紡 銆銆(4) CGAL 銆銆鍙傝冪綉绔欙細www.cgal.org 銆銆Computational Geometry Algorithms Library鐨勭洰鐨勬槸鎶婂湪璁$畻鍑犱綍鏂歸潰鐨勫ぇ 銆銆5.7 娓告垙寮鍙?/p>
銆銆(1) Audio/Video 3D C++ Programming Library 銆銆鍙傝冪綉绔欙細http://www.galacticasoftware.com/products/av/ 銆銆***3D鏄竴涓法騫沖彴錛岄珮鎬ц兘鐨凜++搴撱備富瑕佺殑鐗規ф槸鎻愪緵3D鍥懼艦錛屽0鏁堟敮鎸侊紙S 銆銆(2) KlayGE 銆銆鍙傝冪綉绔欙細http://home.g365.net/enginedev/ 銆銆鍥藉唴娓告垙寮鍙戦珮鎵嬭嚜宸辯敤C++寮鍙戠殑娓告垙寮曟搸銆侹layGE鏄竴涓紑鏀炬簮浠g爜銆佽法騫?br />鍙扮殑娓告垙寮曟搸錛屽茍浣跨敤Python浣滆剼鏈璦銆侹layGE鍦↙GPL鍗忚涓嬪彂琛屻傛劅璋㈤練鏁忔晱 銆銆(3) OGRE 銆銆鍙傝冪綉绔欙細http://www.ogre3d.org 銆銆OGRE錛堥潰鍚戝璞$殑鍥懼艦娓叉煋寮曟搸錛夋槸鐢–++寮鍙戠殑錛屼嬌鐢ㄧ伒媧葷殑闈㈠悜瀵硅薄3D寮曟搸 銆銆5.8 綰跨▼ 銆銆(1) C++ Threads 銆銆鍙傝冪綉绔欙細http://threads.sourceforge.net/ 銆銆榪欎釜搴撶殑鐩爣鏄粰紼嬪簭鍛樻彁渚涙槗浜庝嬌鐢ㄧ殑綾伙紝榪欎簺綾昏緇ф壙浠ユ彁渚涘湪Linux鐜 銆銆(2) ZThreads 銆銆鍙傝冪綉绔欙細http://zthread.sourceforge.net/ 銆銆涓涓厛榪涚殑闈㈠悜瀵硅薄錛岃法騫沖彴鐨凜++綰跨▼鍜屽悓姝ュ簱銆?/p>
銆銆5.9 搴忓垪鍖?/p>
銆銆(1) s11n 銆銆鍙傝冪綉绔欙細http://s11n.net/ 銆銆涓涓熀浜嶴TL鐨凜++搴擄紝鐢ㄤ簬搴忓垪鍖朠OD錛孲TL瀹瑰櫒浠ュ強鐢ㄦ埛瀹氫箟鐨勭被鍨嬨?/p>
銆銆(2) Simple XML Persistence Library 銆銆鍙傝冪綉绔欙細http://sxp.sourceforge.net/ 銆銆榪欐槸涓涓妸瀵硅薄搴忓垪鍖栦負XML鐨勮交閲忕駭鐨凜++搴撱?/p>
銆銆5.10 瀛楃涓?/p>
銆銆(1) C++ Str Library 銆銆鍙傝冪綉绔欙細http://www.utilitycode.com/str/ 銆銆鎿嶄綔瀛楃涓插拰瀛楃鐨勫簱錛屾敮鎸乄indows鍜屾敮鎸乬cc鐨勫縐嶅鉤鍙般傛彁渚涢珮搴︿紭鍖栫殑 銆銆(2) Common Text Transformation Library 銆銆鍙傝冪綉绔欙細http://cttl.sourceforge.net/ 銆銆榪欐槸涓涓В鏋愬拰淇敼STL瀛楃涓茬殑搴撱侰TTL substring綾誨彲浠ョ敤鏉ユ瘮杈冿紝鎻掑叆錛?br />鏇挎崲浠ュ強鐢‥BNF鐨勮娉曡繘琛岃В鏋愩?/p>
銆銆(3) GRETA 銆銆鍙傝冪綉绔欙細http://research.microsoft.com/projects/greta/ 銆銆榪欐槸鐢卞井杞爺絀墮櫌鐨勭爺絀朵漢鍛樺紑鍙戠殑澶勭悊姝e垯琛ㄨ揪寮忕殑搴撱傚湪灝忓瀷鍖歸厤鐨勬儏鍐?br />涓嬫湁闈炲父浼樼鐨勮〃鐜般?/p>
銆銆5.11 緇煎悎 銆銆(1) P::Classes 銆銆鍙傝冪綉绔欙細http://pclasses.com/ 銆銆涓涓珮搴﹀彲縐繪鐨凜++搴旂敤紼嬪簭妗嗘灦銆傚綋鍓嶅叧娉ㄧ被鍨嬪拰綰跨▼瀹夊叏鐨剆ignal/slot 銆銆(2) ACDK - Artefaktur Component Development Kit 銆銆鍙傝冪綉绔欙細http://acdk.sourceforge.net/ 銆銆榪欐槸涓涓鉤鍙版棤鍏崇殑C++緇勪歡妗嗘灦錛岀被浼間簬Java鎴栬?NET涓殑妗嗘灦錛堝弽灝勬満鍒訛紝 銆銆(3) dlib C++ library 銆銆鍙傝冪綉绔欙細http://www.cis.ohio-state.edu/~kingd/dlib/ 銆銆鍚勭鍚勬牱鐨勭被鐨勪竴涓患鍚堛傚ぇ鏁存暟錛孲ocket錛岀嚎紼嬶紝GUI錛屽鍣ㄧ被,浠ュ強嫻忚鐩?br />褰曠殑API絳夌瓑銆?/p>
銆銆(4) Chilkat C++ Libraries 銆銆鍙傝冪綉绔欙細http://www.chilkatsoft.com/cpp_libraries.asp 銆銆榪欐槸鎻愪緵zip錛宔-mail錛岀紪鐮侊紝S/MIME錛孹ML絳夋柟闈㈢殑搴撱?/p>
銆銆(5) C++ Portable Types Library (PTypes) 銆銆鍙傝冪綉绔欙細http://www.melikyan.com/ptypes/ 銆銆榪欐槸STL鐨勬瘮杈冪畝鍗曠殑鏇夸唬鍝侊紝浠ュ強鍙Щ妞嶇殑澶氱嚎紼嬪拰緗戠粶搴撱?/p>
銆銆(6) LFC 銆銆鍙傝冪綉绔欙細http://lfc.sourceforge.net/ 銆銆鍝︼紝榪欏張鏄竴涓皾璇曟彁渚涗竴鍒囩殑C++搴?/p>
銆銆5.12 鍏朵粬搴?/p>
銆銆(1) Loki 銆銆鍙傝冪綉绔欙細http://www.moderncppdesign.com/ 銆銆鍝︼紝浣犲彲鑳芥姳鎬ㄦ垜鏃╄鍜孊oost涓璧蜂粙緇嶅畠錛屼竴涓疄楠屾ц川鐨勫簱銆備綔鑰呭湪loki涓?br />鎶奀++妯℃澘鐨勫姛鑳藉彂鎸ュ埌浜嗘瀬鑷淬傚茍涓斿皾璇曟妸綾諱技璁捐妯″紡榪欐牱鎬濇兂灞傞潰鐨勪笢瑗塊氳繃 銆銆(2) ATL 銆銆ATL(Active Template Library) 銆銆鏄竴緇勫皬宸с侀珮鏁堛佺伒媧葷殑綾伙紝榪欎簺綾諱負鍒涘緩鍙簰鎿嶄綔鐨凜OM緇勪歡鎻愪緵浜嗗熀鏈殑 銆銆(3) FC++: The Functional C++ Library 銆銆榪欎釜搴撴彁渚涗簡涓浜涘嚱鏁板紡璇█涓墠鏈夌殑瑕佺礌銆傚睘浜庣敤搴撴潵鎵╁厖璇█鐨勪竴涓唬琛?br />浣溿傚鏋滄兂瑕佸湪OOP涔嬪瀵繪壘鍙︿竴鍒嗙殑涔愯叮錛屽彲浠ュ幓鐪嬬湅鍑芥暟寮忕▼搴忚璁$殑涓栫晫銆傚ぇ 銆銆(4) FACT! 銆銆鍙傝冪綉绔欙細http://www.kfa-juelich.de/zam/FACT/start/index.html 銆銆鍙﹀涓涓疄鐜板嚱鏁板紡璇█鐗規х殑搴?/p>
銆銆(5) Crypto++ 銆銆鎻愪緵澶勭悊瀵嗙爜錛屾秷鎭獙璇侊紝鍗曞悜hash錛屽叕鍖欏姞瀵嗙郴緇熺瓑鍔熻兘鐨勫厤璐瑰簱銆?/p>
銆銆榪樻湁寰堝闈炲父嬋鍔ㄤ漢蹇冩垨鑰呮槸鏋佸叾瀹炵敤鐨凜++搴擄紝闄愪簬鎴戜滑鐨勬按騫充互鍙婃枃绔犵殑綃?br />騫呬笉鑳藉寘鎷繘鏉ャ傚湪瀵逛簬榪欎簺宸茬粡鍖呭惈榪戞潵鐨勫簱鐨勪粙緇嶄腑錛岀敱浜庡茍涓嶆槸姣忎竴涓垜浠?br />閮戒嬌鐢ㄨ繃錛屾墍浠ラ毦鍏嶆湁鍋忛涔嬪錛岃璇昏呰璋呫?/p>
------------------------------------------------------------------------ 銆銆6錛屼功綾?/p>
銆銆浠ュ墠鐔婅妭鍏堢敓鏇炬挵鏂囪瘎璁虹浉瀵逛簬Java紼嬪簭璁捐璇█錛孋++鐨勫ソ涔﹀濡傜墰姣涖傝崳鑰 銆銆http://www.royaloo.com/articles/articles_2003/9CppBooks.htm 銆銆涓嬮潰鍑犳湰涔﹀浜庤蛋鍦–++鍒濆涔嬭礬涓婄殑璇昏呮槸鎴戜滑鏈鎰挎剰鎺ㄨ崘緇欏ぇ瀹剁殑錛?/p>
銆銆(1) 銆奀++ Primer銆?/p>
銆銆鍝︼紝涔熻浣犱細鎶辨ㄦ垜浠負浠涔堜笉鍏堜粙緇峊CPL,浣嗗浜庤蛋鍦ㄥ涔犱箣璺笂鐨勫叆闂ㄨ咃紝 銆銆(2) 銆奅ssential C++銆?/p>
銆銆濡傛灉璇淬奀++ Primer銆嬫槸C++棰嗗煙鐨勮秴綰у疂鍏革紝閭d箞姝や功浣滀負鎺屾彙C++鐨勫ぇ灞瑙?br />褰撲箣鏃犳劎銆傛濡傘?NET澶у眬瑙傘嬩竴涔﹁兘澶熻璇昏呭叏鎻?NET錛屾湰涔﹁榪頒簡C++涓渶鏍稿績 銆銆(3) 銆奣he C++ Programming Language銆?/p>
銆銆Bjarne涓轟綘甯︽潵鐨凜++鏁欑▼錛岀湡姝h兘澶熷憡璇変綘鎬庝箞鐢ㄦ墠鍙湡姝g殑C++鐨勫敮涓涓鏈?br />涔︺傝櫧鐒跺鍚屸滄煇鏌愮▼搴忚璁¤璦鈥濊繖鏍風殑涔︾睄浼氱粰澶у涓涓唴瀹瑰叏鎻斤紝鍏ラ棬鍒扮簿 銆銆(4) 銆奅ffective C++銆嬶紝銆奙ore Effective C++銆?/p>
銆銆鏄殑錛屾濡備竴浜汣++鐖卞ソ鑰呯粡甯鎬互璇昏繃涓庢病鏈夎榪囦笂榪頒袱鏈綔鍝佹潵鍖哄垎浣犳槸鍚︽槸 銆銆鎶鏈功綾嶄粊鑰呰浠侊紝榪囧鐨勮瘎璁哄弽鏃犲お澶氭剰涔夛紝鐢辮鑰呭枩濂介夋嫨鏈閫傚悎鑷繁鐨?br />涔︽柟涓轟笂絳栥?/p>
------------------------------------------------------------------------ 銆銆7錛岃祫婧愮綉绔?/p>
銆銆姝e鎴戜滑鍙互閫氳繃璁$畻鏈哄巻鍙蹭笂鐨勯噸瑕佷漢鐗╀簡瑙h綆楁満鍙茬殑鍙戝睍錛孋++鐩稿叧浜虹墿 銆銆(2) Stanley B. Lippman 銆銆(3) Scott Meyers 銆銆(4) David Musser 銆銆(5) Bruce Eckel 銆銆(6) Nicolai M. Josuttis 銆銆(7) Herb Sutter 銆銆(8) Andrei Alexandrescu 銆銆(9) 渚嵎鍏堢敓 銆銆(10) 瀛熷博鍏堢敓 銆銆(11) 鑽h鍏堢敓 銆銆(12) 娼樼埍姘戝厛鐢?br />銆銆http://www.icst.pku.edu.cn/panaimin/pam_homepage.htm 銆銆闄や簡涓婅堪澶у笀鐨勪富欏靛錛屼互涓嬬殑緇煎悎綾籆++瀛︿範鍙傝冪珯鐐規槸鎴戜滑闈炲父鎰挎剰鍚戝ぇ瀹?br />鎺ㄨ崘鐨勶細 銆銆(1) CodeProject 銆銆(2) CodeGuru 銆銆(3) Dr. Dobb's Journal 銆銆(4) C/C++ Users Journal 銆銆(5) C緇磋鐐?br />銆銆http://www.c-view.org 銆銆(6) allaboutprogram 銆銆(1) ISO IEC JTC1/SC22/WG21 - C++錛氭爣鍑咰++鐨勬潈濞佸弬鑰?br />銆銆http://anubis.dkuug.dk/jtc1/sc22/wg21/ 銆銆(2) C++ FAQ LITE 鈥?Frequently Asked Questions: 鏈涓哄叏闈㈢殑C++FAQ 銆銆(1) .alt.comp.lang.learn.c-c++ 銆銆(2) .comp.lang.c++.moderated 銆銆(3) .comp.std.c++ ------------------------------------------------------------------------ 銆銆8錛屼笉寰椾笉鍐欑殑緇撴潫璇?/p>
銆銆緇撴潫鐨勬椂鍊欎篃鏄葷粨鐜扮姸錛屽睍鏈涙湭鏉ョ殑鏃跺欍傝櫧鐒禖++浠庤劚鑳庝簬C寮濮嬶紝涓璺壈 銆銆C++鍦ㄩ潰鍚戜紒涓氱殑杞歡寮鍙戜腑錛屽湪寮鍙戜究鎹鋒х瓑鏂歸潰鐨勭‘瑕佹瘮Java鍜孋#宸緢澶氾紝 銆銆浠嶤++鐩墠鐨勬椿璺冪▼搴︼紝浠ュ強搴旂敤鐜扮姸鏉ヨ鏄畬鍏ㄨ兘澶熻偗瀹欳++浠嶇劧鏄蔣浠跺伐涓?br />鐨勫熀紜錛屼篃涓嶄細閫鍑哄巻鍙茶垶鍙扮殑銆傚彟澶栦粠Boost錛孡oki榪欎簺搴撲腑鎴戜滑涔熻兘澶熺湅鍒癈++ 銆銆闇瑕佺湅鍒扮殑鏄袱涓秼鍔匡紝涓涓秼鍔挎槸C++鍙樺緱鏇村姞澶嶆潅錛屾洿鍔犲闄㈡淳錛岄氳繃妯℃澘
聽聽聽 (T) expression // cast expression to be of type T
聽聽聽浜屻?C++鐨勫洓縐嶅己鍒惰漿鍨嬪艦寮忥細
銆銆C++ 鍚屾椂鎻愪緵浜嗗洓縐嶆柊鐨勫己鍒惰漿鍨嬪艦寮忥紙閫氬父縐頒負鏂伴鏍肩殑鎴?C++ 椋庢牸鐨勫己鍒惰漿鍨嬶級錛?
銆銆姣忎竴縐嶉傜敤浜庣壒瀹氱殑鐩殑錛?
銆銆路dynamic_cast 涓昏鐢ㄤ簬鎵ц鈥滃畨鍏ㄧ殑鍚戜笅杞瀷錛坰afe downcasting錛夆濓紝涔熷氨鏄錛岃紜畾涓涓璞℃槸鍚︽槸涓涓戶鎵夸綋緋諱腑鐨勪竴涓壒瀹氱被鍨嬨傚畠鏄敮涓涓嶈兘鐢ㄦ棫椋庢牸璇硶鎵ц鐨勫己鍒惰漿鍨嬶紝涔熸槸鍞竴鍙兘鏈夐噸澶ц繍琛屾椂浠d環鐨勫己鍒惰漿鍨嬨?br />聽聽聽
銆銆路reinterpret_cast 鏄壒鎰忕敤浜庡簳灞傜殑寮哄埗杞瀷錛屽鑷村疄鐜頒緷璧栵紙implementation-dependent錛夛紙灝辨槸璇達紝涓嶅彲縐繪錛夌殑緇撴灉錛屼緥濡傦紝灝嗕竴涓寚閽堣漿鍨嬩負涓涓暣鏁般傝繖鏍風殑寮哄埗杞瀷鍦ㄥ簳灞備唬鐮佷互澶栧簲璇ユ瀬涓虹綍瑙併?br />銆銆
==聽
class B { ... };
void f(B* pb)
If
pb really points to an object of type D, then pd1 and pd2 will get the
same value. They will also get the same value if pb == 0.
If pb
points to an object of type B and not to the complete D class, then
dynamic_cast will know enough to return zero. However, static_cast
relies on the programmer鈥檚 assertion that pb points to an object of
type D and simply returns a pointer to that supposed D object.
聽聽聽
鍗砫ynamic_cast鍙敤浜庣戶鎵夸綋緋諱腑鐨勫悜涓嬭漿鍨嬶紝鍗沖皢鍩虹被鎸囬拡杞崲涓烘淳鐢熺被鎸囬拡錛屾瘮static_cast鏇翠弗鏍兼洿瀹夊叏銆?
dynamic_cast鍦ㄦ墽琛屾晥鐜囦笂姣攕tatic_cast瑕佸樊涓浜?浣唖tatic_cast鍦ㄦ洿瀹戒笂鑼冨洿鍐呭彲浠ュ畬鎴愭槧灝?榪欑涓嶅姞闄愬埗鐨勬槧灝勪即闅?
鐫涓嶅畨鍏ㄦ?static_cast瑕嗙洊鐨勫彉鎹㈢被鍨嬮櫎綾誨眰嬈$殑闈欐佸鑸互澶?榪樺寘鎷棤鏄犲皠鍙樻崲,紿勫寲鍙樻崲(榪欑鍙樻崲浼氬鑷村璞″垏鐗?涓㈠け淇℃伅),鐢?
VOID*鐨勫己鍒跺彉鎹?闅愬紡綾誨瀷鍙樻崲絳?..
聽聽聽 reinterpret_cast鏄負浜嗘槧灝勫埌涓涓畬鍏ㄤ笉鍚岀被鍨嬬殑鎰忔?榪欎釜鍏抽敭璇嶅湪鎴戜滑闇瑕佹妸綾誨瀷鏄犲皠鍥炲師鏈夌被鍨嬫椂鐢ㄥ埌瀹?鎴戜滑鏄犲皠鍒扮殑綾誨瀷浠呬粎鏄負浜嗘晠寮勭巹铏氬拰鍏朵粬鐩殑,榪欐槸鎵鏈夋槧灝勪腑鏈鍗遍櫓鐨?(榪欏彞璇濇槸C++緙栫▼鎬濇兂涓殑鍘熻瘽)
聽聽聽
static_cast 鍜?reinterpret_cast 鎿嶄綔絎︿慨鏀逛簡鎿嶄綔鏁扮被鍨? 瀹冧滑涓嶆槸浜掗嗙殑; static_cast
鍦ㄧ紪璇戞椂浣跨敤綾誨瀷淇℃伅鎵ц杞崲, 鍦ㄨ漿鎹㈡墽琛屽繀瑕佺殑媯嫻?璇稿鎸囬拡瓚婄晫璁$畻, 綾誨瀷媯鏌?. 鍏舵搷浣滄暟鐩稿鏄畨鍏ㄧ殑. 鍙︿竴鏂歸潰,
reinterpret_cast 浠呬粎鏄噸鏂拌В閲婁簡緇欏嚭鐨勫璞$殑姣旂壒妯″瀷鑰屾病鏈夎繘琛屼簩榪涘埗杞崲, 渚嬪瓙濡備笅:
聽聽聽 int n=9; double d=static_cast < double > (n);
聽聽聽
涓婇潰鐨勪緥瀛愪腑, 鎴戜滑灝嗕竴涓彉閲忎粠 int 杞崲鍒?double. 榪欎簺綾誨瀷鐨勪簩榪涘埗琛ㄨ揪寮忔槸涓嶅悓鐨? 瑕佸皢鏁存暟 9 杞崲鍒?鍙岀簿搴︽暣鏁?9,
static_cast 闇瑕佹紜湴涓哄弻綺懼害鏁存暟 d 琛ヨ凍姣旂壒浣? 鍏剁粨鏋滀負 9.0. 鑰宺einterpret_cast 鐨勮涓哄嵈涓嶅悓:
聽聽聽 int n=9;
聽聽聽 榪欐, 緇撴灉鏈夋墍涓嶅悓. 鍦ㄨ繘琛岃綆椾互鍚? d 鍖呭惈鏃犵敤鍊? 榪欐槸鍥犱負 reinterpret_cast 浠呬粎鏄鍒?n 鐨勬瘮鐗逛綅鍒?d, 娌℃湁榪涜蹇呰鐨勫垎鏋?
鏉ユ簮錛歨ttp://www.yuanma.org/data/2006/0723/article_1213.htm涓.浠涔堟槸瀛楄妭瀵歸綈,涓轟粈涔堣瀵歸綈?
浜?瀛楄妭瀵歸綈瀵圭▼搴忕殑褰卞搷:
璁劇粨鏋勪綋濡備笅瀹氫箟錛?br />struct A
{
聽聽聽 int a;
聽聽聽 char b;
聽聽聽 short c;
};
struct B
{
聽聽聽 char b;
聽聽聽 int a;
聽聽聽 short c;
};
鐜板湪宸茬煡32浣嶆満鍣ㄤ笂鍚勭鏁版嵁綾誨瀷鐨勯暱搴﹀涓?
char:1(鏈夌鍙鋒棤絎﹀彿鍚?聽聽聽聽
short:2(鏈夌鍙鋒棤絎﹀彿鍚?聽聽聽聽
int:4(鏈夌鍙鋒棤絎﹀彿鍚?聽聽聽聽
long:4(鏈夌鍙鋒棤絎﹀彿鍚?聽聽聽聽
float:4聽聽聽聽double:8
閭d箞涓婇潰涓や釜緇撴瀯澶у皬濡備綍鍛?
緇撴灉鏄?
sizeof(strcut A)鍊間負8
sizeof(struct B)鐨勫煎嵈鏄?2
#pragma pack (2) /*鎸囧畾鎸?瀛楄妭瀵歸綈*/
struct C
{
聽聽聽 char b;
聽聽聽 int a;
聽聽聽 short c;
};
#pragma pack () /*鍙栨秷鎸囧畾瀵歸綈錛屾仮澶嶇己鐪佸榻?/
sizeof(struct C)鍊兼槸8銆?br />淇敼瀵歸綈鍊間負1錛?br />#pragma pack (1) /*鎸囧畾鎸?瀛楄妭瀵歸綈*/
struct D
{
聽聽聽 char b;
聽聽聽 int a;
聽聽聽 short c;
};
#pragma pack () /*鍙栨秷鎸囧畾瀵歸綈錛屾仮澶嶇己鐪佸榻?/
sizeof(struct D)鍊間負7銆?br />鍚庨潰鎴戜滑鍐嶈瑙?pragma pack()鐨勪綔鐢?涓?緙栬瘧鍣ㄦ槸鎸夌収浠涔堟牱鐨勫師鍒欒繘琛屽榻愮殑?
聽 瀵逛簬char鍨嬫暟鎹紝鍏惰嚜韜榻愬間負1錛屽浜巗hort鍨嬩負2錛屽浜巌nt,float,double綾誨瀷錛屽叾鑷韓瀵歸綈鍊間負4錛屽崟浣嶅瓧鑺傘?br />2.緇撴瀯浣撴垨鑰呯被鐨勮嚜韜榻愬鹼細鍏舵垚鍛樹腑鑷韓瀵歸綈鍊兼渶澶х殑閭d釜鍊箋?br />3.鎸囧畾瀵歸綈鍊?/font>錛?pragma pack (value)鏃剁殑鎸囧畾瀵歸綈鍊紇alue銆?br />4.鏁版嵁鎴愬憳銆佺粨鏋勪綋鍜岀被鐨勬湁鏁堝榻愬鹼細鑷韓瀵歸綈鍊煎拰鎸囧畾瀵歸綈鍊間腑灝忕殑閭d釜鍊箋?br />鏈?
浜嗚繖浜涘鹼紝鎴戜滑灝卞彲浠ュ緢鏂逛究鐨勬潵璁ㄨ鍏蜂綋鏁版嵁緇撴瀯鐨勬垚鍛樺拰鍏惰嚜韜殑瀵歸綈鏂瑰紡銆傛湁鏁堝榻愬糔鏄渶緇堢敤鏉ュ喅瀹氭暟鎹瓨鏀懼湴鍧鏂瑰紡鐨勫鹼紝鏈閲嶈銆傛湁鏁堝榻怤錛屽氨鏄?
琛ㄧず鈥滃榻愬湪N涓娾濓紝涔熷氨鏄璇ユ暟鎹殑"瀛樻斁璧峰鍦板潃%N=0".鑰屾暟鎹粨鏋勪腑鐨勬暟鎹彉閲忛兘鏄寜瀹氫箟鐨勫厛鍚庨『搴忔潵鎺掓斁鐨勩傜涓涓暟鎹彉閲忕殑璧峰鍦板潃灝辨槸鏁?
鎹粨鏋勭殑璧峰鍦板潃銆傜粨鏋勪綋鐨勬垚鍛樺彉閲忚瀵歸綈鎺掓斁錛岀粨鏋勪綋鏈韓涔熻鏍規嵁鑷韓鐨勬湁鏁堝榻愬煎渾鏁?灝辨槸緇撴瀯浣撴垚鍛樺彉閲忓崰鐢ㄦ婚暱搴﹂渶瑕佹槸瀵圭粨鏋勪綋鏈夋晥瀵歸綈鍊肩殑鏁存暟
鍊嶏紝緇撳悎涓嬮潰渚嬪瓙鐞嗚В)銆傝繖鏍峰氨涓嶈兘鐞嗚В涓婇潰鐨勫嚑涓緥瀛愮殑鍊間簡銆?br />渚嬪瓙鍒嗘瀽錛?br />鍒嗘瀽渚嬪瓙B錛?br />struct B
{
聽聽聽 char b;
聽聽聽 int a;
聽聽聽 short c;
};
鍋?
璁綛浠庡湴鍧絀洪棿0x0000寮濮嬫帓鏀俱傝渚嬪瓙涓病鏈夊畾涔夋寚瀹氬榻愬鹼紝鍦ㄧ瑪鑰呯幆澧冧笅錛岃鍊奸粯璁や負4銆傜涓涓垚鍛樺彉閲廱鐨勮嚜韜榻愬兼槸1錛屾瘮鎸囧畾鎴栬呴粯璁ゆ寚瀹?
瀵歸綈鍊?灝忥紝鎵浠ュ叾鏈夋晥瀵歸綈鍊間負1錛屾墍浠ュ叾瀛樻斁鍦板潃0x0000絎﹀悎0x0000%1=0.絎簩涓垚鍛樺彉閲廰錛屽叾鑷韓瀵歸綈鍊間負4錛屾墍浠ユ湁鏁堝榻愬間篃涓?錛?
鎵浠ュ彧鑳藉瓨鏀懼湪璧峰鍦板潃涓?x0004鍒?x0007榪欏洓涓繛緇殑瀛楄妭絀洪棿涓紝澶嶆牳0x0004%4=0,涓旂揣闈犵涓涓彉閲忋傜涓変釜鍙橀噺c,鑷韓瀵歸綈鍊間負
2錛屾墍浠ユ湁鏁堝榻愬間篃鏄?錛屽彲浠ュ瓨鏀懼湪0x0008鍒?x0009榪欎袱涓瓧鑺傜┖闂翠腑錛岀鍚?x0008%2=0銆傛墍浠ヤ粠0x0000鍒?x0009瀛樻斁鐨?
閮芥槸B鍐呭銆傚啀鐪嬫暟鎹粨鏋凚鐨勮嚜韜榻愬間負鍏跺彉閲忎腑鏈澶у榻愬?榪欓噷鏄痓錛夋墍浠ュ氨鏄?錛屾墍浠ョ粨鏋勪綋鐨勬湁鏁堝榻愬間篃鏄?銆傛牴鎹粨鏋勪綋鍦嗘暣鐨勮姹傦紝
0x0009鍒?x0000=10瀛楄妭錛岋紙10錛?錛夛紖4錛?銆傛墍浠?x0000A鍒?x000B涔熶負緇撴瀯浣揃鎵鍗犵敤銆傛晠B浠?x0000鍒?x000B
鍏辨湁12涓瓧鑺?sizeof(struct B)=12;鍏跺疄濡傛灉灝辮繖涓涓氨鏉ヨ瀹冨凡灝嗘弧瓚沖瓧鑺傚榻愪簡,
鍥犱負瀹冪殑璧峰鍦板潃鏄?,鍥犳鑲畾鏄榻愮殑,涔嬫墍浠ュ湪鍚庨潰琛ュ厖2涓瓧鑺?鏄洜涓虹紪璇戝櫒涓轟簡瀹炵幇緇撴瀯鏁扮粍鐨勫瓨鍙栨晥鐜?璇曟兂濡傛灉鎴戜滑瀹氫箟浜嗕竴涓粨鏋凚鐨勬暟緇?閭?
涔堢涓涓粨鏋勮搗濮嬪湴鍧鏄?娌℃湁闂,浣嗘槸絎簩涓粨鏋勫憿?鎸夌収鏁扮粍鐨勫畾涔?鏁扮粍涓墍鏈夊厓绱犻兘鏄揣鎸ㄧ潃鐨?濡傛灉鎴戜滑涓嶆妸緇撴瀯鐨勫ぇ灝忚ˉ鍏呬負4鐨勬暣鏁板?閭d箞涓嬩竴
涓粨鏋勭殑璧峰鍦板潃灝嗘槸0x0000A,榪欐樉鐒朵笉鑳芥弧瓚崇粨鏋勭殑鍦板潃瀵歸綈浜?鍥犳鎴戜滑瑕佹妸緇撴瀯琛ュ厖鎴愭湁鏁堝榻愬ぇ灝忕殑鏁存暟鍊?鍏跺疄璇稿:瀵逛簬char鍨嬫暟鎹紝鍏?
鑷韓瀵歸綈鍊間負1錛屽浜巗hort鍨嬩負2錛屽浜巌nt,float,double綾誨瀷錛屽叾鑷韓瀵歸綈鍊間負4錛岃繖浜涘凡鏈夌被鍨嬬殑鑷韓瀵歸綈鍊間篃鏄熀浜庢暟緇勮冭檻鐨?鍙?
鏄洜涓鴻繖浜涚被鍨嬬殑闀垮害宸茬煡浜?鎵浠ヤ粬浠殑鑷韓瀵歸綈鍊間篃灝卞凡鐭ヤ簡.
鍚岀悊,鍒嗘瀽涓婇潰渚嬪瓙C錛?br />#pragma pack (2) /*鎸囧畾鎸?瀛楄妭瀵歸綈*/
struct C
{
聽聽聽 char b;
聽聽聽 int a;
聽聽聽 short c;
};
#pragma pack () /*鍙栨秷鎸囧畾瀵歸綈錛屾仮澶嶇己鐪佸榻?/
絎?
涓涓彉閲廱鐨勮嚜韜榻愬間負1錛屾寚瀹氬榻愬間負2錛屾墍浠ワ紝鍏舵湁鏁堝榻愬間負1錛屽亣璁綜浠?x0000寮濮嬶紝閭d箞b瀛樻斁鍦?x0000錛岀鍚?x0000%1=
0;絎簩涓彉閲忥紝鑷韓瀵歸綈鍊間負4錛屾寚瀹氬榻愬間負2錛屾墍浠ユ湁鏁堝榻愬間負2錛屾墍浠ラ『搴忓瓨鏀懼湪0x0002銆?x0003銆?x0004銆?x0005鍥涗釜榪炵畫
瀛楄妭涓紝絎﹀悎0x0002%2=0銆傜涓変釜鍙橀噺c鐨勮嚜韜榻愬間負2錛屾墍浠ユ湁鏁堝榻愬間負2錛岄『搴忓瓨鏀?br />鍦?x0006銆?x0007涓紝絎﹀悎
0x0006%2=0銆傛墍浠ヤ粠0x0000鍒?x00007鍏卞叓瀛楄妭瀛樻斁鐨勬槸C鐨勫彉閲忋傚張C鐨勮嚜韜榻愬間負4錛屾墍浠鐨勬湁鏁堝榻愬間負2銆傚張8%2=0,C
鍙崰鐢?x0000鍒?x0007鐨勫叓涓瓧鑺傘傛墍浠izeof(struct C)=8.鍥?濡備綍淇敼緙栬瘧鍣ㄧ殑榛樿瀵歸綈鍊?
浜?閽堝瀛楄妭瀵歸綈,鎴戜滑鍦ㄧ紪紼嬩腑濡備綍鑰冭檻?
聽聽聽
濡傛灉鍦ㄧ紪紼嬬殑鏃跺欒鑰冭檻鑺傜害絀洪棿鐨勮瘽,閭d箞鎴戜滑鍙渶瑕佸亣瀹氱粨鏋勭殑棣栧湴鍧鏄?,鐒跺悗鍚勪釜鍙橀噺鎸夌収涓婇潰鐨勫師鍒欒繘琛屾帓鍒楀嵆鍙?鍩烘湰鐨勫師鍒欏氨鏄妸緇撴瀯涓殑鍙橀噺鎸夌収
綾誨瀷澶у皬浠庡皬鍒板ぇ澹版槑,灝介噺鍑忓皯涓棿鐨勫~琛ョ┖闂?榪樻湁涓縐嶅氨鏄負浜嗕互絀洪棿鎹㈠彇鏃墮棿鐨勬晥鐜?鎴戜滑鏄劇ず鐨勮繘琛屽~琛ョ┖闂磋繘琛屽榻?姣斿:鏈変竴縐嶄嬌鐢ㄧ┖闂存崲鏃墮棿鍋?
娉曟槸鏄懼紡鐨勬彃鍏eserved鎴愬憳錛?br />聽聽聽聽聽聽聽聽 struct A{
聽聽聽聽聽聽聽聽聽聽 char a;
聽聽聽聽聽聽聽聽聽聽 char reserved[3];//浣跨敤絀洪棿鎹㈡椂闂?br />聽聽聽聽聽聽聽聽聽聽 int b;
}
reserved鎴愬憳瀵規垜浠殑紼嬪簭娌℃湁浠涔堟剰涔?瀹冨彧鏄搗鍒板~琛ョ┖闂翠互杈懼埌瀛楄妭瀵歸綈鐨勭洰鐨?褰撶劧鍗充嬌涓嶅姞榪欎釜鎴愬憳閫氬父緙栬瘧鍣ㄤ篃浼氱粰鎴戜滑鑷姩濉ˉ瀵歸綈,鎴戜滑鑷繁鍔犱笂瀹冨彧鏄搗鍒版樉寮忕殑鎻愰啋浣滅敤.鍏?瀛楄妭瀵歸綈鍙兘甯︽潵鐨勯殣鎮?
unsigned int i = 0x12345678;
unsigned char *p=NULL;
unsigned short *p1=NULL;
*p=0x00;
p1=(unsigned short *)(p+1);
*p1=0x0000;
鏈鍚庝袱鍙ヤ唬鐮侊紝浠庡鏁拌竟鐣屽幓璁塊棶unsignedshort鍨嬪彉閲忥紝鏄劇劧涓嶇鍚堝榻愮殑瑙勫畾銆?br />鍦▁86涓婏紝綾諱技鐨勬搷浣滃彧浼氬獎鍝嶆晥鐜囷紝浣嗘槸鍦∕IPS鎴栬卻parc涓婏紝鍙兘灝辨槸涓涓猠rror,鍥犱負瀹冧滑瑕佹眰蹇呴』瀛楄妭瀵歸綈.涓?濡備綍鏌ユ壘涓庡瓧鑺傚榻愭柟闈㈢殑闂:
3. 濡傛灉鏀寔鐪嬭緗簡瀵歸綈涓庡惁,濡傛灉娌℃湁鍒欑湅璁塊棶鏃墮渶瑕佸姞鏌愪簺鐗規畩鐨勪慨楗版潵鏍囧織鍏剁壒孌婅闂搷浣溿?/p>
from DUI0067D_ADS1_2_CompLib
1.__align(num)
聽聽 榪欎釜鐢ㄤ簬淇敼鏈楂樼駭鍒璞$殑瀛楄妭杈圭晫銆傚湪姹囩紪涓嬌鐢↙DRD鎴栬匰TRD鏃?br />聽聽 灝辮鐢ㄥ埌姝ゅ懡浠_align(8)榪涜淇グ闄愬埗銆傛潵淇濊瘉鏁版嵁瀵硅薄鏄浉搴斿榻愩?br />聽聽 榪欎釜淇グ瀵硅薄鐨勫懡浠ゆ渶澶ф槸8涓瓧鑺傞檺鍒?鍙互璁?瀛楄妭鐨勫璞¤繘琛?瀛楄妭
聽聽 瀵歸綈,浣嗘槸涓嶈兘璁?瀛楄妭鐨勫璞?瀛楄妭瀵歸綈銆?br />聽聽 __align鏄瓨鍌ㄧ被淇敼,浠栧彧淇グ鏈楂樼駭綾誨瀷瀵硅薄涓嶈兘鐢ㄤ簬緇撴瀯鎴栬呭嚱鏁板璞°?br />聽聽
2.__packed
聽 __packed鏄繘琛屼竴瀛楄妭瀵歸綈
聽 1.涓嶈兘瀵筽acked鐨勫璞¤繘琛屽榻?br />聽 2.鎵鏈夊璞$殑璇誨啓璁塊棶閮借繘琛岄潪瀵歸綈璁塊棶
聽 3.float鍙婂寘鍚玣loat鐨勭粨鏋勮仈鍚堝強鏈敤__packed鐨勫璞″皢涓嶈兘瀛楄妭瀵歸綈
聽 4.__packed瀵瑰眬閮ㄦ暣褰㈠彉閲忔棤褰卞搷
聽 5.寮哄埗鐢眜npacked瀵硅薄鍚憄acked瀵硅薄杞寲鏄湭瀹氫箟,鏁村艦鎸囬拡鍙互鍚堟硶瀹?br />聽 涔変負packed銆?br />聽聽聽聽 __packed int* p;聽 //__packed int 鍒欐病鏈夋剰涔?br />聽 6.瀵歸綈鎴栭潪瀵歸綈璇誨啓璁塊棶甯︽潵闂
聽 __packed struct STRUCT_TEST
聽{
聽 char a;
聽 int b;
聽 char c;
聽}聽 ;聽聽聽 //瀹氫箟濡備笅緇撴瀯姝ゆ椂b鐨勮搗濮嬪湴鍧涓瀹氭槸涓嶅榻愮殑
聽聽聽聽聽聽聽聽 //鍦ㄦ爤涓闂産鍙兘鏈夐棶棰?鍥犱負鏍堜笂鏁版嵁鑲畾鏄榻愯闂甗from CL]
//灝嗕笅闈㈠彉閲忓畾涔夋垚鍏ㄥ眬闈欐佷笉鍦ㄦ爤涓?
static char* p;
static struct STRUCT_TEST a;
void Main()
{
聽__packed int* q;聽 //姝ゆ椂瀹氫箟鎴恄_packed鏉ヤ慨楗板綋鍓峲鎸囧悜涓洪潪瀵歸綈鐨勬暟鎹湴鍧涓嬮潰鐨勮闂垯鍙互
聽q = (int*)(p+1);聽聽聽聽聽
聽
聽*q = 0x87654321;
/*聽聽
寰楀埌璧嬪肩殑姹囩紪鎸囦護寰堟竻妤?br />ldr聽聽聽聽聽 r5,0x20001590 ; = #0x12345678
[0xe1a00005]聽聽 mov聽聽聽聽聽 r0,r5
[0xeb0000b0]聽聽 bl聽聽聽聽聽聽 __rt_uwrite4聽 //鍦ㄦ澶勮皟鐢ㄤ竴涓啓4byte鐨勬搷浣滃嚱鏁?
聽聽聽聽聽
[0xe5c10000]聽聽 strb聽聽聽聽 r0,[r1,#0]聽聽 //鍑芥暟榪涜4嬈trb鎿嶄綔鐒跺悗榪斿洖淇濊瘉浜嗘暟鎹紜殑璁塊棶
[0xe1a02420]聽聽 mov聽聽聽聽聽 r2,r0,lsr #8
[0xe5c12001]聽聽 strb聽聽聽聽 r2,[r1,#1]
[0xe1a02820]聽聽 mov聽聽聽聽聽 r2,r0,lsr #16
[0xe5c12002]聽聽 strb聽聽聽聽 r2,[r1,#2]
[0xe1a02c20]聽聽 mov聽聽聽聽聽 r2,r0,lsr #24
[0xe5c12003]聽聽 strb聽聽聽聽 r2,[r1,#3]
[0xe1a0f00e]聽聽 mov聽聽聽聽聽 pc,r14
*/
濡傛灉q娌℃湁鍔燺_packed淇グ鍒欐眹緙栧嚭鏉ユ寚浠ゆ槸榪欐牱鐩存帴浼氬鑷村鍦板潃澶勮闂け璐?br />[0xe59f2018]聽聽 ldr聽聽聽聽聽 r2,0x20001594 ; = #0x87654321
[0xe5812000]聽聽 str聽聽聽聽聽 r2,[r1,#0]
*/
}
]]>
C++瀵硅薄鍐呭瓨甯冨眬
鍐欒繖涓枃绔犲畬鍏ㄦ槸鍥犱負鎯寵鎼炴竻妤?vc 鎬庝箞甯冨眬姣忎釜 c++ 瀵硅薄,浠ュ強鎬庢牱瀹屾垚鎸囬拡鐨勮漿鎹㈢殑榪囩▼.
銆銆鍏堥棶涓涓棶棰?涓や釜涓嶅悓綾誨瀷鐨勬寚閽堢浉浜掕漿鎹互鍚?浠栦滑鍦ㄦ暟鍊間笂鏄竴鏍風殑鍚?姣斿:
銆銆銆銆int nValue = 10;
銆銆銆銆int *pInt = &nValue;
銆銆銆銆void *pVoid = pInt;
銆銆銆銆char *pChar = (char*)pInt;
銆
銆榪欎簺鎸囬拡鐨勫?涓嶆槸璇存寚閽堟寚鍚戠殑鍐呭瓨鐨勫唴瀹?鏄竴鏍風殑鍚? 濡傛灉浣犵殑鍥炵瓟鏄?
yes,閭e鏋滄槸涓涓被鐨勭戶鎵夸綋緋誨憿?鍦ㄧ戶鎵跨被鍚戝熀綾昏漿鎹㈢殑榪囩▼涓?鎸囬拡鐨勬暟鍊艱繕鏄笉鍙樺寲鐨勪箞?濡傛灉浣犵殑鍥炵瓟鏄?涓嶄竴瀹氫細鍙樺寲,瑕佺湅綾葷殑浣撶郴鏄庝箞璁捐鐨?
"鐨勮瘽,閭f伃鍠滀綘,涓嶇敤鐪嬩笅鍘諱簡.濡傛灉浣犺繕涓嶇‘瀹氱┒绔熷彉榪樻槸涓嶅彉,絀剁珶鍝簺鍙?鍝簺涓嶅彉,絀剁珶涓轟粈涔堣鍙樹負浠涔堜笉鍙樼殑璇?鎺ョ潃鐪嬩笅鏉?
銆
銆c++ 鏍囧噯涓嶈瀹?c++ 瀹炵幇鐨勬椂鍊欑殑瀵硅薄鐨勫叿浣撶殑鍐呭瓨甯冨眬,闄や簡鍦ㄦ煇浜涙柟闈㈡湁灝忕殑闄愬埗浠ュ,c++
瀵硅薄鍦ㄥ唴瀛橀噷闈㈢殑甯冨眬瀹屽叏鏄敱緙栬瘧鍣ㄨ嚜琛屽喅瀹?榪欓噷鎴戜篃鍙槸璁ㄨ vc++ .net 2003 build 7.1.3091
鐨勫疄鐜版柟寮?鎴戝茍娌℃湁鍦?vc5 vc6 vc.net 2002 浠ュ強鍏朵粬鐨?2003 build
涓婇潰鍋氳繃嫻嬭瘯,緇撹涔熻涓嶉傚悎閭d簺緙栬瘧騫沖彴.榪欎簺灞炰簬緙栬瘧鍣ㄥ叿浣撳疄鐜?ms 淇濈暀鏈夊湪涓嶉氱煡浣犳垜鐨勬儏鍐典笅浣滃嚭鏇存敼鐨勬潈鍒?搴熻瘽榪欎箞澶?椹笂寮濮?
銆銆瀵逛簬 c 鐨勫唴寤烘寚閽堢殑杞崲,緇撴灉鏄笉鐢ㄥ璁ㄨ鐨?鎴戜滑鍙槸璁ㄨ c++ 鐨勫璞?浠庢渶綆鍗曠殑寮濮?
銆銆銆銆class CBase
銆銆銆銆{
銆銆銆銆public:
銆銆銆銆銆銆int m_nBaseValue;
銆銆銆銆};
銆銆榪欐牱鐨勪竴涓被鍦ㄥ唴瀛橀噷鏀劇疆鏄潪甯哥畝鍗曠殑,浠栧崰鏈?涓?bytes 鐨勭┖闂?涓嶇敤澶氳,鎴戜滑浠庝粬媧劇敓涓涓被鍑烘潵.
銆銆銆銆class CDerive1 : public CBase
銆銆銆銆{
銆銆銆銆public:
銆銆銆銆銆銆int m_nDerive1Value;
銆銆銆銆};
銆
銆CDerive1 鐨勫璞″湪鍐呭瓨閲岄潰鏄庝箞鏀劇殑鍛? 涔熷緢綆鍗?鍗犳湁8涓?bytes 鐨勭┖闂?鍓?涓?bytes 灞炰簬 CBase 綾?鍚庡洓涓?
bytes 灞炰簬鑷繁.涓涓狢Derive1 鐨勬寚閽堣漿鎹㈡垚涓涓?CBase 鐨勬寚閽?緇撴灉鏄竴鏍風殑.涓嬮潰鎴戜滑鍔犱笂澶氶噸緇ф壙鐪嬬湅.
銆銆銆銆class CFinal : public CDerive,public CBase // 榪欓噷鐨?CDerive 鏄竴涓拰 CBase 宸笉澶氱殑鍩虹被
銆銆銆銆{
銆銆銆銆public:
銆銆銆銆銆銆int m_nFinalValue;
銆銆銆銆};
銆
銆CFinal 鐨勫璞″湪鍐呭瓨閲岄潰鐨勫竷灞紼嶅井澶嶆潅涓鐐?浣嗘槸涔熷緢瀹規槗鎯寵薄,浠栧崰鏈?12 涓?bytes 鐨勭┖闂?鍓?涓睘浜?
CDerive,涓棿4涓睘浜?CBase,鍚庨潰4涓墠鏄嚜宸辯殑.閭d竴涓?CFinal 鐨勬寚閽堣漿鎹㈡垚涓涓?CDerive 鎸囬拡,鏁板間細鍙樹箞?
杞崲鎴愪竴涓?CBase 鎸囬拡鍛?鍙堜細鍙樺寲涔?絳旀鏄?鍓嶄竴涓笉鍙?鍚庝竴涓鍙樺寲,閬撶悊闈炲父鐨勬槑鏄?CFinal 瀵硅薄鐨勫紑澶村垰濂芥槸涓涓?
CDerive 瀵硅薄,鑰?CBase 瀵硅薄鍗村湪 CFinal 瀵硅薄鐨勪腑闂?鑷劧鏄鍙樺寲鐨勪簡,鍏蜂綋鎬庝箞鍙樺寲鍛? 鍔?4 灝?
ok(鑷劧瑕佹鏌ユ槸鍚︽槸絀烘寚閽?.
銆銆銆銆CBase *pBase = pFinal ? (CBase*)((char*)pFinal + sizeof(CDerive)) : 0;// 褰撲綘鍐欎笅 pBase = pFinal 鐨勬椂鍊?鍏跺疄鏄繖鏍風殑
銆銆榪欑涓嶅甫 virtual 鐨勭戶鎵垮氨榪欎箞綆鍗?鍙槸鍔犱笂涓涓?offset 鑰屽凡.涓嬮潰鎴戜滑鐪嬬湅濡傛灉鍔犱笂 virtual function 鐨勬椂鍊欐槸浠涔堟牱瀛愮殑鍛?
榪樻槸浠庣畝鍗曠被寮濮?
銆銆銆銆class CBase
銆銆銆銆{
銆銆銆銆public:
銆銆銆銆銆銆virtual void VirtualBaseFunction(){}
銆銆銆銆銆銆int m_nBaseValue;
銆銆銆銆};
銆
銆榪欓噷鍒繪剰娌℃湁浣跨敤 virtual destructor,鍥犱負榪欎釜鍑芥暟紼嶅井鏈変簺涓嶅悓.榪樻槸鍚屾牱鐨勯棶棰?CBase 綾誨湪鍐呭瓨涓婂崰澶氬ぇ鐨勭┖闂?榪樻槸
4 bytes 涔? 絳旀鏄?no, 鍦ㄦ垜鐨勭紪璇戝櫒涓婇潰鏄?8 bytes,澶氬嚭鏉ョ殑 4 bytes 鏄?__vfptr(watch
紿楀彛鐪嬭鐨勫悕瀛?,浠栨槸涓涓寚閽?鎸囧悜浜嗙被鐨?vtable,閭d粈涔堟槸 vtable 鍛?浠栨槸鐢ㄦ潵騫蹭粈涔堢殑鍛? vtable 鏄敤鏉ユ敮鎻?
virtual function
鏈哄埗鐨?浠栧叾瀹炴槸涓涓嚱鏁版寚閽堟暟緇?騫朵笉絳夊悓浜巆/c++璇█閲岄潰鐨勬寚閽堟暟緇?鍥犱負浠栦滑鐨勭被鍨嬪茍涓嶄竴瀹氭槸涓鏍風殑.)浠栫殑姣忎竴涓厓绱犻兘鎸囧悜浜嗕竴涓綘瀹氫箟鐨?
virtual
function,榪欐牱閫氳繃涓涓腑闂村眰鏉ュ埌杈懼姩鎬佽繛緙栫殑鏁堟灉,榪欎簺鎸囬拡鏄湪紼嬪簭榪愯鐨勬椂鍊欏噯澶囧Ε褰撶殑,鑰屼笉鏄湪緙栬瘧鐨勬椂鍊欏噯澶囧Ε褰撶殑,榪欎釜灝辨槸鍔ㄦ佽仈緙栫殑
鐩殑,鍏蜂綋鏄敱璋佹潵璁劇疆榪欎簺鎸囬拡鐨勫憿?constructor/destructor/copy constructor/assignment
operator浠栦滑瀹屾垚鐨?涓嶇敤濂囨?緙栬瘧鍣ㄤ細鍦ㄤ綘鍐欑殑榪欎簺鍑芥暟閲岄潰瀹夋彃浜涘繀瑕佺殑浠g爜鐢ㄦ潵璁劇疆 vtable
鐨勫?濡傛灉浣犳病鏈夊啓榪欎簺鍑芥暟,緙栬瘧鍣ㄤ細鍦ㄩ傚綋鐨勬椂鍊欏府浣犵敓鎴愯繖浜涘嚱鏁?鏄庣櫧涓鐐? vtable 鏄敤鏉ユ敮鎸?virtual function
鏈哄埗鐨?鑰岄渶瑕?virtual 鏈哄埗鐨勭被鍩烘湰涓婇兘浼氱敱涓涓?__vfptr 鎸囧悜浠栬嚜宸辯殑 vtable.鍦ㄨ皟鐢?virtual
function鐨勬椂鍊?緙栬瘧鍣ㄨ繖鏍峰畬鎴?
銆銆銆pBase->VirtualBaseFunction(); => pBase->__vfptr[0]();// 0 鏄綘鐨剉irtual function 鍦?vtable 涓殑 slot number,緙栬瘧鍣ㄥ喅瀹?/font>
銆
銆鐜板湪搴旇寰堟兂璞?CBase 鐨勫ぇ灝忎簡鍚?閭h繖涓?__vfptr 鏄斁鍒頒粈涔堜綅緗殑鍛? 鍦?m_nBaseValue 涔嬪墠榪樻槸涔嬪悗鍛?
鍦ㄦ垜鐨勭紪璇戝櫒涓婄湅鏉?鏄湪涔嬪墠,涓轟粈涔堣鏀懼埌涔嬪墠,鏄洜涓哄湪閫氳繃 鎸囧悜綾繪垚鍛樺嚱鏁扮殑鎸囬拡璋冪敤 virtual function
鐨勬椂鍊欒兘灝戜簺浠g爜(鎸囨眹緙栦唬鐮?,榪欎釜鍘熷洜榪欓噷灝變笉娣卞叆璁ㄨ浜?鏈夊叴瓚g殑鍚屽鍙互鐪嬬湅 inside the c++ object model 涓涔?
銆銆鎺ヤ笅鏉?鎴戜滑鍔犱笂緇ф壙鏉ョ湅鐪?
銆銆銆銆class CDerive1 : public CBase
銆銆銆銆{
銆銆銆銆public:
銆銆銆銆銆銆virtual void VirtualDerive1Function();
銆銆銆銆};
銆
銆榪欎釜鏃跺欎綘涔熻瑕佽,鍐呭瓨甯冨眬璺熸病鏈?virtual 鏄竴鏍風殑,鍙笉榪囨瘡涓被澶氫簡涓涓?__vfptr
鑰屽凡,鍛?..榪欎釜鏄笉瀵圭殑,鍦ㄦ垜鐨勭紪璇戝櫒涓婇潰 涓や釜綾誨叡浜悓涓涓?__vfptr, vtable
閲岄潰鏀炬湁涓や釜鎸囬拡,涓涓槸涓や釜綾誨叡浜殑,涓涓彧灞炰簬 CDerive1 綾?璋冪敤鐨勬椂鍊欏浣曞憿?
銆銆銆pDerive1->VirtualDerive1Function() => pDerive1->__vfptr[1]();
銆銆銆pDerive1->VirtualBaseFunction() => pDerive1->__vfptr[0]();
銆銆鑷充簬鎸囬拡鐨勭浉浜掕漿鎹?鏁板艱繕鏄病鏈夊彉鍖栫殑(涔熸鏄拷姹傝繖縐嶆晥鏋?鎵浠ユ妸 __vfptr 鏀懼埌綾葷殑寮澶?鍥犱負璋冩暣 this 鎸囬拡涔熸槸瑕佸崰鏈夎繍琛屾椂鐨勬椂闂寸殑).
銆
銆鐜板湪鍔犱笂澶氶噸緇ф壙鐬х灖,浠g爜鎴戜笉鍐欎笂鏉ヤ簡,灝辮窡涓婇潰鐨?CFinal, CDerive, CBase
浣撶郴涓鏍?鍙槸姣忎釜綾誨涓涓猇irtualxxxFunction鍑烘潵,榪欎釜鏃跺欑殑鎸囬拡璋冩暣榪樻槸娌℃湁浠涔堝彉鍖?鎵浠ユ垜浠彧鏄湅鐪?vtable
鐨勬儏鍐?浣犱細璇?CDerive 鍜?CFinal 鍏變韓涓涓?__vfptr,鑰?CBase 鏈変竴涓嚜宸辯殑 __vfptr,鑰?CFinal 鐨?
__vfptr 鏈?2 涓猻lot,榪欎釜緇撹鏄紜殑. 鍚屾椂浣犱篃浼氳 閫氳繃 CFinal 綾昏皟鐢?CBase 鐨勫嚱鏁版槸瑕佽繘琛屾寚閽堣皟鏁寸殑,yes
you'r right,涓嶄粎浠呮槸 this 鎸囬拡璋冩暣(鍛?this 鎸囬拡浼氭垚涓?function 鐨勪竴涓弬鏁?,榪樿璋冩暣 vtable 鐨勫?
銆銆銆pFinal->VirtualBaseFunction() => (CBase*)((char*)pFinal + sizeof(CDerive))->__vfptr[0]();
銆銆銆杞崲鎴?asm 鐨勪唬鐮佸ぇ綰︽槸榪欐牱鐨?
銆銆銆mov eax,[pFinal] ; pFinal is a local object,pFinal will be epb - xx
銆銆銆add eax,8 ; 8 = sizeof(CDerive)
銆銆銆mov ecx,eax ; ecx is this pointer
銆銆銆mov edx,[eax] ; edx = vtable address
銆銆銆call [edx] ; call vtable[0]
銆銆鍐欏埌榪欓噷涔熷氨鏄庣櫧this鎸囬拡鏄庝箞璋冩暣鐨?甯?virtual function 鐨勭戶鎵夸篃涓嶅鏉?this鎸囬拡璋冩暣涔熸槸寰堢畝鍗曠殑,涓嬮潰鐪嬫渶澶嶆潅鐨勯儴鍒?virtual inheritance.
銆
銆鎴戠殑緙栬瘧鍣ㄦ敮鎸佽櫄鎷熺戶鎵跨殑鏂瑰紡鍜岃櫄鍑芥暟鐨勬柟寮忓樊涓嶅,閮芥槸閫氳繃涓涓?table 瀹屾垚,鍙槸榪欎釜灝辯湅涓嶅埌 vc 璧嬩簣鐨勫悕瀛椾簡,鎴戜滑鍙粬
vbtable 鍚?緙栬瘧鍣ㄥ悓鏍峰湪綾婚噷闈㈠姞鍏ヤ竴涓寚鍚?vbtable 鐨勬寚閽?鎴戜滑鍙粬 __vbptr 鍚?榪欎釜鎸囬拡鎸囧悜浜?vbtable ,鑰?
vbtable 閲岄潰鐨勬瘡涓欏瑰搴斾簡涓涓熀綾?vbtable
璁板綍浜嗘瘡涓熀綾葷殑鏌愪竴涓亸縐婚噺,閫氳繃榪欎釜鍋忕Щ閲忓氨鑳借綆楀嚭鍏蜂綋綾葷殑鎸囬拡鐨勪綅緗?鐪嬩釜綆鍗曠殑渚嬪瓙:
銆銆銆class CBase
銆銆銆{
銆銆銆public:
銆銆銆銆銆virtual ~CBase(){}
銆銆銆};
銆銆銆class CMid1 : public virtual CBase
銆銆銆{
銆銆銆public:
銆銆銆銆銆virtual ~CMid1(){}
銆銆銆銆銆int m_nMid1;
銆銆銆};
銆銆銆class CMid2 : public virtual CBase
銆銆銆{
銆銆銆public:
銆銆銆銆銆virtual ~CMid2(){}
銆銆銆銆銆int m_nMid2;
銆銆銆};
銆銆銆class CFinal : public CMid1,public CMid2
銆銆銆{
銆銆銆public:
銆銆銆銆銆virtual ~CFinal(){}
銆銆銆銆銆int m_nFinal;
銆銆銆};
銆銆銆CFinal final;
銆銆銆CFinal *pFinal = &final;聽聽聽 // pFinal = 0x0012feb4;
銆銆銆CBase *pBase = pFinal; // pBase = 0x0012fec8 = pFinal + 0x14;
銆銆銆CMid1 *pMid1 = pFinal; // pMid1 = 0x0012feb4 = pFinal;
銆銆銆CMid2 *pMid2 = pFinal; // pMid2 = 0x004210b4 = pFinal;
銆
銆緇撴灉璁╀綘鍚冩儕鍚? 鏈濂囨殑鍦版柟灞呯劧鏄?CMid2 鍜?CMid1 鐨勫湴鍧灞呯劧鏄竴鏍風殑,榪欎釜鏄洜涓?vc 鎶?vbtable 鏀懼埌浜?
CFinal 綾葷殑寮澶寸殑鍘熷洜,鑰孋Mid1 鍜?CMid2 涔熷悓鏍瘋浣跨敤榪欎釜 vbtable, 鎵浠?榪欎釜涓変釜鐨勫湴鍧涔熷氨蹇呴』鐩稿悓浜?閭?
CBase 鐨勫湴鍧鏄庝箞鍑烘潵鐨勫憿? 鍛?..鍒氬垰鎴戜滑璇翠簡 vbtable 鏀懼埌浜咰Final 鐨勫紑澶?vc
涓瀹氫細鏀懼湪寮澶村悧?絳旀鏄笉涓瀹?榪欎釜紼嶅悗瑙i噴).鍦ㄦ垜鐨勬満鍣ㄤ笂闈?final 瀵瑰簲鍐呭瓨鐨勭涓涓?dword 鏄?
0x00426030,鏌ョ湅榪欎釜鍦板潃,絎竴涓猟word 鏄?0 ,絎簩涓氨鏄?0x14,鍒氬ソ鍜?pBase
鐨勫亸縐葷浉鍚?榪欎釜鍙槸宸у悎,涔熻浣犳崲涓被鐨勭戶鎵夸綋緋誨氨瀹屽叏涓嶅悓浜?浣嗘槸鎴戝彧鏄兂璇存槑涓鐐?鍩虹被鐨勫亸縐昏綆楁槸鍜?vbtable
鐨勫肩浉鍏寵仈鐨?涓嬮潰鎴戜滑灝辨潵鐪嬬湅 vc 鏄庝箞璁$畻榪欎簺鍋忕Щ鐨?
銆銆vc 鍦ㄥ垎鏋愭垜浠殑浠g爜鐨勬椂鍊?鐢熸垚浜嗕竴浠界被鐨勭戶鎵夸綋緋諱俊鎭?鍏朵腑鏈変竴涓彨 thisDisplacement 鐨刜PMD緇撴瀯:
銆銆銆銆struct _PMD // total undocumented
銆銆銆銆{
銆銆銆銆銆銆int mdisp; // i think the meaning is Multiinheritance DISPlacement
銆銆銆銆銆銆int pdisp; // Pointer to vbtable DISPlacement
銆銆銆銆銆銆int vdisp; // Vbtable DISPlacement
銆銆銆銆};
銆
銆緇撴瀯鐨勫悕瀛楀拰鎴愬憳鍙橀噺鐨勫悕瀛楃‘紜疄瀹炴槸 vc 鐨勫悕瀛?鍦?watch 紿楀彛杈撳叆 (_PMD*)0
灝辮兘鐪嬪埌榪欎釜緇撴瀯鐨勮緇嗕俊鎭?,姣忎釜瀛楁鐨勫惈涔夊嵈鏄垜鑷繁鐚滄祴鍑烘潵鐨?mdisp 澶ф鐢ㄦ潵琛ㄧず澶氶噸緇ф壙(鍖呮嫭鍗曚竴緇ф壙)鐨勬椂鍊欑殑鍋忕Щ閲?pdisp
琛ㄧず vbtable 鐨勫亸縐婚噺,鑰?vdisp 琛ㄧず綾誨湪 vbtable
閲岄潰鐨勪笅鏍?閭d箞鏈変簡榪欎釜緇撴瀯鎬庢牱鎵嶈兘瀹屾垚鎸囬拡鐨勮漿鎹㈠憿?鍋囧鎴戜滑鏈変竴涓淳鐢熺被鎸囬拡
pFinal,瑕佽漿鎹㈡垚涓涓壒瀹氱殑鍩虹綾?鎴戜滑棣栧厛瑕佺煡閬撳拰榪欎釜鍩虹被瀵瑰簲鐨?_PMD
緇撴瀯鐨勪俊鎭?榪欎釜淇℃伅鐨勮幏鍙?鎴戞殏鏃舵病鏈夋壘鍒頒竴涓潪甯告柟渚跨殑鏂規硶,鐜板湪鎴戜嬌鐢ㄧ殑鏂規硶涓嬮潰浼氭湁鎻忚堪),鏈変簡榪欎釜淇℃伅浠ュ悗,杞崲灝辨柟渚夸簡.棣栧厛鎵懼埌
vbtabel 鐨勫湴鍧 *(pFinal + pdisp),鐒跺悗鎵懼埌鍩虹被鐨勫亸縐?*(*(pFinal + pdisp) + vdisp)
榪欎釜鍋忕Щ鍊兼槸鐩稿vbtable鐨?鎵浠ヨ繕瑕佸姞涓?vbtable鐨勫亸縐?鏈鍚庡姞涓?mdisp鐨勫亸縐?濡備笅:
銆銆char *pFinal = xxx; // need a init value
銆銆char *pBase; // we must calc
銆銆pBase = pFinal + mdisp + *(int *)(*(int *)(pFinal + pdisp) + vdisp) + pdisp;
銆銆娉ㄦ剰: 褰?pdisp < 0 鐨勬椂鍊欏氨琛ㄧず榪欎釜綾繪病鏈?vbtable 鐩存帴浣跨敤 pFinal + mdisp 灝卞緱鍒扮粨鏋滀簡.
銆銆鎵浠ヨ繖涓粨鏋勬槸涓涓氱敤鐨勭粨鏋?涓撻棬鐢ㄤ綔綾誨瀷杞崲,涓嶇鏄湁鏃犺櫄緇ф壙閮借兘浣跨敤榪欎釜緇撴瀯榪涜綾誨瀷杞崲.
銆銆閫氳繃榪欎釜緇撴瀯,鎴戜滑涔熻兘鐪嬪埌 vc 鏄庢牱甯冨眬榪欎釜 object 鐨?
銆銆鐪嬪埌榪欓噷,涔熻浣犺澶у懠涓鍙f皵,濡堝鍛,涓涓被鍨嬭漿鎹㈣榪欎箞鐨勯夯鐑﹀悧?鎴戠洿鎺ュ啓 pBase = pFinal 涓嶅氨鍙互浜嗗悧? 鎭枩浣犺繕娌℃湁琚垜蹇芥偁寰楁檿澶磋漿鍚?鍝堝搱.鍏跺疄浣犲啓涓嬮偅琛岃鍙ョ殑鏃跺?緙栬瘧鍣ㄥ湪甯綘鍋氳繖涓漿鎹?澶х害鐢熸垚涓嬮潰鐨勪唬鐮?br />
銆銆銆銆mov eax,[pFinal] ;final address
銆銆銆銆mov ecx,[eax] ; vbtable address *(int *)(pFinal + pdisp)
銆銆銆銆mov edx,eax ; save to edx
銆銆銆銆add edx,[ecx + 4] ; ecx + 4 is (*(int *)(pFinal + pdisp) + vdisp)
銆銆銆銆mov [pBase],edx ; edx = pFinal + mdisp + *(int *)(*(int *)(pFinal + pdisp) + vdisp) + pdisp;
銆銆銆銆; here mdisp = 0, pdisp = 0, vdisp = 4
銆
銆涔熻浣犺璇翠簡,鎴戣榪欎簺涓滆タ鏉ュ共浠涔?瑕佽漿鎹㈢殑鏃跺欑洿鎺ヨ漿鎹㈠氨濂戒簡,緙栬瘧鍣ㄤ細甯仛,鐨勭‘,澶у鏁扮殑鏃跺欑‘瀹炴槸榪欐牱,浣嗘槸,鍦ㄦ煇浜涙椂鍊欏嵈騫朵笉濡傛,鐜板湪浣?
瑕佸疄鐜頒竴涓姛鑳?杈撳叆涓涓寚閽?杈撳叆涓涓?_PMD 緇撴瀯,浣犺瀹炵幇涓涓狝djustPointer
鐨勫嚱鏁版潵鐢熸垚鍙︿竴涓寚閽?榪欎釜鏃跺欎綘涔熷彧鑳借繖鏍峰畬鎴愪簡,鍥犱負鎴戞病鏈夌粰浣犱袱涓寚閽堢殑鍚嶅瓧,灝辯畻緇欎簡浣犲瓧絎︿覆褰㈠紡鐨勫悕瀛椾篃娌℃湁鐢?鍛?...浣犱篃璁鎬細璇?鍔炴硶
鏄湁鐨?鐨勭‘鏄湁,妯℃澘灝辮兘瀹炵幇榪欑鍔熻兘,鍛?.榪欎釜鎴戜滑鏆傛椂涓嶈璁哄叿浣撶殑瀹炵幇緇嗚妭.涔熻浣犺闂簡,絀剁珶浠涔堟椂鍊欎細鍘誨疄鐜拌繖縐嶅惉閮芥病鏈夊惉榪囩殑鍔熻兘,鍏跺疄榪?
涓嚱鏁版槸鐪熸瀛樺湪鐨?鍙笉榪囦笉鏄敱浣犳潵瀹炵幇鐨?鑰屾槸 ms 鐨勪漢瀹炵幇鐨?浣犲彧鐢ㄥ啓涓涓?甯︽湁 c++ 寮傚父鐨勭▼搴?浣跨敤 ida
鍙嶆眹緙?鐒跺悗鏌ユ壘鍑芥暟,灝辮兘鎵懼埌榪欎釜鍑芥暟浜?浠栫敤鏉ュ湪寮傚父澶勭悊鏃跺垱寤?catch 鎵闇瑕佺殑
object.鑷充簬榪欎釜璇︾粏鐨勪俊鎭?璇鋒湡寰?鎴戜細鏈蹇熷害鍐欏嚭鍏充簬 vc 鏄庢牱瀹炵幇 c++ 寮傚父鐨勬枃绔犳潵.
銆銆鏈鍚庝簡,璇磋閭d釜
_PMD 緇撴瀯鐨勮幏鍙栨柟寮?鐪嬬殑鏃跺欎笉瑕佸悆鎯?鏂規硶姣旇緝鐨勯夯鐑?姣斿鎴戞兂鐭ラ亾鍜?CFinal 綾葷浉鍏崇殑 _PMD 淇℃伅,鍏堟柊寤哄伐浣?鍐欎笅
throw pFinal 榪欐牱鐨勮鍙?緙栬瘧,鍦ㄨ繖涓鍙ョ殑鍦版柟璁劇疆鏂偣,榪愯,杞埌鍙嶆眹緙?榪涘叆 __CxxThrowException@8
鍑芥暟,榪欎釜鏃跺欎笉鍑烘剰澶栦綘鑳界湅鍒頒竴涓彨 pThrowInfo 鐨勪笢瑗?濡傛灉鐪嬩笉鍒?璇鋒墦寮"鏄劇ず絎﹀彿鍚?閫夐」),鍦?watch
紿楀彛閲岄潰杈撳叆pThrowInfo,灞曞紑浠?鐪嬪埌涓涓猵CatchableTypeArray,璁板綍涓嬩粬鐨?
nCacthableTypes鐨勫?鐒跺悗鍦?watch 閲岄潰杈撳叆
pThrowInfo->pCatchableTypeArray->arrayOfCatchableTypes[0]
鍒?pThrowInfo->pCatchableTypeArray->arrayOfCatchableTypes[n], n
灝辨槸浣犲垰鍒氳褰曠殑鍊煎噺1,鍐嶅睍寮浠栦滑,浣犲氨鑳界湅鍒頒竴涓?thisDisplacement 鐨勬暟鎹?緇х畫灞曞紑灝辨槸 mdisp
絳夌瓑浜?寰堟槸楹葷儲鍚?鍝?.浣犲凡緇忕寽鍒頒簡,榪欎釜鏄拰寮傚父鏈夊叧緋葷殑.
銆銆鍚庤:
榪欐鏃墮棿,鎴戜竴鐩村湪璇諱簺鍙嶆眹緙栦箣鍚庣殑浠g爜,涔熼鏈変簺蹇冨緱,鎵浠ユ墠鏈夋兂娉曞啓涓浜涙枃绔?鎺㈣ vc
緙栬瘧鍣ㄩ矞涓轟漢鐭?澶繃鐙傚浜?鐨勭瀵?榪欎釜鏂歸潰鐨勬枃绔犱篃鏈変漢鍐欒繃,閭d簺鏂囩珷涔熺粰鎴戜笉灝戠殑鍚彂,鎴戜笉璁や負鑷繁鏄涓涓彂鐜拌繖浜涚瀵嗙殑浜?浣嗘槸鑷沖皯鎴戣嚜宸辯煡閬?
鐨?鎴戞槸絎竴涓妸榪欎簺涓滆タ鍐欏嚭鏉ョ殑浜?鏂囩珷閲岄潰浣滃ⅷ澶氱殑閮ㄥ垎閮芥槸鑷繁鍙戠幇鐨?灝辮繖涓枃绔犻噷闈㈢殑鍐呭鏉ヨ,inside the c++ object
model 鏄湁姣旇緝璇︾粏鐨勬弿鍐?浣嗘槸浠栧茍涓嶆槸杞崲閽堝 vc 榪欎釜緙栬瘧鍣ㄧ殑瀹炵幇,鑰?_PMD 榪欎釜緇撴瀯鎴戜篃娌℃湁鍦ㄤ粈涔堝湴鏂硅鏈変漢鎻忚堪榪?鍙槸鍦?
windows develop network
鐨?002騫?2鏈堢殑鏉傚織涓婄湅鏈変漢鎻愬埌榪囪繖涓粨鏋?鍙儨浠栧嵈娌℃湁浜嗚В(鑷沖皯浠栧湪浠栧彂琛ㄦ枃绔犵殑鏃跺欐槸濡傛槸璇寸殑)榪欎釜緇撴瀯鐨勭敤澶?姝f槸鍥犱負榪欎釜鍘熷洜,鎴戞墠鏈夊啓
榪欎釜鏂囩珷浠ュ強鍚庣畫鏂囩珷鐨勫啿鍔?.鎵浠?榪欎釜鏂囩珷涔熺畻鏄垜鑷繁鐨勫師鍒涘惂.榪欎釜鏂囦歡铏界劧鍜屾父鎴忓埗閫犳病鏈夊お澶х殑鍏崇郴,浣嗘槸灝?T
鑷娓呴珮,涓嶆効鎰忚嚜宸辯殑鏂囩珷琚竴甯笉鎳傜殑浜鴻瘎浠鋒潵璇勪環鍘葷殑,鎵浠ヤ篃娌℃湁鍙戝埌閭d簺钁楀悕鐨?xxx 緗戠珯,鍙彂 goldpoint.杞澆璇鋒敞鏄庡嚭澶?灝?T 瀵硅嚜宸辯殑絎竴涓師鍒涙枃绔犳瘮杈冪弽鎯?姣旇緝閲嶈,璋㈣阿).
]]>
鍑芥暟璋冪敤瑙勮寖stdcall
cdecl
fastcall
thiscall
naked callstdcall璋冪敤瑙勮寖
int __stdcall function(int a,int b)
1錛夊弬鏁頒粠鍙沖悜宸﹀帇鍏ュ爢鏍堬紱
2錛夊嚱鏁拌嚜韜慨鏀瑰爢鏍堬紱
3) 鍑芥暟鍚嶈嚜鍔ㄥ姞鍓嶅鐨勪笅鍒掔嚎錛屽悗闈㈢揣璺熶竴涓狜絎﹀彿錛屽叾鍚庣揣璺熺潃鍙傛暟鐨勫昂瀵搞?/font>聽 push 2 絎簩涓弬鏁板叆鏍?br /> 聽聽push 1 絎竴涓弬鏁板叆鏍?br /> 聽聽call function 璋冪敤鍙傛暟錛屾敞鎰忔鏃惰嚜鍔ㄦ妸cs:eip鍏ユ爤
push ebp 淇濆瓨ebp瀵勫瓨鍣紝璇ュ瘎瀛樺櫒灝嗙敤鏉ヤ繚瀛樺爢鏍堢殑鏍堥《鎸囬拡錛屽彲浠ュ湪鍑芥暟閫鍑烘椂鎭㈠
聽聽mov ebp,esp 淇濆瓨鍫嗘爤鎸囬拡
聽聽mov eax,[ebp + 8H] 鍫嗘爤涓璭bp鎸囧悜浣嶇疆涔嬪墠渚濇淇濆瓨鏈塭bp,cs:eip,a,b,ebp +8鎸囧悜a
聽聽add eax,[ebp + 0CH] 鍫嗘爤涓璭bp + 12澶勪繚瀛樹簡b
聽聽mov esp,ebp 鎭㈠esp
聽聽pop ebp
聽聽ret 8聽cdecl璋冪敤瑙勮寖
int function (int a ,int b) // 涓嶅姞淇グ灝辨槸C璋冪敤綰﹀畾
聽聽int __cdecl function(int a,int b) // 鏄庣‘鎸囧嚭C璋冪敤綰﹀畾璋冪敤澶?br /> 聽聽push 1
聽聽push 2
聽聽call function
聽聽add esp,8 娉ㄦ剰錛氳繖閲岃皟鐢ㄨ呭湪鎭㈠鍫嗘爤
聽聽琚皟鐢ㄥ嚱鏁癬function澶?br /> 聽聽push ebp 淇濆瓨ebp瀵勫瓨鍣紝璇ュ瘎瀛樺櫒灝嗙敤鏉ヤ繚瀛樺爢鏍堢殑鏍堥《鎸囬拡錛屽彲浠ュ湪鍑芥暟閫鍑烘椂鎭㈠
聽聽mov ebp,esp 淇濆瓨鍫嗘爤鎸囬拡
聽聽mov eax,[ebp + 8H] 鍫嗘爤涓璭bp鎸囧悜浣嶇疆涔嬪墠渚濇淇濆瓨鏈塭bp,cs:eip,a,b,ebp +8鎸囧悜a
聽聽add eax,[ebp + 0CH] 鍫嗘爤涓璭bp + 12澶勪繚瀛樹簡b
聽聽mov esp,ebp 鎭㈠esp
聽聽pop ebp
聽聽ret 娉ㄦ剰錛岃繖閲屾病鏈変慨鏀瑰爢鏍?/font>int sprintf(char* buffer,constchar* format,...)
聽fastcall璋冪敤瑙勮寖
1) 鍑芥暟鐨勭涓涓拰絎簩涓狣WORD鍙傛暟錛堟垨鑰呭昂瀵告洿灝忕殑錛夐氳繃ecx鍜宔dx浼犻掞紝鍏朵粬鍙傛暟閫氳繃浠庡彸鍚戝乏鐨勯『搴忓帇鏍堬紱
2) 琚皟鐢ㄥ嚱鏁版竻鐞嗗爢鏍堬紱
3) 鍑芥暟鍚嶄慨鏀硅鍒欏悓stdcall銆?/font>聽thiscall璋冪敤瑙勮寖
1) 鍙傛暟浠庡彸鍚戝乏鍏ユ爤錛?br /> 2) 濡傛灉鍙傛暟涓暟紜畾錛宼his鎸囬拡閫氳繃ecx浼犻掔粰琚皟鐢ㄨ咃紱濡傛灉鍙傛暟涓暟涓嶇‘瀹氾紝this鎸囬拡鍦ㄦ墍鏈夊弬鏁板帇鏍堝悗琚帇鍏ュ爢鏍堬紱
3) 瀵瑰弬鏁頒釜鏁頒笉瀹氱殑錛岃皟鐢ㄨ呮竻鐞嗗爢鏍堬紝鍚﹀垯鍑芥暟鑷繁娓呯悊鍫嗘爤銆?/font>
class A
{
public:
int function1(int a,int b);
int function2(int a,...);
};
int A::function1 (int a,int b)
{
return a+b;
}
int A::function2(int a,...)
{
va_list ap;
va_start(ap,a);
int i;
int result = 0;
for(i = 0 ; i < a ; i ++)
{
result += va_arg(ap,int);
}
return result;
}
void callee()
{
A a;
a.function1(1,2);
a.function2(3,1,2,3);
}// 鍑芥暟function1璋冪敤
聽聽0401C1D push 2
聽聽00401C1F push 1
聽聽00401C21 lea ecx,[ebp-8]
聽聽00401C24 call function1 娉ㄦ剰錛岃繖閲宼his娌℃湁琚叆鏍?br /> 聽聽// 鍑芥暟function2璋冪敤
聽聽00401C29 push 3
聽聽00401C2B push 2
聽聽00401C2D push 1
聽聽00401C2F push 3
聽聽00401C31 lea eax,[ebp-8] 榪欓噷寮曞叆this鎸囬拡
聽聽00401C34 push eax
聽聽00401C35 call function2
聽聽00401C3A add esp,14h聽naked call璋冪敤瑙勮寖
聽__declspec(naked) int add(int a,int b)
聽聽聽{
聽聽聽聽聽聽聽__asm mov eax,a
聽聽聽聽聽聽聽__asm add eax,b
聽聽聽聽聽聽聽__asm ret
聽聽聽}聽聽聽mov eax,[ebp+8]
add eax,[ebp+12]
ret 8聽__declspec(naked) int __stdcall function(int a,int b)
聽聽聽{
聽聽聽聽聽聽聽__asm mov eax,a
聽聽聽聽聽聽聽__asm add eax,b
聽聽聽聽聽聽聽__asm ret 8//娉ㄦ剰鍚庨潰鐨?
聽聽聽}聽鍑芥暟璋冪敤綰﹀畾瀵艱嚧鐨勫父瑙侀棶棰?/font>
1) 鍑芥暟鍘熷瀷澹版槑鍜屽嚱鏁頒綋瀹氫箟涓嶄竴鑷?br /> 2) DLL瀵煎叆鍑芥暟鏃跺0鏄庝簡涓嶅悓鐨勫嚱鏁扮害瀹?/font>
]]>
C++璧勬簮涔嬩笉瀹屽叏瀵煎紩錛堝畬鏁寸増錛?/font>
鎵鏈夈?/p>
--------
瀛︿笉浼氣濈殑鏃犲銆係tan Lippman鍏堢敓鏇懼湪銆奀++ Primer銆嬩竴涔︿腑鎸囧嚭鈥淐++鏄渶涓洪毦
瀛︾殑楂樼駭紼嬪簭璁捐璇█涔嬩竴鈥濓紝浜轟滑甯稿皢鈥滀箣涓鈥濆幓鎺変互琛ㄨ揪鑷繁瀵笴++鐨勬暚鐣忋傝瘹
鐒訛紝C++紼嬪簭璁捐璇█瀵逛簬瀛︿範鑰呯殑紜湁寰堝闅句互閫捐秺鐨勯縛娌燂紝浣撶郴緇撴瀯鐨勫簽澶э紝搴?br />鎺ヤ笉鏆囧茍涓嶆柇鎵╁厖鐨勭壒鎬р︹﹂櫎姝や箣澶栵紝鍙傝冭祫鏂欎箣澶氫笌鍐楁潅浣垮畠鐨勫涔犺呮湜鑰屽嵈
姝ワ紝嬈叉眰娣卞叆鑰呰嫤涓嶅牚璦銆傚笇鏈涜繖涓浠戒笉瀹屽叏瀵煎紩鑳藉鎴愪負鎮–++瀛︿範涔嬭礬涓婄殑寮曡礬
鐏?/p>
鍙蹭笌鍏跺墠鏈熷彂灞曚腑璇稿鎶鏈殑婕斿彉錛屼綘搴斿綋鍘誨弬鑰傿jarne鐨勩奣he Design and Evo
lution of C++銆嬨傚綋鐒朵篃涓嶆墦綆楃粰澶у涓涓棤鎵涓嶅寘鐨勫疂鍏革紙騫墮潪涓嶆兂錛氬叾涓鏄洜
姘村鉤鏈夐檺錛屽叾浜屾棤濂圕++涔嬪崥澶х簿娣憋級錛屾墍緇欏嚭鐨勪粎浠呮槸涓浜涙垜浠涓哄浜庢兂瀛︿範C
++鐨勫箍澶ц鑰呮潵璇存渶閲嶈騫朵笖瑙︽墜鍙強鐨勫紑鍙戜笌瀛︿範璧勬簮銆?/p>
鎵瑁ㄧ泭銆?/p>
--------
闂ㄧ浉褰撳鏉傜殑璇█錛屾墍浠ョ紪璇戝櫒涔熼毦浜庢瀯寤恒傜洿鍒版渶榪戞垜浠墠寮濮嬭兘澶熶嬌鐢ㄤ笂瀹屽叏
絎﹀悎C++鏍囧噯鐨勭紪璇戝櫒錛堝摝錛屼綘鍙兘浼氳矗鎬偅浜涚紪璇戝櫒鍘傚晢涓嶈兘灝芥棭鐨勬彁渚涚鍚堟爣鍑?br />鐨勭紪璇戝櫒錛岃繖鍙兘鎬粬浠悇鑷淮緋葷潃鑷韓鐨勪竴濂楀埆浜轟笉鎰挎帴鍙楃殑鏍囧噯錛夈備粈涔堬紵浣?br />璇磋繖鏃犲叧绱ц錛熷摝錛屼笉錛屼綘鎵闇瑕佺殑鏄拰鏍囧噯鍖朇++楂樺害鍏煎鐨勭紪璇戠幆澧冦傞暱榪滄潵鐪?br />錛屽彧鏈夎繖鏍風殑緙栬瘧鍣ㄥC++寮鍙戜漢鍛樻潵璇存墠鏄渶鏈夋剰涔夌殑宸ュ叿錛屽挨鍏舵槸瀵逛簬紼嬪簭璁捐
璇█鐨勫涔犺呫備竴鑷蟲ц浠g爜鍏峰鍙Щ妞嶆э紝騫惰涓闂ㄨ璦鍙婂叾搴撶殑搴旂敤鏇翠負騫挎硾
銆傚棷錛屾槸鐨勶紝鎴戜滑榪欓噷鍙墦綆椾粙緇嶄竴浜涘叕璁ょ殑浼樼緙栬瘧鍣ㄣ?/p>
緙栬瘧鍣ㄣ傦紙鍝︼紝鎴戜箣鎵浠ュ皢涔嬪垎涓轟袱縐嶅紑鍙戠幆澧冧綘搴斿綋鑳芥槑鐧戒負浠涔堬紝姝eDelphi
7鍒癉elphi8鐨勮漿鍙橈紝鏄潻鍛芥х殑涓や唬銆傦級Borland C++鐢辮佺墝寮鍙戝伐鍏峰巶鍟咮orland
鍊懼姏鎵撻犮傝鍏徃鐨勭紪璇戝櫒绱犱互閫熷害蹇紝絀洪棿鏁堢巼楂樿憲縐幫紝Borland C++ 緋誨垪緙栬瘧
鍣ㄧ鎵夸簡榪欎釜浼犵粺錛屽睘浜庨潪甯鎬紭璐ㄧ殑緙栬瘧鍣ㄣ傛爣鍑嗗寲鏂歸潰鏃╁湪5.5鐗堟湰鐨勭紪璇戝櫒涓
鏍囧噯鍖朇++鐨勫吋瀹瑰氨杈懼埌浜?2.73%銆傜洰鍓嶆渶鏂扮増鏈槸Borland C++ Builder X涓殑6.
0鐗堟湰錛屽畼鏂圭О100%絎﹀悎ANSI/ISO鐨凜++鏍囧噯浠ュ強C99鏍囧噯銆傚棷鈥﹁繖姝f槸鎴戝墠闈㈡墍鎸囩殑
鈥滃畬鍏ㄧ鍚圕++鏍囧噯鐨勭紪璇戝櫒鈥濄?/p>
005 Whidbey涓甫鐨凜++緙栬瘧鍣ㄣ傜敱Microsoft鍏徃鐮斿埗銆傚湪Visual Studio 6.0涓紝
鍥犱負緙栬瘧鍣ㄦ湁澶鍦版柟涓嶈兘涓庡悗鏉ュ嚭鐜扮殑C++鏍囧噯鐩稿惢鍚堣岄ケ鍙楁壒璇勶紙鎯蟲兂浣犲湪浣跨敤
STL鐨勬椂鍊欑紪璇戞椂鎶ュ嚭鐨勯偅浜涗護浜哄帉鎭剁殑error鍜寃arning鍚э級銆俈C++6.0瀵規爣鍑嗗寲C+
+鐨勫吋瀹瑰彧鏈?3.43%銆備絾鏄殢鐫C++緙栬瘧鍣ㄨ璁″ぇ甯圫tanley Lippman浠ュ強璇稿C++紺?br />緹よ揪浜虹殑鍔犵洘錛屽湪Visual Studio.NET 2003涓紝Visual C++緙栬瘧鍣ㄥ凡緇忔垚涓轟竴涓潪
甯告垚鐔熷彲闈犵殑C++緙栬瘧鍣ㄤ簡銆侱r.Dobb's Journal鐨勮瘎嫻嬫樉紺篤isual C++7.1瀵規爣鍑咰
++鐨勫吋瀹規ч珮杈?8.22%錛屼竴搴︽垚涓篊BX涔嬪墠鍏煎鎬ф渶濂界殑緙栬瘧鍣ㄣ傜粨鍚堝己澶х殑Visua
l Studio.NET寮鍙戠幆澧冿紝鏄竴涓潪甯鎬笉閿欑殑閫夋嫨銆傝嚦浜嶹hidbey鏃朵唬鐨刅isual C++,
浼間箮寰蔣鎵鏈鍏蟲敞鐨勬槸C++/CLI鈥︹︽垜浠笉鎯寵瘎璁哄井杞笅涓浠g殑C++緙栬瘧鍣ㄥ鏍囧噯鍖?br />鍏煎濡備綍錛屼絾浠栫‘瀹炶秺鏉ヨ秺閫傚悎.NET (鍏跺疄浣犲拰鎴戠殑鎰熻鍙兘鏄竴鏍風殑錛屽井杞笉搴?br />褰撴妸鏍囧噯C++榪欏潡鑲ヨ倝涓㈢粰Borland,鐒惰屽井杞彲鑳藉茍涓嶈繖鏍瘋涓?銆?/p>
甯稿ソ鐨勭Щ妞嶆э紝浣犲彲浠ュ湪闈炲父騫挎硾鐨勫鉤鍙頒笂浣跨敤瀹冿紝鍚屾椂涔熸槸緙栧啓璺ㄥ鉤鍙幫紝宓屽叆寮?br />紼嬪簭寰堝ソ鐨勯夋嫨銆傚彟澶栧湪絎﹀悎鏍囧噯榪欎釜鏂歸潰涓鐩撮兘闈炲父濂斤紝GCC3.3澶ф鑳藉杈懼埌96
.15%銆備絾鏄敱浜庡叾璺ㄥ鉤鍙扮殑鐗規э紝鍦ㄤ唬鐮佸昂瀵擱熷害絳変紭鍖栦笂鐣ュ井宸竴鐐廣?/p>
--------
澧冿紝騫舵病鏈夊寘鎷竴浜涘皬鍨嬬殑錛岀綍瑙佺殑IDE銆傚叾涓換浣曚竴嬈鵑兘鏄姛鑳戒赴瀵岋紝鍙互鐢ㄤ綔鏃?br />甯稿紑鍙戜嬌鐢ㄧ殑銆傚浜庝笉鍚屽眰闈㈢殑寮鍙戣咃紝璇峰弬瑙佸唴鏂囧叧浜庨傜敤瀵硅薄鐨勬弿榪般?/p>
Studio.NET鐨勫簽澶ц韓韜紝浠ュ強鍒濆鑰呭茍涓嶉偅涔堥珮鐨勫姛鑳借姹傦紝鎵浠ユ帹鑽愯繖涓紑鍙戠幆
澧冪粰C++鐨勫垵瀛﹁咃紝渚涘叾瀛︿範C++鐨勬渶鍩烘湰鐨勯儴鍒嗭紝姣斿C鐨勯偅閮ㄥ垎瀛愰泦錛屽綋鐒朵綘鍒寚
鏈涗粬鑳藉鏀寔鏈鏂扮殑C99鏍囧噯銆傚湪鏃ュ父鐨勫紑鍙戜腑錛屼粛鐒舵湁寰堝鍏徃浣跨敤榪欎釜緇忓吀紼沖畾
鐨勭幆澧冿紝姣斿絎旇呭氨鐪嬫浘浜茶鏈変簺鍏徃灝嗗叾緙栬瘧鍣ㄦ浛鎹負GCC鍋氭墜鏈哄紑鍙戜箣鐢ㄣ?/p>
鍔熻兘銆傜粨鍚堝叾鏈鏂扮殑C++緙栬瘧鍣ㄣ傚浜庢満鍣ㄩ厤緗瘮杈冨ソ鐨勫紑鍙戜漢鍛樻潵璇達紝浣跨敤榪欎釜寮
鍙戠幆澧冨皢鑳芥弧瓚沖叾澶ч儴鍒嗙殑瑕佹眰銆傝繖閲屼笉鎵撶畻鍗曠嫭璇碫isual Studio Whidbey,铏界劧
Visual Studio .NET 2005 - Whidbey紺懼尯棰勮鐗堝凡緇忔帹鍑猴紝浣嗘殏涓嶆槸寰堢ǔ瀹氾紝璇昏?br />鍙互浜茶韓鍘諱綋楠屻?/p>
鍐欑殑IDE錛岄熷害姣旇緝蹇傚畠鏈変竴涓緢瀹屽杽鐨凣UI紿椾綋璁捐鍣紝鍜孌elphi鍏辯敤涓涓猇CL銆?br />鐢變簬榪欎簺鐗圭偣錛屾瘮杈冮傚悎鍒濆鑰呬笂鎵嬨備絾鏄敱浜庡叾GUI鐨勪腑蹇冧綅緗紝鍙兘涓嶅埄浜庡浜?br />C++璇█鐨勫涔犮傝屼笖鍏朵負浜嗘敮鎸乂CL榪欎釜Object Pascal鍐欑殑搴撲篃瀵笴++榪涜浜嗕竴浜?br />縐佹湁鐨勬墿鍏呫備嬌寰椾漢浠湁涓涓笉寰椾笉鎺ュ彈鐨勪簨瀹烇細鈥淏orland C++ Builder 6鐨勯珮鎵?br />鍑犱箮閮芥槸Delphi楂樻墜鈥濄?/p>
澧冿紝C++BuilderX鍒欐槸瀹屽叏浠嶤++鐨勮搴︽濊冨緱鍑虹殑涓涓姛鑳戒赴瀵岀殑IDE銆傚叾鏈澶х殑鐗?br />鐐規槸璺ㄥ鉤鍙幫紝璺ㄧ紪璇戝櫒錛屽縐岶ramework鐨勯泦鎴愶紝騫朵笖鏈変竴涓猈xWindows涓哄熀紜鐨凣U
I璁捐鍣ㄣ傚挨鍏舵槸閲囩敤浜嗙函C++鏉ラ噸鍐欎簡鏁翠釜Framework,鎽掑純浜嗕互鍓嶄護浜烘棤濂堢殑鐗堟湰
銆傚浜嶤++鐨勫紑鍙戞潵璇達紝浠庣紪璇戝櫒錛屽埌搴擄紝鍒板姛鑳介泦鎴愰兘鏄潪甯哥悊鎯崇殑銆傚彲浠ラ瑙侊紝
Borland C++ Builder X 2.0寰堝煎緱C++鐖卞ソ鑰呮湡寰呫傚敮涓浠や漢闅懼牚涔嬪鏄綔涓轟竴涓?br />C++鐨勫紑鍙戝伐鍏鳳紝鍏禝DE鏄敤Java鍐欑殑錛屽湪閰嶇疆涓嶅鐞嗘兂鐨勬満鍣ㄤ笂璇鋒厧閲嶈冭檻鍐嶅畨瑁?br />銆?/p>
搴忥紝浣犵殑姘村鉤搴旇瓚沖鎸囧鎴戜滑鏉ュ啓榪欑瘒闄嬫枃浜嗐?/p>
鏃跺欙紝GCC灝辨槸涓涓Windows涓嬪紑鍙戣呮祦鍙f按鐨勭紪璇戝櫒銆侱ev-C++灝辨槸鑳藉璁〨CC璺?br />鍦╓indows涓嬬殑宸ュ叿錛屼綔涓洪泦鎴愬紑鍙戠幆澧冿紝榪樻彁渚涗簡鍚屼笓涓欼DE鐩稿緹庣殑璇硶楂樹寒錛?br />浠g爜鎻愮ず錛岃皟璇曠瓑鍔熻兘銆傜敱浜庝嬌鐢―elphi寮鍙戯紝鍗犵敤鍐呭瓨灝戯紝閫熷害寰堝揩錛屾瘮杈冮傚悎
杞婚噺綰х殑瀛︿範鍜屼嬌鐢ㄣ?/p>
鐨勭鐗┿傝鍏剁濂囨槸鍥犱負錛屽畠鏈韓鏄敤Java鍐欑殑錛屼絾鏄嫢鏈夋瘮涓鑸琂ava鍐欑殑紼嬪簭蹇?br />寰楀鐨勯熷害銆傝屼笖鍥犱負鍏跺熀浜庢彃浠剁粍瑁呬竴鍒囩殑鍘熷垯錛屼嬌寰楄兘澶熸湁CDT榪欐牱鐨勬彃浠舵妸E
clipse鍙樻垚涓涓狢/C++鐨勫紑鍙戠幆澧冦傚鏋滀綘涓鐩寸敤Eclipse鍐橨ava鐨勭▼搴忥紝涓嶅Θ鐢ㄥ畠
浣撻獙涓涓婥++寮鍙戠殑涔愯叮銆?/p>
--------
鎴栬呯粍浠朵駭鐢熷噯紜殑鏂囨。銆侱oc-O-Matic浣跨敤婧愪唬鐮佷腑鐨勭鍙峰拰娉ㄩ噴浠ュ強澶栭儴鐨勬枃妗?br />鏂囦歡鍒涘緩涓庢祦琛岀殑鏂囨。鏍峰紡涓鑷寸殑鏂囨。銆?/p>
涓殑綾誨眰嬈$粨鏋勩侱ocVizor蹇熷湴浜х敓瀹屾暣鍙緵鎵撳嵃鐨勭被灞傛緇撴瀯鍥撅紝鍖呮嫭浠庣涓?br />鏂瑰簱涓潵鐨勯偅浜涚被錛岄櫎姝や箣澶朌ocVizor榪樿兘浠庣被淇℃伅涓駭鐢烪TML鏂囦歡銆?/p>
++浠g爜鐨勯噸鏋勮兘澶熷敖鍙兘鐨勬湁鏁堢巼鍜岀畝鍗曘?/p>
鎻愬嚭璀﹀憡淇℃伅銆?/p>
C++鐨勭被銆?/p>
鏄啀嬈$紪璇戙?/p>
娣誨姞浜嗗multimethod鐨勬敮鎸併?/p>
鏁板弬鏁般傚畠鏄竴涓紪璇戝櫒鐨勫澹熾?/p>
縐鐨勫紑婧愭祴璇曟鏋躲侰ppUnit 鍜?JUnit 涓鏍蜂富瑕佹濇兂鏉ユ簮浜庢瀬闄愮紪紼嬨備富瑕佸姛鑳藉氨
鏄鍗曞厓嫻嬭瘯榪涜綆$悊錛屽茍鍙繘琛岃嚜鍔ㄥ寲嫻嬭瘯銆?/p>
銆銆(3) Cantata++
灞曞崟鍏冩祴璇曞拰闆嗘垚嫻嬭瘯鐨勯渶姹?
yplus/index.shtml
o鍐呰嚜鍔ㄥ寲璋冭瘯榪囩▼鍔犻熷紑鍙戝茍涓旂緝鐭笂甯傜殑鍛ㄦ湡銆侭oundsChecker鎻愪緵娓呮錛岃緇?br />鐨勭▼搴忛敊璇垎鏋愶紝璁稿鏄C++鐙湁鐨勫茍涓斿湪static錛宻tack鍜宧eap鍐呭瓨涓嫻嬪拰璇?br />鏂敊璇紝浠ュ強鍙戠幇鍐呭瓨鍜岃祫婧愮殑娉勬紡銆傘銆(6) Insure++
鍙戣呮彁渚涘畬鏁寸殑閿欒璇婃柇錛屽拰榪愯鏃舵ц兘鍒嗘瀽宸ュ叿鍖呫?/p>
璇?/p>
--------
錛岀洿鍒版爣鍑嗙殑鍑哄彴鎵嶆寮忓畾鍨嬶紝浣嗘槸鍦ㄦ爣鍑嗗簱鐨勫疄鐜頒笂鍗村緢浠や漢嬈f叞寰楃湅鍒板縐嶅疄
鐜幫紝騫朵笖宸茶瀹炶返璇佹槑涓烘湁宸ヤ笟綰у埆寮哄害鐨勪匠浣溿?/p>
鍏禣EM鐨刲icense錛屽湪鍏禖/C++鐨勪駭鍝佷腑閲囩敤Dinkumware鐨勫簱銆?/p>
瀵規爣鍑咰++鐨勫己璋冿紝鏄紪鍐欏鉤鍙版棤鍏籌紝鐜頒唬C++鐨勫紑鍙戣呭繀澶囩殑宸ュ叿銆備絾鏄疊oost涓篃
鏈夊緢澶氭槸瀹為獙鎬ц川鐨勪笢瑗匡紝鍦ㄥ疄闄呯殑寮鍙戜腑瀹炵敤闇瑕佽皚鎱庛傚茍涓斿緢澶欱oost涓殑搴撳姛
鑳藉牚縐板璇█鍔熻兘鐨勬墿灞曪紝鍏舵瀯閫犵敤灝界簿宸х殑鎵嬫硶錛屼笉瑕佽錘鐒剁殑鑺辮垂鏃墮棿鐮旇銆侭o
ost鍙﹀涓闈紝姣斿Graph榪欐牱鐨勫簱鍒欐槸鍏鋒湁宸ヤ笟寮哄害錛岀粨鏋勮壇濂斤紝闈炲父鍊煎緱鐮旇鐨?br />綺懼搧浠g爜錛屽茍涓斾篃鍙互鏀懼績鐨勫湪浜у搧浠g爜涓澶氬埄鐢ㄣ?/p>
鍙戜腑錛孏UI搴撶殑閫夋嫨涔熸槸闈炲父閲嶈鐨勪竴浠朵簨鎯咃紝涓嬮潰鎴戜滑緇艱堪涓涓嬪彲閫夋嫨鐨凣UI搴擄紝
鍚勮嚜鐨勭壒鐐逛互鍙婄浉鍏沖伐鍏風殑鏀寔銆?/p>
ws API 涔嬩笂錛岃兘澶熶嬌紼嬪簭鍛樼殑宸ヤ綔鏇村鏄?緙栫▼鏁堢巼楂橈紝鍑忓皯浜嗗ぇ閲忓湪寤虹珛 Windo
ws 紼嬪簭鏃跺繀欏葷紪鍐欑殑浠g爜錛屽悓鏃跺畠榪樻彁渚涗簡鎵鏈変竴鑸?C++ 緙栫▼鐨勪紭鐐癸紝渚嬪緇ф壙
鍜屽皝瑁呫侻FC 緙栧啓鐨勭▼搴忓湪鍚勪釜鐗堟湰鐨刉indows鎿嶄綔緋葷粺涓婃槸鍙Щ妞嶇殑錛屼緥濡傦紝鍦?br />Windows 3.1涓嬬紪鍐欑殑浠g爜鍙互寰堝鏄撳湴縐繪鍒?Windows NT 鎴?Windows 95 涓娿備絾
鏄湪鏈榪戝彂灞曚互鍙婂畼鏂規敮鎸佷笂鏃ユ笎鍔垮井銆?/p>
寰堝鏄撴墿灞曪紝騫朵笖鍏佽鐪熸鍦扮粍浠剁紪紼嬨傝嚜浠?996騫存棭浜涙椂鍊欙紝Qt榪涘叆鍟嗕笟棰嗗煙錛?br />瀹冨凡緇忔垚涓哄叏涓栫晫鑼冨洿鍐呮暟鍗冪鎴愬姛鐨勫簲鐢ㄧ▼搴忕殑鍩虹銆俀t涔熸槸嫻佽鐨凩inux妗岄潰鐜?br />澧僈DE 鐨勫熀紜錛屽悓鏃跺畠榪樻敮鎸乄indows銆丮acintosh銆乁nix/X11絳夊縐嶅鉤鍙般?/p>
鍣ㄥ氨鏄熀浜庤繖涓簱鐨勩?/p>
璇ユ槸浠涔堟牱瀛愮殑鎰熷彈鍑哄彂錛屼粠鑰屽紑濮嬩簡瀵硅繖涓簱鐨勫紑鍙戙傛湁鍏磋叮鐨勫彲浠ュ皾璇曚竴涓嬨?/p>
銆銆(5) WTL
瀵革紝浠ュ強閫熷害浼樺寲鏂歸潰鍋氬緱闈炲父鍒頒綅銆備富瑕侀潰鍚戠殑浣跨敤緹や綋鏄紑鍙慍OM杞婚噺綰т緵緗戠粶
涓嬭澆鐨勫彲瑙嗗寲鎺т歡鐨勫紑鍙戣呫?/p>
聽Communication Environment錛夋槸鍙互鑷敱浣跨敤銆佸紑鏀炬簮浠g爜鐨勯潰鍚戝璞℃鏋訛紝鍦?br />鍏朵腑瀹炵幇浜嗚澶氱敤浜庡茍鍙戦氫俊杞歡鐨勬牳蹇冩ā寮忋侫CE鎻愪緵浜嗕竴緇勪赴瀵岀殑鍙鐢–++鍖?br />瑁呭瑙傦紙Wrapper Facade錛夊拰妗嗘灦緇勪歡錛屽彲璺ㄨ秺澶氱騫沖彴瀹屾垚閫氱敤鐨勯氫俊杞歡浠誨姟
錛屽叾涓寘鎷細浜嬩歡澶氳礬鍒嗙鍜屼簨浠跺鐞嗗櫒鍒嗘淳銆佷俊鍙峰鐞嗐佹湇鍔″垵濮嬪寲銆佽繘紼嬮棿閫?br />淇°佸叡浜唴瀛樼鐞嗐佹秷鎭礬鐢便佸垎甯冨紡鏈嶅姟鍔ㄦ侊紙閲嶏級閰嶇疆銆佸茍鍙戞墽琛屽拰鍚屾錛岀瓑
絳夈?/p>
tml
銆俋ML楠岃瘉鍦ㄦ枃妗g被鍨嬪畾涔?Document Type Definition錛孌TD)鏂歸潰鏈夊緢濂界殑鏀寔錛?br />騫朵笖鍦?001騫?2鏈堝鍔犱簡鏀寔W3C XML Schema 鐨勫熀鏈畬鏁寸殑寮鏀炬爣鍑嗐?/p>
鐢熺浉搴旂殑GUI紼嬪簭鏉ヤ慨鏀硅繖涓猵arser銆傚湪DOM鍜孲AX涓ゅぇ涓繪祦XML瑙f瀽鍔炴硶涔嬪鎻愪緵浜?br />鍙﹀涓涓彲琛岀殑瑙e喅鏂規銆?/p>
r錛岃繖涓獂pp鎶婅繖灞傛毚闇插嚭鏉ョ洿鎺ョ粰澶у浣跨敤銆傚湪瑕佸厖鍒嗚冭檻閫熷害鐨勬椂鍊欏煎緱灝濊瘯銆?/p>
銆銆(4) Xalan
OM鍜孲AX涔嬪瀵繪眰涓鐐圭伒鎰熴?/p>
鐨勬暟鍊肩▼搴忥紝姣?Fortran鎱?0%宸﹀彸錛屽洜姝litz++姝f槸瑕佹敼鎺夎繖涓己鐐廣傛柟娉曟槸鍒?br />鐢–++鐨則emplate鎶鏈紝紼嬪簭鎵ц鐢氳嚦鍙互姣擣ortran鏇村揩銆侭litz++鐩墠浠嶅湪鍙戝睍涓?br />錛屽浜庡父瑙佺殑SVD錛孎FTs錛孮MRES絳夊父瑙佺殑綰挎т唬鏁版柟娉曞茍涓嶆彁渚涳紝涓嶈繃浣跨敤鑰呭彲浠?br />寰堝鏄撳湴鍒╃敤Blitz++鎵鎻愪緵鐨勫嚱鏁版潵鏋勫緩銆?/p>
璞¤璁℃柟渚夸簡蹇熺殑紼嬪簭寮鍙戯紝瀵瑰茍琛屾満鍣ㄨ繘琛屼簡浼樺寲浠ヨ揪鍒版渶楂樼殑鏁堢巼錛屾柟渚垮湪
宸ヤ笟鍜岀爺絀剁幆澧冧腑浣跨敤銆?/p>
鐭╅樀鐨勫ぇ閲忕嚎鎬т唬鏁版柟闈㈢殑鍔熻兘銆傚湪鏌愪簺搴旂敤浣跨敤楂樻ц兘緙栬瘧鍣ㄧ殑鎯呭喌涓嬶紝姣斿In
tel鐨勭紪璇戝櫒錛屼粠浜х敓鐨勬眹緙栦唬鐮佸彲浠ョ湅鍑哄叾涓庢墜鍐欏嚑涔庢病鏈変袱鏍風殑鏁堣兘銆?/p>
閮ㄥ垎閲嶈鐨勮В鍐蟲柟妗堝拰鏂規硶浠++搴撶殑褰㈠紡鎻愪緵緇欏伐涓氬拰瀛︽湳鐣岀殑鐢ㄦ埛銆?/p>
B,浠ュ強S3M錛夛紝鎺у埗鎺ュ彛錛堥敭鐩橈紝榧犳爣鍜岄仴鎰燂級錛孹MS銆?/p>
鍏堢敓涓轟腑鍥芥父鎴忓紑鍙戜簨涓氭墍鍋氬嚭鐨勮礎鐚?/p>
銆傚畠鐨勭洰鐨勬槸璁╁紑鍙戣呰兘鏇存柟渚垮拰鐩存帴鍦板紑鍙戝熀浜?D紜歡璁懼鐨勫簲鐢ㄧ▼搴忔垨娓告垙銆?br />寮曟搸涓殑綾誨簱瀵規洿搴曞眰鐨勭郴緇熷簱錛堝錛欴irect3D鍜孫penGL錛夌殑鍏ㄩ儴浣跨敤緇嗚妭榪涜浜?br />鎶借薄錛屽茍鎻愪緵浜嗗熀浜庣幇瀹炰笘鐣屽璞$殑鎺ュ彛鍜屽叾瀹冪被銆?/p>
涓緢闅劇湅鍒扮殑澶ч噺鐨勭嚎紼嬫柟闈㈢殑鍔熻兘銆?/p>
浠g爜錛屽茍涓旀敮鎸佸綰跨▼鐜鍜孶nicode錛屽悓鏃惰繕鏈夋鍒欒〃杈懼紡鐨勬敮鎸併?/p>
鏈哄埗錛宨/o緋葷粺鍖呮嫭鍩轟簬鎻掍歡鐨勭綉緇滃崗璁忔槑鐨刬/o鏋舵瀯錛屽熀浜庢彃浠剁殑搴旂敤紼嬪簭娑堟伅
鏃ュ織妗嗘灦錛岃闂畇ql鏁版嵁搴撶殑綾葷瓑絳夈?/p>
綰跨▼錛孶nicode錛屽簾鏂欐敹闆嗭紝I/O錛岀綉緇滐紝瀹炵敤宸ュ叿錛孹ML錛岀瓑絳夛級錛屼互鍙婂Java, P
erl, Python, TCL, Lisp, COM 鍜?CORBA鐨勯泦鎴愩?/p>
搴撴潵鎻愪緵銆傚悓鏃惰繕鎻愪緵浜嗘櫤鑳芥寚閽堣繖鏍鋒瘮杈冨疄鐢ㄧ殑鍔熻兘銆?/p>
璁炬柦銆?/p>
甯圥eter Norvig鍦?鈥淭each Yourself Programming in Ten Years鈥濅竴鏂囦腑灝卞皢鍑?br />鏁板紡璇█鍒椾負鑷沖皯搴斿綋瀛︿範鐨?綾葷紪紼嬭璦涔嬩竴銆?/p>
--------
鍏堢敓鍦ㄣ婄▼搴忓憳銆嬫潅蹇椾笂鎾版枃銆奀++紼嬪簭璁捐涔嬪洓涔︿簲緇忋嬩篃灝嗘湰棰嗗煙鍐呭嚑涔庢墍鏈夌殑
緇忓吀涔︾睄浣滀簡鍏ㄩ潰鐨勪粙緇?浠諱綍鍏充簬涔︾殑璇勮姝ゆ椂鐪嬫潵渚挎槸寰堝浣欑殑浜嗐備釜浜烘祬瑙侊紝
闄ら潪浣犳墦綆椾互C++浣滀負鍞竴鍏磋叮鎴栬呯敓瀛樹箣鏈紝涓鑸鑰呯‘瀹炴病鏈夎凍澶熺殑鏃墮棿鍜屽繀瑕?br />灝?0浣欐湰涔︾睄鍏ㄩ儴闃呰銆傛洿鏈夊弬鑰冧環鍊肩殑鏄崳鑰鍏堢敓鐨勫彟涓綃囨枃绔狅細銆婅嚦灝戝簲璇ラ槄
璇葷殑涔濇湰C++钁椾綔銆嬶紝鍙互浠庝笅闈㈢殑鍦板潃嫻忚鍒版鏂囷細
鏈功鍐呭鏇翠負鍏ㄩ潰錛屾洿涓鴻緇嗘槗鎳傦紝鎴戜滑縐板畠涓衡淐++鐨勮秴綰у疂鍏糕濆茍涓嶈繃鍒嗐傞厤鏈?br />涓鏈笉閿欑殑涔犻瑙g瓟銆奀++ Primer Answer Book銆嬪彲浠ヨ緟鍔╀綘鐨勫涔犱箣璺?/p>
鐨勫叏閮ㄤ富棰樸備功铏戒笉鍘氾紝鍐呭綺劇偧錛屼笉澶變負銆奀++ Primer銆嬭鑰呰尪浣欓キ鍚庣殑涓婚鍥?br />欏句箣浣溿?/p>
閫氱殑鎰熻錛屼絾鏈功紜疄涓嶅お閫傚悎鍒濆鑰呴槄璇匯傚鏋滀綘鑷涓烘槸涓鍚嶅緢鏈夌粡楠岀殑C++紼?br />搴忓憳錛岄偅鑷沖皯涔熻鍙嶅鍜鍤糂jarne鍏堢敓鎵寮鴻皟鐨勮嫢騫插唴瀹廣?/p>
C++楂樻墜銆傛垜浠篃鏋佸姏鎺ㄥ磭榪欎袱鏈憲浣溿傚湪鍚勭浠嬬粛C++涓撳緇忛獙鐨勪功綾嶉噷闈紝榪欎袱
鏈槸鏈璐磋繎璇█鏈川錛岀湅鍚庢渶鑳藉鏈夎劚鑳庢崲楠ㄦ劅瑙夌殑涔︼紝璇繪涔︿綘闇姣忔棩涓夌渷姹濊韓
銆?/p>
--------
鐨勭綉绔欎篃鍙互浣挎垜浠緱鍒版渶鏈変環鍊肩殑鍙傝冧笌鍊熼壌錛屼笅闈㈢殑浜虹墿鎴戜滑璁や負娌℃湁浠嬬粛鐨?br />蹇呰錛屽彧鍥犱笅闈㈢殑浜虹墿鍦–++棰嗗煙鐨勫湴浣嶄紬鎵鍛ㄧ煡錛屾垜浠彧灝嗙浉鍏崇殑璧勬簮榪涜緗楀垪浠?br />渚涜鑰呭涔狅紝浠栦滑鏈夌殑宸ヤ綔浜庤礉灝斿疄楠屽錛屾湁鐨勫伐浣滀簬鐭ュ悕緙栬瘧鍣ㄥ巶鍟嗭紝鏈夌殑鍦ㄤ笉
鏂帹榪涜璦鐨勬爣鍑嗗寲錛屾湁鐨勪負璇昏呮挵鍐欎簡澶氶儴鍗冨彜濂囦綔鈥︹?br />銆銆(1) Bjarne Stroustrup
銆銆http://www.research.att.com/~bs/
銆銆http://blogs.msdn.com/slippman/
銆銆涓枃鐗?http://www.zengyihome.net/slippman/index.htm
銆銆http://www.aristeia.com/
銆銆http://www.cs.rpi.edu/~musser/
銆銆http://www.bruceeckel.com
銆銆http://www.josuttis.com/
銆銆http://www.gotw.ca/
銆銆http://www.coderncppdesign.com/
銆銆http://www.jjhou.com
銆銆鍏堢敓綣佸繖浜庡伐浣滐紝鐥磋糠浜庢妧鏈紝鏆傛棤涓漢涓婚〉錛屽叧浜庡厛鐢熺殑浣滃搧鍙互閫氳繃CSDN
鐨勪笓鏍忓拰渚厛鐢熺殑涓婚〉璁塊棶鍒般?/p>
銆銆http://www.royaloo.com/
銆銆http://www.codeproject.com
銆銆http://www.codeguru.com
銆銆http://www.ddj.com
銆銆http://www.cuj.com
銆銆http://www.allaboutprogram.com
銆銆鍏朵粬璧勬枡
銆銆http://www.sunistudio.com/cppfaq/index.html
銆銆C/C++ 鏂伴椈緇勶細
銆銆浣犱笉濡ㄥ皾璇曚粠榪欓噷鎻愰棶鍜屽洖絳旈棶棰橈紝寰堝涓嶉敊鐨凲&A璧勬簮......
銆銆榪欎釜綆鍗曚簺錛屽鏋滀綘鍜屾垜涓鏍鋒槸涓彍楦?/p>
聽聽聽 鍡紝榪欎釜鏄劇劧姘村鉤楂樹竴浜?/p>
銆銆濡傛灉浣犻渶瑕佽璁烘爣鍑咰++鐩稿叧璇濋鐨勮瘽
--------
闅懼潕鍧風殑璧拌繃鏉ワ紝浣嗘槸鏃犺濡備綍C++宸茬粡鍙栧緱浜嗗伐涓氬熀紜鐨勫湴浣嶃傛枃绔犲垪涓劇殑澶ч噺鐩稿叧
璧勬簮灝辨槸鏈濂界殑璇佹槑錛岃屼笟鐣岀殑澶ч噺鐢–++鍐欐垚鐨勪駭鍝佷唬鐮佷互鍙婂ぇ閲忕殑C++鑱屼笟宸ョ▼
甯堝垯鏄渶鐩存帴鐨勮瘉鏄庛傚悓鏃訛紝鎴戜滑鍙互鐪嬪埌鍚勪釜楂樻牎鐨勮綆楁満涓撲笟閮藉紑璁炬湁C++榪欓棬
璇劇▼錛岀綉緇滀笂瀵逛簬C++鐨勫涔犺璁轟篃浠庢潵閮芥病鏈夊仠榪囥備絾鏄紝鍦↗ava鍜?NET涓ゅぇ浼佷笟
寮鍙戝鉤鍙扮殑鍥存敾涓嬶紝緇欎漢鐨勬劅瑙夋槸C++瓚婃潵瓚娾滀笉琛屸濅簡銆?/p>
鍏朵腑涓涓棶棰樻槸C++璇█鏈韓姣旇緝澶嶆潅錛屽涔犳洸綰挎瘮杈冮櫋宄紝鍙﹀涓涓棶棰樻槸C++鏍?br />鍑嗗寲鐨勬椂闂村お闀匡紝涓уけ浜嗗緢澶氱殑澹ぇ鏈轟細錛岃楄垂浜嗗緢澶氱簿鍔涘湪鍘傚晢鐨勪箣闂寸殑鏂椾簤涓?br />錛岃孋++鐨勬爣鍑嗗簱紱諱竴涓畬鍠勭殑紼嬪簭寮鍙戞鏋惰繕緙哄皯澶澶鐨勫唴瀹癸紝鍚勪釜絎笁鏂圭殑
綾誨簱鍜屾鏋跺張鍦ㄤ竴鑷存у拰瀹屾暣鎬т笂娌℃硶鍜岄殢騫沖彴鎻愪緵鐨勬鏋剁浉鎻愬茍璁恒傞毦閬揅++鐪熺殑
瑕侀鍑哄巻鍙茶垶鍙頒簡錛?/p>
鐨勫彂灞曢潪甯告椿璺冿紝瀵逛簬鏂版妧鏈柊鎬濈淮闈炲父嬋榪涳紝C++浠嶇劧騫挎硾鍙楀埌鍏蟲敞銆備粠ACE鍦ㄩ珮
鎬ц兘閫氫俊棰嗗煙鐨勫簲鐢紝浠ュ強MTL榪欐牱鐨勫簱鍦ㄦ暟鍊艱綆楅鍩熺殑鍑鴻壊琛ㄧ幇錛屾垜浠彲浠ョ湅鍒?br />C++鍦ㄩ珮鎬ц兘搴旂敤鍦哄悎涓嬬殑涓嶅彲鏇夸唬鐨勪綔鐢紝鑰屽祵鍏ュ紡緋葷粺榪欐牱鐨勫唴瀛樺彈闄愬紑鍙戝鉤鍙?br />錛屾瘮濡係ymbian OS涓婏紝C++宸茬粡鍙戞尌鐫騫朵笖灝嗗彂鎸ユ洿澶х殑浣滅敤銆傚彲浠ラ瑙佺殑鏄互鍚庣殑
杞歡鏃犺涓婂眰鐨勫簲鐢ㄦ庝箞鍙橈紝瀹冪殑搴曞眰鏍稿績閮戒細鏄敱C/C++榪欐牱鐨勭郴緇熺駭杞歡緙栧啓鐨?br />錛屾瘮濡侸ava铏氭嫙鏈猴紝.NET Framwork銆傚洜涓哄彧鏈夎繖鏍風殑緋葷粺綰ц蔣浠舵墠鑳藉畬鍏ㄥ交搴曠殑鍙?br />鎸ユ満鍣ㄧ殑鍔熻兘銆?/p>
絳夋湁娼滃姏鐨勮娉曞洜绱犳瀯閫犺秺鏉ヨ秺綺懼閥鐨勫簱鎴愪負浜嗙幇浠++鐨勭儹鐐癸紝铏界劧鍦ㄥ埄鐢ㄥ簱瀹炵幇
鏂扮殑緙栫▼鑼冨紡錛屼箖鑷寵璁℃ā寮忕瓑鏂歸潰寰堟湁寮鍒涙剰涔夛紝涔熺‘瀹炰駭鐢熶簡涓浜涜兘澶熶究鎹峰紑
鍙戠殑宸ュ叿錛屼絾鏄洿澶氱殑鏄妸C++鍙樺緱鏇村姞寮哄ぇ錛屾洿鍔犲鏉傦紝涔熸洿鍔犻毦鎳傦紝浼間箮涔熸洿鍔?br />瀛﹂櫌媧撅紝涓嶅緱涓嶈瀹冩鍦ㄥ悜杈圭紭鍖栭亾璺彂灞曘傚彟涓涓秼鍔挎槸C++鍦ㄤ富嫻佺殑浼佷笟搴旂敤寮
鍙戜腑宸茬粡閫愭笎閫鍑轟簡錛孍RP榪欐牱鐨勪紒涓氳蔣浠跺紑鍙戜腑鍩烘湰涓婁笉浼氳冭檻C++錛岄櫎闈為渶瑕佽?br />铏戞ц兘鎴栬呭拰閬楃暀浠g爜鐨勯泦鎴愯繖浜涘洜绱犮侰++閫瀹堝埌緋葷粺綰у埆璇█錛屾垚涓鴻蔣浠跺伐涓氱殑
鍩虹鏄ぇ鍔挎墍瓚嬨傜劧鑰屽弽鎬濅竴涓嬶紝鐪熺殑鏄瀹堜箞錛熻嚜浠嶴TL鍑虹幇錛屾棤鏁扮殑浜洪璧蜂簯娑?br />鐨勫紑濮嬫敮鎸丆++,浠栦滑鐙傚懠鈥滄垜鐪嬪埌娣卞娑堝け浜嗭紝鐩爣杞歡宸ョ▼鐨勫嚭鐜般傛垜鐪嬪埌浜嗗彲
緇存姢鐨勪唬鐮併傗濇槸鐨勶紝STL鍦ㄥ彲緇存姢鎬т笅鍋氬緱濡傛鍑鴻壊銆備絾鏄張鎬庢牱鍛紵STL涓篊++閾?br />騫充簡鐜頒唬杞歡宸ョ▼鐨勯亾璺紝鑰屽湪涓婂眰搴旂敤紼嬪簭杞歡寮鍙戦鍩熻繖鍧楀満鍦版棭涓嶅崟鐙睘浜?br />C++,寰堝紼嬪簭璁捐璇█閮藉仛寰楀緢鍑鴻壊錛岀柉鐙傜殑鏀寔鑰呬細姣笉鐘硅鮑鍦拌鎴戜滑搴斿綋鏀寔
C++,鍥犱負瀹冩槸涓栫晫涓婃渶媯掔殑璇█銆傝屽潶鐜囧湴璇達紝浣犵殑鑵版潌鐪熺殑閭d箞紜箞錛熶篃璁稿彧鏄?br />鍦ㄩ冮伩涓浜涗簨瀹炪侰++鏄紭縐鐨勶紝榪欎笉鍙惁璁わ紝STL鐨勫嚭鐜拌C++涓搴﹁蛋涓婁簡鏈杈夌厡鐨?br />鏃跺埢錛岀劧鑰岀幇鍦ㄧ湅鏉モ︹︽垜鐨勪竴浣嶆仼甯堟浘璦錛氱湡姝h兘澶熷皢STL搴旂敤寰楁穻婕撳敖鑷寸殑浜哄緢
淇濆畧鍦拌鍥藉唴涔熶笉瓚呰繃200浜猴紝鎴栬涓嶅姞鍏TL鑳藉浣緾++鍚戠潃瀹冨簲褰撳彂灞曠殑鏂瑰悜鍙戝睍
鐨勬洿濂斤紝鑰岀幇鍦ㄧ湅鏉ワ紝C++涔熷簲褰撳洖棣栧埌鐪熸灞炰簬浠栫殑閭d竴鐗囧湥鍦頒笂鈥︹?/p>
浣滆咃細
C++鐨?縐嶇被鍨嬭漿鎹?
涓銆丆 椋庢牸錛圕-style錛夊己鍒惰漿鍨嬪涓嬶細
聽聽聽 鍑芥暟椋庢牸錛團unction-style錛夊己鍒惰漿鍨嬩嬌鐢ㄨ繖鏍風殑璇硶錛?br />聽聽聽 T(expression) // cast expression to be of type T
聽聽聽 榪欎袱縐嶅艦寮忎箣闂存病鏈夋湰璐ㄤ笂鐨勪笉鍚岋紝瀹冪函綺瑰氨鏄竴涓妸鎷彿鏀懼湪鍝殑闂銆傛垜鎶婅繖涓ょ褰㈠紡縐頒負鏃ч鏍鹼紙old-style錛夌殑寮哄埗杞瀷銆?
銆銆const_cast(expression)
銆銆dynamic_cast(expression)
銆銆reinterpret_cast(expression)
銆銆static_cast(expression)
聽聽聽
路static_cast 鍙互琚敤浜庡己鍒墮殣鍨嬭漿鎹紙渚嬪錛宯on-const 瀵硅薄杞瀷涓?const 瀵硅薄錛宨nt 杞瀷涓?
double錛岀瓑絳夛級錛屽畠榪樺彲浠ョ敤浜庡緢澶氳繖鏍風殑杞崲鐨勫弽鍚戣漿鎹紙渚嬪錛寁oid*
鎸囬拡杞瀷涓烘湁綾誨瀷鎸囬拡錛屽熀綾繪寚閽堣漿鍨嬩負媧劇敓綾繪寚閽堬級錛屼絾鏄畠涓嶈兘灝嗕竴涓?const 瀵硅薄杞瀷涓?non-const 瀵硅薄錛堝彧鏈?
const_cast 鑳藉仛鍒幫級錛屽畠鏈鎺ヨ繎浜嶤-style鐨勮漿鎹€?br />聽聽聽
銆銆路const_cast 涓鑸敤浜庡己鍒舵秷闄ゅ璞$殑甯擱噺鎬с傚畠鏄敮涓鑳藉仛鍒拌繖涓鐐圭殑 C++ 椋庢牸鐨勫己鍒惰漿鍨嬨?
銆
銆鏃ч鏍肩殑寮哄埗杞瀷渚濈劧鍚堟硶錛屼絾鏄柊鐨勫艦寮忔洿鍙彇銆傞鍏堬紝鍦ㄤ唬鐮佷腑瀹冧滑鏇村鏄撹瘑鍒紙鏃犺鏄漢榪樻槸鍍?grep
榪欐牱鐨勫伐鍏烽兘鏄姝わ級錛岃繖鏍峰氨綆鍖栦簡鍦ㄤ唬鐮佷腑瀵繪壘綾誨瀷緋葷粺琚牬鍧忕殑鍦版柟鐨勮繃紼嬨傜浜岋紝鏇寸簿紜湴鎸囧畾姣忎竴涓己鍒惰漿鍨嬬殑鐩殑錛屼嬌寰楃紪璇戝櫒璇婃柇浣跨敤閿欒鎴愪負鍙?
鑳姐備緥濡傦紝濡傛灉浣犺瘯鍥句嬌鐢ㄤ竴涓?const_cast 浠ュ鐨勬柊椋庢牸寮哄埗杞瀷鏉ユ秷闄ゅ父閲忔э紝浣犵殑浠g爜灝嗘棤娉曠紪璇戙?
==聽 dynamic_cast .vs. static_cast
==
class D : public B { ... };
{
聽聽 D* pd1 = dynamic_cast<D*>(pb);
聽聽 D* pd2 = static_cast<D*>(pb);
}
==
==聽 static_cast .vs. reinterpret_cast
==
聽聽聽 double d=reinterpret_cast<double & > (n);
]]>
鍫嗗拰鏍堢殑鍖哄埆
涓鑸涓哄湪c涓垎涓鴻繖鍑犱釜瀛樺偍鍖?
1鏍?- 鏈夌紪璇戝櫒鑷姩鍒嗛厤閲婃斁
2鍫?- 涓鑸敱紼嬪簭鍛樺垎閰嶉噴鏀撅紝鑻ョ▼搴忓憳涓嶉噴鏀撅紝紼嬪簭緇撴潫鏃跺彲鑳界敱OS鍥炴敹
3鍏ㄥ眬鍖猴紙闈欐佸尯錛夛紝鍏ㄥ眬鍙橀噺鍜岄潤鎬佸彉閲忕殑瀛樺偍鏄斁鍦ㄤ竴鍧楃殑錛屽垵濮嬪寲鐨勫叏灞鍙橀噺鍜岄潤
鎬佸彉閲忓湪涓鍧楀尯鍩燂紝鏈垵濮嬪寲鐨勫叏灞鍙橀噺鍜屾湭鍒濆鍖栫殑闈欐佸彉閲忓湪鐩擱偦鐨勫彟涓鍧楀尯鍩熴?
- 紼嬪簭緇撴潫閲婃斁
4鍙﹀榪樻湁涓涓笓闂ㄦ斁甯擱噺鐨勫湴鏂廣?- 紼嬪簭緇撴潫閲婃斁
鍦ㄥ嚱鏁頒綋涓畾涔夌殑鍙橀噺閫氬父鏄湪鏍堜笂錛岀敤malloc, calloc, realloc絳夊垎閰嶅唴瀛樼殑鍑芥暟鍒?
閰嶅緱鍒扮殑灝辨槸鍦ㄥ爢涓娿傚湪鎵鏈夊嚱鏁頒綋澶栧畾涔夌殑鏄叏灞閲忥紝鍔犱簡static淇グ絎﹀悗涓嶇鍦ㄥ摢
閲岄兘瀛樻斁鍦ㄥ叏灞鍖猴紙闈欐佸尯錛?鍦ㄦ墍鏈夊嚱鏁頒綋澶栧畾涔夌殑static鍙橀噺琛ㄧず鍦ㄨ鏂囦歡涓湁鏁堬紝
涓嶈兘extern鍒板埆鐨勬枃浠剁敤錛屽湪鍑芥暟浣撳唴瀹氫箟鐨剆tatic琛ㄧず鍙湪璇ュ嚱鏁頒綋鍐呮湁鏁堛傚彟澶栵紝
鍑芥暟涓殑"adgfdf"榪欐牱鐨勫瓧絎︿覆瀛樻斁鍦ㄥ父閲忓尯銆?
姣斿錛?
int a = 0; 鍏ㄥ眬鍒濆鍖栧尯
char *p1; 鍏ㄥ眬鏈垵濮嬪寲鍖?
main()
{
int b; 鏍?
char s[] = "abc";鏍?
char *p2; 鏍?
char *p3 = "123456"; 123456\0鍦ㄥ父閲忓尯錛宲3鍦ㄦ爤涓娿?
static int c =0錛?鍏ㄥ眬錛堥潤鎬侊級鍒濆鍖栧尯
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
鍒嗛厤寰楁潵寰?0鍜?0瀛楄妭鐨勫尯鍩熷氨鍦ㄥ爢鍖恒?
strcpy(p1, "123456"); 123456\0鏀懼湪甯擱噺鍖猴紝緙栬瘧鍣ㄥ彲鑳戒細灝嗗畠涓巔3鎵鎸囧悜鐨?12345
6"浼樺寲鎴愪竴鍧椼?
}
榪樻湁灝辨槸鍑芥暟璋冪敤鏃朵細鍦ㄦ爤涓婃湁涓緋誨垪鐨勪繚鐣欑幇鍦哄強浼犻掑弬鏁扮殑鎿嶄綔銆?
鏍堢殑絀洪棿澶у皬鏈夐檺瀹氾紝vc鐨勭己鐪佹槸2M銆傛爤涓嶅鐢ㄧ殑鎯呭喌涓鑸槸紼嬪簭涓垎閰嶄簡澶ч噺鏁扮粍鍜?
閫掑綊鍑芥暟灞傛澶繁銆傛湁涓鐐瑰繀欏葷煡閬擄紝褰撲竴涓嚱鏁拌皟鐢ㄥ畬榪斿洖鍚庡畠浼氶噴鏀捐鍑芥暟涓墍鏈?
鐨勬爤絀洪棿銆傛爤鏄敱緙栬瘧鍣ㄨ嚜鍔ㄧ鐞嗙殑錛屼笉鐢ㄤ綘鎿嶅績銆?
鍫嗘槸鍔ㄦ佸垎閰嶅唴瀛樼殑錛屽茍涓斾綘鍙互鍒嗛厤浣跨敤寰堝ぇ鐨勫唴瀛樸備絾鏄敤涓嶅ソ浼氫駭鐢熷唴瀛樻硠婕忋?
騫朵笖棰戠箒鍦癿alloc鍜宖ree浼氫駭鐢熷唴瀛樼鐗囷紙鏈夌偣綾諱技紓佺洏紕庣墖錛夛紝鍥犱負c鍒嗛厤鍔ㄦ佸唴瀛樻椂
鏄鎵懼尮閰嶇殑鍐呭瓨鐨勩傝岀敤鏍堝垯涓嶄細浜х敓紕庣墖銆?
鍦ㄦ爤涓婂瓨鍙栨暟鎹瘮閫氳繃鎸囬拡鍦ㄥ爢涓婂瓨鍙栨暟鎹揩浜涖?
涓鑸ぇ瀹惰鐨勫爢鏍堝拰鏍堟槸涓鏍風殑錛屽氨鏄爤(stack)錛岃岃鍫嗘椂鎵嶆槸鍫唄eap.
鏍堟槸鍏堝叆鍚庡嚭鐨勶紝涓鑸槸鐢遍珮鍦板潃鍚戜綆鍦板潃鐢熼暱銆?
鍫?heap)鍜屾爤(stack)鏄疌/C++緙栫▼涓嶅彲閬垮厤浼氱鍒扮殑涓や釜鍩烘湰姒傚康銆?br />棣栧厛錛岃繖涓や釜姒傚康閮藉彲浠ュ湪璁叉暟鎹粨鏋勭殑涔︿腑鎵懼埌錛屼粬浠兘鏄熀鏈殑鏁版嵁緇撴瀯錛岃櫧鐒舵爤鏇翠負綆鍗曚竴浜涖傚湪鍏蜂綋鐨凜/C++緙栫▼妗嗘灦涓紝榪欎袱涓蹇靛茍涓嶆槸騫惰鐨勩傚搴曞眰鏈哄櫒浠g爜鐨勭爺絀跺彲浠ユ彮紺猴紝鏍堟槸鏈哄櫒緋葷粺鎻愪緵鐨勬暟鎹粨鏋勶紝鑰屽爢鍒欐槸C/C++鍑芥暟搴撴彁渚涚殑銆?鍏蜂綋鍦拌錛岀幇浠h綆楁満(涓茶鎵ц鏈哄埗)錛岄兘鐩存帴鍦ㄤ唬鐮佸簳灞傛敮鎸佹爤鐨勬暟鎹粨鏋勩傝繖浣撶幇鍦紝鏈変笓闂ㄧ殑瀵勫瓨鍣ㄦ寚鍚戞爤鎵鍦ㄧ殑鍦板潃錛屾湁涓撻棬鐨勬満鍣ㄦ寚浠ゅ畬鎴愭暟鎹叆鏍堝嚭鏍堢殑鎿嶄綔銆?
榪欑鏈哄埗鐨勭壒鐐規槸鏁堢巼楂橈紝鏀寔鐨勬暟鎹湁闄愶紝涓鑸槸鏁存暟錛屾寚閽堬紝嫻偣鏁扮瓑緋葷粺鐩存帴鏀?鎸佺殑鏁版嵁綾誨瀷錛屽茍涓嶇洿鎺ユ敮鎸佸叾浠栫殑鏁版嵁緇撴瀯銆傚洜涓烘爤鐨勮繖縐嶇壒鐐癸紝瀵規爤鐨勪嬌鐢ㄥ湪紼嬪簭涓槸闈炲父棰戠箒鐨勩傚瀛愮▼搴忕殑璋冪敤灝辨槸鐩存帴鍒╃敤鏍堝畬鎴愮殑銆傛満鍣ㄧ殑call鎸囦護閲岄殣鍚簡鎶婅繑鍥炲湴鍧鎺ㄥ叆鏍堬紝鐒跺悗璺寵漿鑷沖瓙紼嬪簭鍦板潃鐨勬搷浣滐紝鑰屽瓙紼嬪簭涓殑ret鎸囦護鍒欓殣鍚粠鍫嗘爤涓脊鍑鴻繑鍥炲湴鍧騫惰煩杞箣鐨勬搷浣溿侰/C++涓殑鑷姩鍙橀噺鏄洿鎺ュ埄鐢ㄦ爤鐨勪緥瀛愶紝榪欎篃灝辨槸涓轟粈涔堝綋鍑芥暟榪斿洖鏃訛紝璇ュ嚱鏁扮殑鑷姩鍙橀噺鑷姩澶辨晥鐨勫師鍥?鍥犱負 棰滄崲鎸囨埑璇撮浠殫 鐘舵?銆?
鍜屾爤涓嶅悓錛屽爢鐨勬暟鎹粨鏋勫茍涓嶆槸鐢辯郴緇?鏃犺鏄満鍣ㄧ郴緇熻繕鏄搷浣滅郴緇?鏀寔鐨勶紝鑰屾槸鐢卞嚱鏁板簱鎻愪緵鐨勩傚熀鏈殑malloc/realloc/free鍑芥暟緇存姢浜嗕竴濂楀唴閮ㄧ殑鍫嗘暟鎹粨鏋勩傚綋紼嬪簭浣跨敤榪欎簺鍑芥暟鍘昏幏寰楁柊鐨勫唴瀛樼┖闂存椂錛岃繖濂楀嚱鏁伴鍏堣瘯鍥句粠鍐呴儴鍫嗕腑瀵繪壘鍙敤鐨勫唴瀛樼┖闂達紝濡傛灉娌℃湁鍙互浣跨敤鐨勫唴瀛樼┖闂達紝鍒欒瘯鍥懼埄鐢ㄧ郴緇熻皟鐢ㄦ潵鍔ㄦ佸鍔犵▼搴忔暟鎹鐨勫唴瀛樺ぇ灝忥紝鏂板垎閰嶅緱鍒扮殑絀洪棿棣栧厛琚粍緇囪繘鍐呴儴鍫嗕腑鍘伙紝鐒跺悗鍐嶄互閫傚綋鐨勫艦寮忚繑鍥炵粰璋冪敤鑰呫傚綋紼嬪簭閲婃斁鍒嗛厤鐨勫唴瀛樼┖闂存椂錛岃繖鐗囧唴瀛樼┖闂磋榪斿洖鍐呴儴鍫嗙粨鏋勪腑錛屽彲鑳戒細琚傚綋鐨勫鐞?姣斿鍜屽叾浠栫┖闂茬┖闂村悎騫舵垚鏇村ぇ鐨勭┖闂茬┖闂?錛屼互鏇撮傚悎涓嬩竴嬈″唴瀛樺垎閰嶇敵璇楓?br />榪欏澶嶆潅鐨勫垎閰嶆満鍒跺疄闄呬笂鐩稿綋浜庝竴涓唴瀛樺垎閰嶇殑緙撳啿姹?Cache)錛屼嬌鐢ㄨ繖濂楁満鍒舵湁濡備笅鑻ュ共鍘熷洜錛?
1. 緋葷粺璋冪敤鍙兘涓嶆敮鎸佷換鎰忓ぇ灝忕殑鍐呭瓨鍒嗛厤銆傛湁浜涚郴緇熺殑緋葷粺璋冪敤鍙敮鎸佸浐瀹氬ぇ灝忓強鍏跺嶆暟鐨勫唴瀛樿姹?鎸夐〉鍒嗛厤)錛涜繖鏍風殑璇濆浜庡ぇ閲忕殑灝忓唴瀛樺垎綾繪潵璇翠細閫犳垚嫻垂銆?br />2. 緋葷粺璋冪敤鐢寵鍐呭瓨鍙兘鏄唬浠鋒槀璐電殑銆傜郴緇熻皟鐢ㄥ彲鑳芥秹鍙婄敤鎴鋒佸拰鏍稿績鎬佺殑杞崲銆?
3. 娌℃湁綆$悊鐨勫唴瀛樺垎閰嶅湪澶ч噺澶嶆潅鍐呭瓨鐨勫垎閰嶉噴鏀炬搷浣滀笅寰堝鏄撻犳垚鍐呭瓨紕庣墖銆?
鍫嗗拰鏍堢殑瀵規瘮
浠庝互涓婄煡璇嗗彲鐭ワ紝鏍堟槸緋葷粺鎻愪緵鐨勫姛鑳斤紝鐗圭偣鏄揩閫熼珮鏁堬紝緙虹偣鏄湁闄愬埗錛屾暟鎹笉鐏墊椿錛涜屾爤鏄嚱鏁板簱鎻愪緵鐨勫姛鑳斤紝鐗圭偣鏄伒媧繪柟渚匡紝鏁版嵁閫傚簲闈㈠箍娉涳紝浣嗘槸鏁堢巼鏈変竴瀹氶檷浣庛傛爤鏄郴緇熸暟鎹粨鏋勶紝瀵逛簬榪涚▼/綰跨▼鏄敮涓鐨勶紱鍫嗘槸鍑芥暟搴撳唴閮ㄦ暟鎹粨鏋勶紝涓嶄竴瀹氬敮涓銆備笉鍚屽爢鍒嗛厤鐨勫唴瀛樻棤娉曚簰鐩告搷浣溿傛爤絀洪棿鍒嗛潤鎬佸垎閰嶅拰鍔ㄦ佸垎閰嶄袱縐嶃傞潤鎬佸垎閰嶆槸緙栬瘧鍣ㄥ畬鎴愮殑錛屾瘮濡傝嚜鍔ㄥ彉閲?auto)鐨勫垎閰嶃傚姩鎬佸垎閰嶇敱alloca鍑芥暟瀹屾垚銆傛爤鐨勫姩鎬佸垎閰嶆棤闇閲婃斁(鏄嚜鍔ㄧ殑)錛屼篃灝辨病鏈夐噴鏀懼嚱鏁般備負鍙Щ妞嶇殑紼嬪簭璧瘋錛屾爤鐨勫姩鎬佸垎閰嶆搷浣滄槸涓嶈榧撳姳鐨勶紒鍫嗙┖闂寸殑鍒嗛厤鎬繪槸鍔ㄦ佺殑錛岃櫧鐒剁▼搴忕粨鏉熸椂鎵鏈夌殑鏁版嵁絀洪棿閮戒細琚噴鏀懼洖緋葷粺錛屼絾鏄簿紜殑鐢寵鍐呭瓨/閲婃斁鍐呭瓨鍖歸厤鏄壇濂界▼搴忕殑鍩烘湰瑕佺礌銆?
鎵浠ヨ綆楁満涓殑鍫嗗拰鏍堢粡甯告椂鏀句竴鍧楄鐨?
nod 涓鑸笉鏄繀瑕佸氨涓嶈鍔ㄦ佸垱寤猴紝鏈璁ㄥ帉鎶妌ew鍑烘潵鐨勪笢瑗垮綋灞閮ㄥ彉閲忕敤錛?br />鐢ㄤ竾浜嗛┈涓奷elete 鐨勫仛娉?
聽鐞嗙敱
聽1.鏍堝垎閰嶆瘮鍫嗗揩錛屽彧闇瑕佷竴鏉℃寚浠ゅ氨鍛㈢粰閰嶆墍鏈夌殑灞閮ㄥ彉閲?
2.鏍堜笉浼氬嚭鐜板唴瀛樼鐗?
3銆傛爤瀵硅薄濂界鐞?
褰撶劧錛屾煇浜涙儏鍐典笅涔熻閭d箞鍐?姣斿
1.瀵硅薄寰堝ぇ
2.瀵硅薄闇瑕佸湪鏌愪釜鐗瑰畾鐨勬椂鍒繪瀯閫犳垨鏋愬
3.綾誨彧鍏佽瀵硅薄鍔ㄦ佸垱寤?姣斿VCL鐨勫ぇ澶氭暟綾?
褰撶劧錛屽繀欏葷敤鍫嗗璞℃椂涔熶笉鑳借翰閬?br />聽
http://kb.csdn.net/.net/Articles/200605/80f93200-6a0c-4e21-82d8-4212844da589.html
]]>
鎴愬憳鍑芥暟鐨勯噸杞姐佽鐩栵紙override錛変笌闅愯棌寰堝鏄撴販娣嗭紝C++紼嬪簭鍛樺繀欏昏鎼炴竻妤氭蹇碉紝鍚﹀垯閿欒灝嗛槻涓嶈儨闃層?span>
鎴愬憳鍑芥暟琚噸杞界殑鐗瑰緛錛?span>
錛?span>1錛夌浉鍚岀殑鑼冨洿錛堝湪鍚屼竴涓被涓級錛?span>
錛?span>2錛夊嚱鏁板悕瀛楃浉鍚岋紱
錛?span>3錛夊弬鏁頒笉鍚岋紱
錛?span>4錛?span>virtual鍏抽敭瀛楀彲鏈夊彲鏃犮?/span>
瑕嗙洊鏄寚媧劇敓綾誨嚱鏁拌鐩栧熀綾誨嚱鏁幫紝鐗瑰緛鏄細
錛?span>1錛変笉鍚岀殑鑼冨洿錛堝垎鍒綅浜庢淳鐢熺被涓庡熀綾伙級錛?span>
錛?span>2錛夊嚱鏁板悕瀛楃浉鍚岋紱
錛?span>3錛夊弬鏁扮浉鍚岋紱
錛?span>4錛夊熀綾誨嚱鏁板繀欏繪湁virtual鍏抽敭瀛椼?span>
紺轟緥
|
#include <iostream.h> class Base { public: void f(int x){ cout << "Base::f(int) " << x << endl; } void f(float x){ cout << "Base::f(float) " << x << endl; } virtual void g(void){ cout << "Base::g(void)" << endl;} };
|
|
class Derived : public Base { public: virtual void g(void){ cout << "Derived::g(void)" << endl;} };
|
|
void main(void) { Derived d; Base *pb = &d; pb->f(42); // Base::f(int) 42 pb->f( pb->g(); // Derived::g(void) } |
紺轟緥
鏈潵浠呬粎鍖哄埆閲嶈澆涓庤鐩栧茍涓嶇畻鍥伴毦錛屼絾鏄?span>C++鐨勯殣钘忚鍒欎嬌闂澶嶆潅鎬ч櫋鐒跺鍔犮傝繖閲?#8220;闅愯棌”鏄寚媧劇敓綾葷殑鍑芥暟灞忚斀浜嗕笌鍏跺悓鍚嶇殑鍩虹被鍑芥暟錛岃鍒欏涓嬶細
錛?span>1錛夊鏋滄淳鐢熺被鐨勫嚱鏁頒笌鍩虹被鐨勫嚱鏁板悓鍚嶏紝浣嗘槸鍙傛暟涓嶅悓銆傛鏃訛紝涓嶈鏈夋棤virtual鍏抽敭瀛楋紝鍩虹被鐨勫嚱鏁板皢琚殣钘忥紙娉ㄦ剰鍒笌閲嶈澆娣鋒穯錛夈?span>
錛?span>2錛夊鏋滄淳鐢熺被鐨勫嚱鏁頒笌鍩虹被鐨勫嚱鏁板悓鍚嶏紝騫朵笖鍙傛暟涔熺浉鍚岋紝浣嗘槸鍩虹被鍑芥暟娌℃湁virtual鍏抽敭瀛椼傛鏃訛紝鍩虹被鐨勫嚱鏁拌闅愯棌錛堟敞鎰忓埆涓庤鐩栨販娣嗭級銆?/span>
紺轟緥紼嬪簭
錛?span>1錛夊嚱鏁?span>Derived::f(float)瑕嗙洊浜?span>Base::f(float)銆?span>
錛?span>2錛夊嚱鏁?span>Derived::g(int)闅愯棌浜?span>Base::g(float)錛岃屼笉鏄噸杞姐?span>
錛?span>3錛夊嚱鏁?span>Derived::h(float)闅愯棌浜?span>Base::h(float)錛岃屼笉鏄鐩栥?span>
|
#include <iostream.h> class Base { public: virtual void f(float x){ cout << "Base::f(float) " << x << endl; } void g(float x){ cout << "Base::g(float) " << x << endl; } void h(float x){ cout << "Base::h(float) " << x << endl; } }; |
|
class Derived : public Base { public: virtual void f(float x){ cout << "Derived::f(float) " << x << endl; } void g(int x){ cout << "Derived::g(int) " << x << endl; } void h(float x){ cout << "Derived::h(float) " << x << endl; } }; |
紺轟緥
鎹綔鑰呰冨療錛屽緢澶?span>C++紼嬪簭鍛樻病鏈夋剰璇嗗埌鏈?#8220;闅愯棌”榪欏洖浜嬨傜敱浜庤璇嗕笉澶熸繁鍒伙紝“闅愯棌”鐨勫彂鐢熷彲璋撶鍑洪娌★紝甯稿父浜х敓浠や漢榪鋒儜鐨勭粨鏋溿?span>
紺轟緥
|
void main(void) { Derived d; Base *pb = &d; Derived *pd = &d; // Good : behavior depends solely on type of the object pb->f( pd->f(
// Bad : behavior depends on type of the pointer pb->g( pd->g(
// Bad : behavior depends on type of the pointer pb->h( pd->h( } |
紺轟緥
闅愯棌瑙勫垯寮曡搗浜嗕笉灝戦夯鐑︺傜ず渚?chsdate w:st="on" isrocdate="False" islunardate="False" day="3" month="2" year="2008">8-2-3紼嬪簭涓紝璇彞pd->f(10)鐨勬湰鎰忔槸鎯寵皟鐢ㄥ嚱鏁?span>Base::f(int)錛屼絾鏄?span>Base::f(int)涓嶅垢琚?span>Derived::f(char *)闅愯棌浜嗐傜敱浜庢暟瀛?span>10涓嶈兘琚殣寮忓湴杞寲涓哄瓧絎︿覆錛屾墍浠ュ湪緙栬瘧鏃跺嚭閿欍?span>
|
class Base { public: void f(int x); }; |
|
class Derived : public Base { public: void f(char *str); }; |
|
void Test(void) { Derived *pd = new Derived; pd->f(10); // error } |
紺轟緥
浠庣ず渚?chsdate w:st="on" isrocdate="False" islunardate="False" day="3" month="2" year="2008">8-2-3鐪嬫潵錛岄殣钘忚鍒欎技涔庡緢鎰氳牏銆備絾鏄殣钘忚鍒欒嚦灝戞湁涓や釜瀛樺湪鐨勭悊鐢憋細
u 鍐欒鍙?span>pd->f(10)鐨勪漢鍙兘鐪熺殑鎯寵皟鐢?span>Derived::f(char *)鍑芥暟錛屽彧鏄粬璇皢鍙傛暟鍐欓敊浜嗐傛湁浜嗛殣钘忚鍒欙紝緙栬瘧鍣ㄥ氨鍙互鏄庣‘鎸囧嚭閿欒錛岃繖鏈繀涓嶆槸濂戒簨銆傚惁鍒欙紝緙栬瘧鍣ㄤ細闈欐倓鎮勫湴灝嗛敊灝遍敊錛岀▼搴忓憳灝嗗緢闅懼彂鐜拌繖涓敊璇紝嫻佷笅紲告牴銆?span>
u 鍋囧綾?span>Derived鏈夊涓熀綾伙紙澶氶噸緇ф壙錛夛紝鏈夋椂鎼炰笉娓呮鍝簺鍩虹被瀹氫箟浜嗗嚱鏁?span>f銆傚鏋滄病鏈夐殣钘忚鍒欙紝閭d箞pd->f(10)鍙兘浼氳皟鐢ㄤ竴涓嚭涔庢剰鏂欑殑鍩虹被鍑芥暟f銆傚敖綆¢殣钘忚鍒欑湅璧鋒潵涓嶆庝箞鏈夐亾鐞嗭紝浣嗗畠鐨勭‘鑳芥秷鐏繖浜涙剰澶栥?span>
紺轟緥
class Derived : public Base
{
public:
void f(char *str);
void f(int x) { Base::f(x); }
};
鏍囧噯搴撀?/strong>
鏍囧噯搴撲腑鎻愪緵浜咰++紼嬪簭鐨勫熀鏈鏂姐傝櫧鐒禖++鏍囧噯搴撻殢鐫C++鏍囧噯鎶樿吘浜嗚澶氬勾錛岀洿鍒版爣鍑嗙殑鍑哄彴鎵嶆寮忓畾鍨嬶紝浣嗘槸鍦ㄦ爣鍑嗗簱鐨勫疄鐜頒笂鍗村緢浠や漢嬈f叞寰楃湅鍒板縐嶅疄鐜幫紝騫朵笖宸茶瀹炶返璇佹槑涓烘湁宸ヤ笟綰у埆寮哄害鐨勪匠浣溿偮?/p>
1銆伮燚inkumware聽C++聽Library聽
鍙傝冪珯鐐癸細http://www.dinkumware.com
P.J.聽Plauger緙栧啓鐨勯珮鍝佽川鐨勬爣鍑嗗簱銆侾.J.聽Plauger鍗氬+鏄疍r.聽Dobb's紼嬪簭璁捐鏉板嚭濂栫殑鑾峰緱鑰呫傚叾緙栧啓鐨勫簱闀挎湡琚玀icrosoft閲囩敤錛屽茍涓旀渶榪態orland涔熷彇寰椾簡鍏禣EM鐨刲icense錛屽湪鍏禖/C+聽+鐨勪駭鍝佷腑閲囩敤Dinkumware鐨勫簱銆偮?/p>
2銆伮燫ogueWave聽Standard聽C++聽Library聽
鍙傝冪珯鐐癸細http://www.roguewave.com/聽
榪欎釜搴撳湪Borland聽C++聽Builder鐨勬棭鏈熺増鏈腑鏇劇粡琚噰鐢紝鍚庢潵琚叾浠栫殑搴撶粰鏇挎崲浜嗐傜瑪鑰呬笉鎺ㄨ崘浣跨敤銆偮?/p>
3銆丼GI聽STL聽
鍙傝冪珯鐐癸細http://www.roguewave.com/
銆SGI鍏徃鐨凜++鏍囧噯妯$増搴撱偮?/p>
4銆丼TLport聽
鍙傝冪珯鐐癸細http://www.stlport.org/
銆SGI聽STL搴撶殑璺ㄥ鉤鍙板彲縐繪鐗堟湰銆偮?/p>
鍑嗘爣鍑嗗簱鈥斺擝oost聽
Boost聽搴撴槸涓涓粡榪囧崈閿ょ櫨鐐箋佸彲縐繪銆佹彁渚涙簮浠g爜鐨凜++搴擄紝浣滀負鏍囧噯搴撶殑鍚庡錛屾槸C++鏍囧噯鍖栬繘紼嬬殑鍙戝姩鏈轟箣涓銆偮燘oost搴撶敱C++鏍囧噯濮斿憳浼氬簱宸ヤ綔緇勬垚鍛樺彂璧鳳紝鍦–++紺懼尯涓獎鍝嶇敋澶э紝鍏舵垚鍛樺凡榪?000浜恒偮燘oost搴撲負鎴戜滑甯︽潵浜嗘渶鏂般佹渶閰楓佹渶瀹炵敤鐨勬妧鏈紝鏄笉鎶樹笉鎵g殑"鍑?鏍囧噯搴撱偮?/p>
Boost涓瘮杈冩湁鍚嶆皵鐨勬湁榪欎箞鍑犱釜搴擄細聽
銆Regex聽
銆姝e垯琛ㄨ揪寮忓簱聽
Spirit聽
銆LL聽parser聽framework錛岀敤C++浠g爜鐩存帴琛ㄨ揪EBNF聽
Graph聽
銆鍥劇粍浠跺拰綆楁硶聽
Lambda聽
銆鍦ㄨ皟鐢ㄧ殑鍦版柟瀹氫箟鐭皬鍖垮悕鐨勫嚱鏁板璞★紝寰堝疄鐢ㄧ殑functional鍔熻兘聽
concept聽check聽
銆媯鏌ユ硾鍨嬬紪紼嬩腑鐨刢oncept聽
Mpl聽
銆鐢ㄦā鏉垮疄鐜扮殑鍏冪紪紼嬫鏋堵?/p>
Thread聽
銆鍙Щ妞嶇殑C++澶氱嚎紼嬪簱聽
Python聽
銆鎶奀++綾誨拰鍑芥暟鏄犲皠鍒癙ython涔嬩腑聽
Pool聽
銆鍐呭瓨姹犵鐞喡?/p>
smart_ptr聽
銆5涓櫤鑳芥寚閽堬紝瀛︿範鏅鴻兘鎸囬拡蹇呰錛屼竴浠戒笉閿欑殑鍙傝冩槸鏉ヨ嚜CUJ鐨勬枃绔狅細聽
Smart聽Pointers聽in聽Boost,鍝︼紝榪欑瘒鏂囩珷鍙互鏌ュ埌錛孋UJ鏄彁渚涘湪綰挎祻瑙堢殑銆備腑鏂囩増瑙佺瑪鑰呭湪銆奃r.聽Dobb's聽Journal杞歡鐮斿彂鏉傚織銆嬬7杈戜笂鐨勮瘧鏂囥偮?/p>
Boost聽鎬諱綋鏉ヨ鏄疄鐢ㄤ環鍊煎緢楂橈紝璐ㄩ噺寰堥珮鐨勫簱銆傚茍涓旂敱浜庡叾瀵硅法騫沖彴鐨勫己璋冿紝瀵規爣鍑咰++鐨勫己璋冿紝鏄紪鍐欏鉤鍙版棤鍏籌紝鐜頒唬C++鐨勫紑鍙戣呭繀澶囩殑宸ュ叿銆備絾鏄疊oost聽涓篃鏈夊緢澶氭槸瀹為獙鎬ц川鐨勪笢瑗匡紝鍦ㄥ疄闄呯殑寮鍙戜腑瀹炵敤闇瑕佽皚鎱庛傚茍涓斿緢澶欱oost涓殑搴撳姛鑳藉牚縐板璇█鍔熻兘鐨勬墿灞曪紝鍏舵瀯閫犵敤灝界簿宸х殑鎵嬫硶錛屼笉瑕佽錘鐒剁殑鑺辮垂鏃墮棿鐮旇銆侭oost鍙﹀涓闈紝姣斿Graph榪欐牱鐨勫簱鍒欐槸鍏鋒湁宸ヤ笟寮哄害錛岀粨鏋勮壇濂斤紝闈炲父鍊煎緱鐮旇鐨勭簿鍝佷唬鐮侊紝騫朵笖涔熷彲浠ユ斁蹇冪殑鍦ㄤ駭鍝佷唬鐮佷腑澶氬鍒╃敤銆偮?/p>
鍙傝冪珯鐐癸細http://www.boost.org錛堝浗鍐呴暅鍍忥細http://www.c-view.org/tech/lib/boost/index.htm錛壜?/p>
GUI聽
鍦ㄤ紬澶欳++鐨勫簱涓紝GUI閮ㄥ垎鐨勫簱綆楁槸姣旇緝綣佽崳錛屼篃姣旇緝寮曚漢娉ㄧ洰鐨勩傚湪瀹為檯寮鍙戜腑錛孏UI搴撶殑閫夋嫨涔熸槸闈炲父閲嶈鐨勪竴浠朵簨鎯咃紝涓嬮潰鎴戜滑緇艱堪涓涓嬪彲閫夋嫨鐨凣UI搴擄紝鍚勮嚜鐨勭壒鐐逛互鍙婄浉鍏沖伐鍏風殑鏀寔銆偮?/p>
1銆伮燤FC聽
澶у悕榧庨紟鐨勫井杞熀紜綾誨簱錛圡icrosoft聽Foundation聽Class錛夈傚ぇ鍑″榪嘨C++鐨勪漢閮藉簲璇ョ煡閬撹繖涓簱銆傝櫧鐒朵粠鎶鏈搴﹁錛孧FC鏄笉澶ф紓浜殑錛屼絾鏄畠鏋勫緩浜嶹indows聽API聽涔嬩笂錛岃兘澶熶嬌紼嬪簭鍛樼殑宸ヤ綔鏇村鏄?緙栫▼鏁堢巼楂橈紝鍑忓皯浜嗗ぇ閲忓湪寤虹珛聽Windows聽紼嬪簭鏃跺繀欏葷紪鍐欑殑浠g爜錛屽悓鏃跺畠榪樻彁渚涗簡鎵鏈変竴鑸燙++聽緙栫▼鐨勪紭鐐癸紝渚嬪緇ф壙鍜屽皝瑁呫侻FC聽緙栧啓鐨勭▼搴忓湪鍚勪釜鐗堟湰鐨刉indows鎿嶄綔緋葷粺涓婃槸鍙Щ妞嶇殑錛屼緥濡傦紝鍦燱indows聽3.1涓嬬紪鍐欑殑浠g爜鍙互寰堝鏄撳湴縐繪鍒奧燱indows聽NT聽鎴柭燱indows聽95聽涓娿備絾鏄湪鏈榪戝彂灞曚互鍙婂畼鏂規敮鎸佷笂鏃ユ笎鍔垮井銆偮?/p>
2銆伮燪T聽
鍙傝冪綉绔欙細http://www.trolltech.com
Qt聽鏄疶rolltech鍏徃鐨勪竴涓騫沖彴鐨凜++鍥懼艦鐢ㄦ埛鐣岄潰搴旂敤紼嬪簭妗嗘灦銆傚畠鎻愪緵緇欏簲鐢ㄧ▼搴忓紑鍙戣呭緩绔嬭壓鏈駭鐨勫浘褰㈢敤鎴風晫闈㈡墍闇鐨勬墍鐢ㄥ姛鑳姐俀t鏄畬鍏ㄩ潰鍚戝璞$殑寰堝鏄撴墿灞曪紝騫朵笖鍏佽鐪熸鍦扮粍浠剁紪紼嬨傝嚜浠?996騫存棭浜涙椂鍊欙紝Qt榪涘叆鍟嗕笟棰嗗煙錛屽畠宸茬粡鎴愪負鍏ㄤ笘鐣岃寖鍥村唴鏁板崈縐嶆垚鍔熺殑搴旂敤紼嬪簭鐨勫熀紜銆俀t涔熸槸嫻佽鐨凩inux妗岄潰鐜KDE聽鐨勫熀紜錛屽悓鏃跺畠榪樻敮鎸乄indows銆丮acintosh銆乁nix/X11絳夊縐嶅鉤鍙般偮?/p>
3銆乄xWindows聽
鍙傝冪綉绔欙細http://www.wxwindows.org/
璺ㄥ鉤鍙扮殑GUI搴撱傚洜涓哄叾綾誨眰嬈℃瀬鍍廙FC錛屾墍浠ユ湁鏂囩珷浠嬬粛浠嶮FC鍒癢xWindows鐨勪唬鐮佺Щ妞嶄互瀹炵幇璺ㄥ鉤鍙扮殑鍔熻兘銆傞氳繃澶氬勾鐨勫紑鍙戜篃鏄竴涓棩瓚嬪畬鍠勭殑聽GUI搴擄紝鏀寔鍚屾牱涓嶅急浜庡墠闈袱涓簱銆傚茍涓旀槸瀹屽叏寮鏀炬簮浠g爜鐨勩傛柊榪戠殑C++聽Builder聽X鐨凣UI璁捐鍣ㄥ氨鏄熀浜庤繖涓簱鐨勩偮?/p>
4銆丗ox聽
寮鏀炬簮浠g爜鐨凣UI搴撱備綔鑰呬粠鑷繁浜茶韓鐨勫紑鍙戠粡楠屼腑寰楀嚭浜嗕竴涓悊鎯崇殑GUI搴撳簲璇ユ槸浠涔堟牱瀛愮殑鎰熷彈鍑哄彂錛屼粠鑰屽紑濮嬩簡瀵硅繖涓簱鐨勫紑鍙戙傛湁鍏磋叮鐨勫彲浠ュ皾璇曚竴涓嬨偮?/p>
鍙傝冪綉绔欙細http://www.fox-toolkit.org/聽
5銆伮燱TL聽
鍩轟簬ATL鐨勪竴涓簱銆傚洜涓轟嬌鐢ㄤ簡澶ч噺ATL鐨勮交閲忕駭鎵嬫硶錛屾ā鏉跨瓑鎶鏈紝鍦ㄤ唬鐮佸昂瀵革紝浠ュ強閫熷害浼樺寲鏂歸潰鍋氬緱闈炲父鍒頒綅銆備富瑕侀潰鍚戠殑浣跨敤緹や綋鏄紑鍙慍OM杞婚噺綰т緵緗戠粶涓嬭澆鐨勫彲瑙嗗寲鎺т歡鐨勫紑鍙戣呫偮?/p>
6銆伮燝TK聽
鍙傝冪綉绔欙細http://gtkmm.sourceforge.net/聽
GTK鏄竴涓ぇ鍚嶉紟榧庣殑C鐨勫紑婧怗UI搴撱傚湪Linux涓栫晫涓湁Gnome榪欐牱鐨勬潃鎵嬪簲鐢ㄣ傝孏TK灝辨槸榪欎釜搴撶殑C++灝佽鐗堟湰銆偮?/p>
緗戠粶閫氫俊搴?/p>
ACE聽
鍙傝冪綉绔欙細http://www.cs.wustl.edu/~schmidt/ACE.html聽
銆ACE緗戠粶緙栫▼寮鍙戣鍧涳細http://www.acejoy.com
C+聽+搴撶殑浠h〃錛岃秴閲嶉噺綰х殑緗戠粶閫氫俊寮鍙戞鏋躲侫CE鑷傞厤閫氫俊鐜錛圓daptive聽Communication聽Environment錛夋槸鍙互鑷敱浣跨敤銆佸紑鏀炬簮浠g爜鐨勯潰鍚戝璞℃鏋訛紝鍦ㄥ叾涓疄鐜頒簡璁稿鐢ㄤ簬騫跺彂閫氫俊杞歡鐨勬牳蹇冩ā寮忋侫CE鎻愪緵浜嗕竴緇勪赴瀵岀殑鍙鐢–++聽鍖呰澶栬錛圵rapper聽Facade錛夊拰妗嗘灦緇勪歡錛屽彲璺ㄨ秺澶氱騫沖彴瀹屾垚閫氱敤鐨勯氫俊杞歡浠誨姟錛屽叾涓寘鎷細浜嬩歡澶氳礬鍒嗙鍜屼簨浠跺鐞嗗櫒鍒嗘淳銆佷俊鍙峰鐞嗐佹湇鍔″垵濮嬪寲銆佽繘紼嬮棿閫氫俊銆佸叡浜唴瀛樼鐞嗐佹秷鎭礬鐢便佸垎甯冨紡鏈嶅姟鍔ㄦ侊紙閲嶏級閰嶇疆銆佸茍鍙戞墽琛屽拰鍚屾錛岀瓑絳夈偮?/p>
StreamModule聽
鍙傝冪綉绔欙細http://www.omnifarious.org/StrMod/聽
璁捐鐢ㄤ簬綆鍖栫紪鍐欏垎甯冨紡紼嬪簭鐨勫簱銆傚皾璇曠潃浣垮緱緙栧啓澶勭悊寮傛琛屼負鐨勭▼搴忔洿瀹規槗錛岃屼笉鏄敤鍚屾鐨勫澹沖寘璧峰紓姝ョ殑鏈川銆偮?/p>
SimpleSocket聽
鍙傝冪綉绔欙細http://home.hetnet.nl/~lcbokkers/simsock.htm聽
榪欎釜綾誨簱璁╃紪鍐欏熀浜巗ocket鐨勫鎴?鏈嶅姟鍣ㄧ▼搴忔洿鍔犲鏄撱偮?/p>
A聽Stream聽Socket聽API聽for聽C++聽
銆鍙傝冪綉绔欙細http://www.pcs.cnu.edu/~dgame/sockets/socketsC++/sockets.html聽
鍙堜竴涓Socket鐨勫皝瑁呭簱銆偮?/p>
XML聽
Xerces聽
鍙傝冪綉绔欙細http://xml.apache.org/xerces-c/聽
Xerces-C++聽鏄竴涓潪甯稿仴澹殑XML瑙f瀽鍣紝瀹冩彁渚涗簡楠岃瘉錛屼互鍙奡AX鍜孌OM聽API銆俋ML楠岃瘉鍦ㄦ枃妗g被鍨嬪畾涔?Document聽Type聽Definition錛孌TD)鏂歸潰鏈夊緢濂界殑鏀寔錛屽茍涓斿湪2001騫?2鏈堝鍔犱簡鏀寔W3C聽XML聽Schema聽鐨勫熀鏈畬鏁寸殑寮鏀炬爣鍑嗐偮?/p>
XMLBooster聽
鍙傝冪綉绔欙細http://www.xmlbooster.com/聽
榪欎釜搴撻氳繃浜х敓鐗瑰埗鐨刾arser鐨勫姙娉曟瀬澶х殑鎻愰珮浜哫ML瑙f瀽鐨勯熷害錛屽茍涓旇兘澶熶駭鐢熺浉搴旂殑GUI紼嬪簭鏉ヤ慨鏀硅繖涓猵arser銆傚湪DOM鍜孲AX涓ゅぇ涓籜ML瑙f瀽鍔炴硶涔嬪鎻愪緵浜嗗彟澶栦竴涓彲琛岀殑瑙e喅鏂規銆偮?/p>
Pull聽Parser聽
鍙傝冪綉绔欙細http://www.extreme.indiana.edu/xgws/xsoap/xpp/聽
榪欎釜搴撻噰鐢╬ull鏂規硶鐨刾arser銆傚湪姣忎釜SAX鐨刾arser搴曞眰閮芥湁涓涓猵ull鐨刾arser錛岃繖涓獂pp鎶婅繖灞傛毚闇插嚭鏉ョ洿鎺ョ粰澶у浣跨敤銆傚湪瑕佸厖鍒嗚冭檻閫熷害鐨勬椂鍊欏煎緱灝濊瘯銆偮?/p>
Xalan聽
鍙傝冪綉绔欙細http://xml.apache.org/xalan-c/聽
Xalan鏄竴涓敤浜庢妸XML鏂囨。杞崲涓篐TML錛岀函鏂囨湰鎴栬呭叾浠朮ML綾誨瀷鏂囨。鐨刋SLT澶勭悊鍣ㄣ偮?/p>
CMarkup聽
鍙傝冪綉绔欙細http://www.firstobject.com/xml.htm聽
銆榪欐槸涓縐嶄嬌鐢‥DOM鐨刋ML瑙f瀽鍣ㄣ傚湪寰堝鎬濊礬涓婇潰闈炲父鐏墊椿瀹炵敤銆傚煎緱澶у鍦―OM鍜孲AX涔嬪瀵繪眰涓鐐圭伒鎰熴偮?/p>
libxml++聽
http://libxmlplusplus.sourceforge.net/聽
libxml++鏄钁楀悕鐨刲ibxml聽XML瑙f瀽鍣ㄧ殑C++灝佽鐗堟湰聽
縐戝璁$畻聽
Blitz++聽
鍙傝冪綉绔欙細http://www.oonumerics.org/blitz/聽
Blitz++聽鏄竴涓珮鏁堢巼鐨勬暟鍊艱綆楀嚱鏁板簱錛屽畠鐨勮璁$洰鐨勬槸甯屾湜寤虹珛涓濂楁棦鍏峰儚C++聽涓鏍鋒柟渚匡紝鍚屾椂鍙堟瘮Fortran閫熷害鏇村揩鐨勬暟鍊艱綆楃幆澧冦傞氬父錛岀敤C++鎵鍐欏嚭鐨勬暟鍊肩▼搴忥紝姣斅燜ortran鎱?0%宸﹀彸錛屽洜姝litz++姝f槸瑕佹敼鎺夎繖涓己鐐廣傛柟娉曟槸鍒╃敤C++鐨則emplate鎶鏈紝紼嬪簭鎵ц鐢氳嚦鍙互姣擣ortran鏇村揩銆偮燘litz++鐩墠浠嶅湪鍙戝睍涓紝瀵逛簬甯歌鐨凷VD錛孎FTs錛孮MRES絳夊父瑙佺殑綰挎т唬鏁版柟娉曞茍涓嶆彁渚涳紝涓嶈繃浣跨敤鑰呭彲浠ュ緢瀹規槗鍦板埄鐢˙litz++鎵鎻愪緵鐨勫嚱鏁版潵鏋勫緩銆偮?/p>
POOMA聽
鍙傝冪綉绔欙細http://www.codesourcery.com/pooma/pooma聽
POOMA鏄竴涓厤璐圭殑楂樻ц兘鐨凜++搴擄紝鐢ㄤ簬澶勭悊騫惰寮忕瀛﹁綆椼侾OOMA鐨勯潰鍚戝璞¤璁℃柟渚夸簡蹇熺殑紼嬪簭寮鍙戯紝瀵瑰茍琛屾満鍣ㄨ繘琛屼簡浼樺寲浠ヨ揪鍒版渶楂樼殑鏁堢巼錛屾柟渚垮湪宸ヤ笟鍜岀爺絀剁幆澧冧腑浣跨敤銆偮?/p>
MTL聽
鍙傝冪綉绔欙細http://www.osl.iu.edu/research/mtl/聽
Matrix聽Template聽Library(MTL)鏄竴涓珮鎬ц兘鐨勬硾鍨嬬粍浠跺簱錛屾彁渚涗簡鍚勭鏍煎紡鐭╅樀鐨勫ぇ閲忕嚎鎬т唬鏁版柟闈㈢殑鍔熻兘銆傚湪鏌愪簺搴旂敤浣跨敤楂樻ц兘緙栬瘧鍣ㄧ殑鎯呭喌涓嬶紝姣斿Intel鐨勭紪璇戝櫒錛屼粠浜х敓鐨勬眹緙栦唬鐮佸彲浠ョ湅鍑哄叾涓庢墜鍐欏嚑涔庢病鏈変袱鏍風殑鏁堣兘銆偮?/p>
CGAL聽
銆鍙傝冪綉绔欙細www.cgal.org聽
Computational聽Geometry聽Algorithms聽Library鐨勭洰鐨勬槸鎶婂湪璁$畻鍑犱綍鏂歸潰鐨勫ぇ閮ㄥ垎閲嶈鐨勮В鍐蟲柟妗堝拰鏂規硶浠++搴撶殑褰㈠紡鎻愪緵緇欏伐涓氬拰瀛︽湳鐣岀殑鐢ㄦ埛銆偮?/p>
娓告垙寮鍙懧?/p>
Audio/Video聽3D聽C++聽Programming聽Library聽
鍙傝冪綉绔欙細http://www.galacticasoftware.com/products/av/聽
AV3D鏄竴涓法騫沖彴錛岄珮鎬ц兘鐨凜++搴撱備富瑕佺殑鐗規ф槸鎻愪緵3D鍥懼艦錛屽0鏁堟敮鎸侊紙SB,浠ュ強S3M錛夛紝鎺у埗鎺ュ彛錛堥敭鐩橈紝榧犳爣鍜岄仴鎰燂級錛孹MS銆偮?/p>
KlayGE聽
鍙傝冪綉绔欙細http://home.g365.net/enginedev/聽
鍥藉唴娓告垙寮鍙戦珮鎵嬭嚜宸辯敤C++寮鍙戠殑娓告垙寮曟搸銆侹layGE鏄竴涓紑鏀炬簮浠g爜銆佽法騫沖彴鐨勬父鎴忓紩鎿庯紝騫朵嬌鐢≒ython浣滆剼鏈璦銆侹layGE鍦↙GPL鍗忚涓嬪彂琛屻傛劅璋㈤練鏁忔晱鍏堢敓涓轟腑鍥芥父鎴忓紑鍙戜簨涓氭墍鍋氬嚭鐨勮礎鐚偮?/p>
OGRE聽
鍙傝冪綉绔欙細http://www.ogre3d.org聽
OGRE聽錛堥潰鍚戝璞$殑鍥懼艦娓叉煋寮曟搸錛夋槸鐢–++寮鍙戠殑錛屼嬌鐢ㄧ伒媧葷殑闈㈠悜瀵硅薄3D寮曟搸銆傚畠鐨勭洰鐨勬槸璁╁紑鍙戣呰兘鏇存柟渚垮拰鐩存帴鍦板紑鍙戝熀浜?D紜歡璁懼鐨勫簲鐢ㄧ▼搴忔垨娓告垙銆傚紩鎿庝腑鐨勭被搴撳鏇村簳灞傜殑緋葷粺搴擄紙濡傦細Direct3D鍜孫penGL錛夌殑鍏ㄩ儴浣跨敤緇嗚妭榪涜浜嗘娊璞★紝騫舵彁渚涗簡鍩轟簬鐜板疄涓栫晫瀵硅薄鐨勬帴鍙e拰鍏跺畠綾匯偮?/p>
綰跨▼聽
C++聽Threads聽
鍙傝冪綉绔欙細http://threads.sourceforge.net/聽
榪欎釜搴撶殑鐩爣鏄粰紼嬪簭鍛樻彁渚涙槗浜庝嬌鐢ㄧ殑綾伙紝榪欎簺綾昏緇ф壙浠ユ彁渚涘湪Linux鐜涓緢闅劇湅鍒扮殑澶ч噺鐨勭嚎紼嬫柟闈㈢殑鍔熻兘銆偮?/p>
ZThreads聽
鍙傝冪綉绔欙細http://zthread.sourceforge.net/聽
涓涓厛榪涚殑闈㈠悜瀵硅薄錛岃法騫沖彴鐨凜++綰跨▼鍜屽悓姝ュ簱銆偮?/p>
搴忓垪鍖柭?br />銆s11n聽
銆鍙傝冪綉绔欙細http://s11n.net/聽
銆涓涓熀浜嶴TL鐨凜++搴擄紝鐢ㄤ簬搴忓垪鍖朠OD錛孲TL瀹瑰櫒浠ュ強鐢ㄦ埛瀹氫箟鐨勭被鍨嬨偮?br />銆Simple聽XML聽Persistence聽Library聽
銆鍙傝冪綉绔欙細http://sxp.sourceforge.net/聽
銆榪欐槸涓妸瀵硅薄搴忓垪鍖栦負XML鐨勮交閲忕駭鐨凜++搴撱偮?/p>
瀛楃涓猜?/p>
C++聽Str聽Library聽
鍙傝冪綉绔欙細http://www.utilitycode.com/str/聽
鎿嶄綔瀛楃涓插拰瀛楃鐨勫簱錛屾敮鎸乄indows鍜屾敮鎸乬cc鐨勫縐嶅鉤鍙般傛彁渚涢珮搴︿紭鍖栫殑浠g爜錛屽茍涓旀敮鎸佸綰跨▼鐜鍜孶nicode錛屽悓鏃惰繕鏈夋鍒欒〃杈懼紡鐨勬敮鎸併偮?/p>
Common聽Text聽Transformation聽Library聽
鍙傝冪綉绔欙細http://cttl.sourceforge.net/聽
榪欐槸涓涓В鏋愬拰淇敼STL瀛楃涓茬殑搴撱侰TTL聽substring綾誨彲浠ョ敤鏉ユ瘮杈冿紝鎻掑叆錛屾浛鎹互鍙婄敤EBNF鐨勮娉曡繘琛岃В鏋愩偮?/p>
GRETA聽
鍙傝冪綉绔欙細http://research.microsoft.com/projects/greta/聽
榪欐槸鐢卞井杞爺絀墮櫌鐨勭爺絀朵漢鍛樺紑鍙戠殑澶勭悊姝e垯琛ㄨ揪寮忕殑搴撱傚湪灝忓瀷鍖歸厤鐨勬儏鍐典笅鏈夐潪甯鎬紭縐鐨勮〃鐜般偮?/p>
緇煎悎聽
P::Classes聽
鍙傝冪綉绔欙細http://pclasses.com/聽
涓涓珮搴﹀彲縐繪鐨凜++搴旂敤紼嬪簭妗嗘灦銆傚綋鍓嶅叧娉ㄧ被鍨嬪拰綰跨▼瀹夊叏鐨剆ignal/slot鏈哄埗錛宨/o緋葷粺鍖呮嫭鍩轟簬鎻掍歡鐨勭綉緇滃崗璁忔槑鐨刬/o鏋舵瀯錛屽熀浜庢彃浠剁殑搴旂敤紼嬪簭娑堟伅鏃ュ織妗嗘灦錛岃闂畇ql鏁版嵁搴撶殑綾葷瓑絳夈偮?/p>
ACDK聽-聽Artefaktur聽Component聽Development聽Kit聽
鍙傝冪綉绔欙細http://acdk.sourceforge.net/聽
榪欐槸涓涓鉤鍙版棤鍏崇殑C++緇勪歡妗嗘灦錛岀被浼間簬Java鎴栬?NET涓殑妗嗘灦錛堝弽灝勬満鍒訛紝綰跨▼錛孶nicode錛屽簾鏂欐敹闆嗭紝I/O錛岀綉緇滐紝瀹炵敤宸ュ叿錛孹ML錛岀瓑絳夛級錛屼互鍙婂Java,聽Perl,聽Python,聽TCL,聽Lisp,聽COM聽鍜屄燙ORBA鐨勯泦鎴愩偮?/p>
dlib聽C++聽library聽
鍙傝冪綉绔欙細http://www.cis.ohio-state.edu/~kingd/dlib/聽
鍚勭鍚勬牱鐨勭被鐨勪竴涓患鍚堛傚ぇ鏁存暟錛孲ocket錛岀嚎紼嬶紝GUI錛屽鍣ㄧ被,浠ュ強嫻忚鐩綍鐨凙PI絳夌瓑銆偮?/p>
Chilkat聽C++聽Libraries聽
鍙傝冪綉绔欙細http://www.chilkatsoft.com/cpp_libraries.asp聽
榪欐槸鎻愪緵zip錛宔-mail錛岀紪鐮侊紝S/MIME錛孹ML絳夋柟闈㈢殑搴撱偮?/p>
C++聽Portable聽Types聽Library聽(PTypes)聽
鍙傝冪綉绔欙細http://www.melikyan.com/ptypes/聽
榪欐槸STL鐨勬瘮杈冪畝鍗曠殑鏇夸唬鍝侊紝浠ュ強鍙Щ妞嶇殑澶氱嚎紼嬪拰緗戠粶搴撱偮?/p>
LFC聽
鍙傝冪綉绔欙細http://lfc.sourceforge.net/聽
鍝︼紝榪欏張鏄竴涓皾璇曟彁渚涗竴鍒囩殑C++搴撀?/p>
聽
鍏朵粬搴撀?/p>
Loki聽
鍙傝冪綉绔欙細http://www.moderncppdesign.com/聽
鍝︼紝浣犲彲鑳芥姳鎬ㄦ垜鏃╄鍜孊oost涓璧蜂粙緇嶅畠錛屼竴涓疄楠屾ц川鐨勫簱銆備綔鑰呭湪loki涓妸C++妯℃澘鐨勫姛鑳藉彂鎸ュ埌浜嗘瀬鑷淬傚茍涓斿皾璇曟妸綾諱技璁捐妯″紡榪欐牱鎬濇兂灞傞潰鐨勪笢瑗塊氳繃搴撴潵鎻愪緵銆傚悓鏃惰繕鎻愪緵浜嗘櫤鑳芥寚閽堣繖鏍鋒瘮杈冨疄鐢ㄧ殑鍔熻兘銆偮?/p>
ATL聽
ATL(Active聽Template聽Library)鏄竴緇勫皬宸с侀珮鏁堛佺伒媧葷殑綾伙紝榪欎簺綾諱負鍒涘緩鍙簰鎿嶄綔鐨凜OM緇勪歡鎻愪緵浜嗗熀鏈殑璁炬柦銆偮?/p>
FC++:聽The聽Functional聽C++聽Library聽
榪欎釜搴撴彁渚涗簡涓浜涘嚱鏁板紡璇█涓墠鏈夌殑瑕佺礌銆傚睘浜庣敤搴撴潵鎵╁厖璇█鐨勪竴涓唬琛ㄤ綔銆傚鏋滄兂瑕佸湪OOP涔嬪瀵繪壘鍙︿竴鍒嗙殑涔愯叮錛屽彲浠ュ幓鐪嬬湅鍑芥暟寮忕▼搴忚璁$殑涓栫晫銆傚ぇ甯埪燩eter聽Norvig鍦?Teach聽Yourself聽Programming聽in聽Ten聽Years"涓鏂囦腑灝卞皢鍑芥暟寮忚璦鍒椾負鑷沖皯搴斿綋瀛︿範鐨?綾葷紪紼嬭璦涔嬩竴銆偮?/p>
FACT!聽
鍙傝冪綉绔欙細http://www.kfa-juelich.de/zam/FACT/start/index.html聽
鍙﹀涓涓疄鐜板嚱鏁板紡璇█鐗規х殑搴撀?/p>
Crypto++聽
鎻愪緵澶勭悊瀵嗙爜錛屾秷鎭獙璇侊紝鍗曞悜hash錛屽叕鍖欏姞瀵嗙郴緇熺瓑鍔熻兘鐨勫厤璐瑰簱銆偮?/p>
榪樻湁寰堝闈炲父嬋鍔ㄤ漢蹇冩垨鑰呮槸鏋佸叾瀹炵敤鐨凜++搴擄紝闄愪簬鎴戜滑鐨勬按騫充互鍙婃枃绔犵殑綃囧箙涓嶈兘鍖呮嫭榪涙潵銆傚湪瀵逛簬榪欎簺宸茬粡鍖呭惈榪戞潵鐨勫簱鐨勪粙緇嶄腑錛岀敱浜庡茍涓嶆槸姣忎竴涓垜浠兘浣跨敤榪囷紝鎵浠ラ毦鍏嶆湁鍋忛涔嬪錛岃璇昏呰璋呫偮?/p>
璧勬簮緗戠珯聽
姝e鎴戜滑鍙互閫氳繃璁$畻鏈哄巻鍙蹭笂鐨勯噸瑕佷漢鐗╀簡瑙h綆楁満鍙茬殑鍙戝睍錛孋++鐩稿叧浜虹墿鐨勭綉绔欎篃鍙互浣挎垜浠緱鍒版渶鏈変環鍊肩殑鍙傝冧笌鍊熼壌錛屼笅闈㈢殑浜虹墿鎴戜滑璁や負娌℃湁浠嬬粛鐨勫繀瑕侊紝鍙洜涓嬮潰鐨勪漢鐗╁湪C++棰嗗煙鐨勫湴浣嶄紬鎵鍛ㄧ煡錛屾垜浠彧灝嗙浉鍏崇殑璧勬簮榪涜緗楀垪浠ヤ緵璇昏呭涔狅紝浠栦滑鏈夌殑宸ヤ綔浜庤礉灝斿疄楠屽錛屾湁鐨勫伐浣滀簬鐭ュ悕緙栬瘧鍣ㄥ巶鍟嗭紝鏈夌殑鍦ㄤ笉鏂帹榪涜璦鐨勬爣鍑嗗寲錛屾湁鐨勪負璇昏呮挵鍐欎簡澶氶儴鍗冨彜濂囦綔......聽
Bjarne聽Stroustrup聽http://www.research.att.com/~bs/聽
Stanley聽B.聽Lippman聽
http:聽//blogs.msdn.com/slippman/聽涓枃鐗埪爃ttp:聽//www.zengyihome.net/slippman/index.htm
銆Scott聽Meyers聽http://www.aristeia.com/聽
David聽Musser聽http://www.cs.rpi.edu/~musser/聽
Bruce聽Eckel聽http://www.bruceeckel.com聽
Nicolai聽M.聽Josuttis聽http://www.josuttis.com/聽
Herb聽Sutter聽http://www.gotw.ca/聽
Andrei聽Alexandrescu聽http://www.moderncppdesign.com/
聽
4. virtual void Initiate(void);
鏁版嵁鍒濆鍖栥?鍒濆鍖栨暟鎹疄浣撶殑鏁版嵁.
5 錛?span lang=EN-US> virtual void Reset(void);
鏁版嵁澶嶄綅鎿嶄綔銆傛妸鏁版嵁瀹炰綋澶嶄綅鍒版煇涓鐘舵?span lang=EN-US>.
5. virtual CEntity * Clone(void) const;
鍏嬮殕鏁版嵁瀹炰綋. 榪欎釜鍑芥暟涓鑸繖鏍峰疄鐜?span lang=EN-US>: return new CEntity(*this);
6. virtual void Serialize(CArchive& ar);
鏁版嵁涓茶鍖?span lang=EN-US>. 浠ュ疄鐜版暟鎹疄浣撳乏鍙崇Щ鏂瑰紡鐨勫鏁版嵁瀹炰綋璧嬪?span lang=EN-US>,淇濆瓨絳夋搷浣?span lang=EN-US>. 甯告妸鍏朵笌CMemFile涓璧蜂嬌鐢?span lang=EN-US>,鎰熻鏁堟灉寰堝ソ.鍞竴涓嶈凍鐨勬槸瑙e喅鏁版嵁瀹炰綋鐗堟湰鍗囩駭鏃剁殑鏁版嵁涓鑷存х殑闂寰堥夯鐑?span lang=EN-US>.
7. virtual BOOL DataSet(const CEntity& ent);
鍒鋒柊鏁版嵁,瀹炵幇鏁版嵁瀹炰綋涔嬮棿鐨勮祴鍊兼搷浣?span lang=EN-US>.榪欎釜鍑芥暟涓昏鏄負浜嗚В鍐充笂涓綃囨墍鎻愮殑闂( C++闅忕瑪鍏充簬virtual poperator = ( 05-22 01:09) ). 鍙互鎶婁粬璁句負protected綾誨瀷, 鍚?span lang=EN-US>operator=緇撳悎璧鋒潵浣跨敤, 渚?span lang=EN-US>poperator =璋冪敤.
8. const CEntity& operator=(const CEntity& ent);
璧嬪兼搷浣?span lang=EN-US>.鍦ㄦ淳鐢熺被涓篃浼氶噸杞?span lang=EN-US>operator=, 涓嶆槸閲嶈澆鍩虹被鐨?span lang=EN-US>operator=.
9. 鍙﹀濡傛灉瀛樺湪鏁版嵁姣旇緝鐨勮瘽, 浼氶噸杞?span lang=EN-US>operator==鎿嶄綔絎?span lang=EN-US>.
friend bool operator==(const CEntity& ent1, const CEntity& ent2);
friend bool operator!=(const CEntity& ent1, const CEntity& ent2);
璋㈣阿鍏蟲敞~~~
浠ヤ笅闄勪笁鐩哥數嫻佺數鍘嬫暟鎹疄浣撻儴鍒嗗疄鐜頒唬鐮?span lang=EN-US>:
class CThreePhaseEntity: public CEntity
{
public:
CThreePhaseEntity ();
CThreePhaseEntity (const CSixPhaseEntity& ent);
~CSixPhaseEntity();
public:
CString GetTypeID(void) const;
void Initiate(void);
void Reset(void);
public:
CEntity * Clone(void) const;
void Serialize(CArchive& ar);
BOOL DataSet(const CEntity& ent);
public:
const CSixPhaseEntity& operator=(const CSixPhaseEntity& ent);
friend bool operator==(const CSixPhaseEntity& ent1, const CSixPhaseEntity& ent2);
friend bool operator!=(const CSixPhaseEntity& ent1, const CSixPhaseEntity& ent2);
public:
// 鑾峰彇涓夌浉鏁版嵁 , 鍐呰仈鍑芥暟
const float& GetSixPhaseData(int nDateType, int nPhaseMark) const;
// 淇敼涓夌浉鏁版嵁 , 鍐呰仈鍑芥暟
void SetSixPhaseData(int nDataType, int nPhaseMark, const float& fData);
private:
float m_gfRange[3]; // 騫呭?/span> ,
float m_gfPhase[3]; // 鐩鎬綅 ,
float m_gfFrequency[3]; // 棰戠巼
};
///******cpp 鏂囦歡
CThreePhaseEntity:: CThreePhaseEntity ()
{
Initiate();
}
CThreePhaseEntity:: CThreePhaseEntity (const CThreePhaseEntity & ent)
{
for(int i=0; i<3; i++)
{
m_gfRange[i] = ent.m_gfRange[i];
m_gfPhase[i] = ent.m_gfPhase[i];
m_gfFrequency[i] = ent.m_gfFrequency[i];
}
}
CThreePhaseEntity::~ CThreePhaseEntity ()
{
}
CString CThreePhaseEntity::GetTypeID(void) const
{
return _T("ENT_THREEPHASE ");
}
void CThreePhaseEntity::Initiate()
{
for(int i=0; i<3; i++)
{
m_gfRange[i] =
m_gfPhase[i] =
m_gfFrequency[i] =
}
}
void CThreePhaseEntity::Reset(void)
{
for(int i=0; i<3; i++)
{
m_gfRange[i] =
m_gfFrequency[i] =
}
m_ gfPhase [0] =
m_ gfPhase [1] =
m_ gfPhase [2] =
}
void CThreePhaseEntity::Serialize(CArchive& ar)
{
if(ar.IsStoring())
{
for(int i=0; i<3; i++)
{
ar<<m_gfRange[i]<<m_gfPhase[i]<<m_gfFrequency[i];
}
}
else
{
for(int i=0; i<3; i++)
{
ar>>m_gfRange[i]>>m_gfPhase[i]>>m_gfFrequency[i];
}
}
}
BOOL CThreePhaseEntity::DataSet(const CEntity& ent)
{
if(GetTypeID() != ent.GetTypeID()) return FALSE;
const CThreePhaseEntity * pEnt = reinterpret_cast<const CThreePhaseEntity *>(&ent);
(*this) = (*pEnt);
return TRUE;
}
CEntity * CThreePhaseEntity::Clone(void) const
{
return new CThreePhaseEntity (*this);
}
const CThreePhaseEntity & CThreePhaseEntity::operator=(const CThreePhaseEntity & ent)
{
if(this == &ent) return *this;
for(int i=0; i<3; i++)
{
m_gfRange[i] = ent.m_gfRange[i];
m_gfPhase[i] = ent.m_gfPhase[i];
m_gfFrequency[i] = ent.m_gfFrequency[i];
}
return *this;
}
bool operator==(const CThreePhaseEntity & ent1, const CThreePhaseEntity & ent2)
{
for(int i=0; i<3; i++)
{
if(ent1.m_gfRange[i] != ent2.m_gfRange[i]) return false;
if(ent1.m_gfPhase[i] != ent2.m_gfPhase[i]) return false;
if(ent1.m_gfFrequency[i] != ent2.m_gfFrequency[i]) return false;
}
return true;
}
bool operator!=(const CThreePhaseEntity & ent1, const CThreePhaseEntity & ent2)
{
return (ent1 == ent2) ? false : true;
}
CEntity::CEntity(char flag)
{
m_flag = flag;
cout<<"constructing entity "<<m_flag<<endl;
m_data = new char[100];
}
CEntity::~CEntity()
{
cout<<"destructing entity "<<m_flag<<endl;
delete[] m_data;
}
浠ヤ笂榪欎釜綾繪槸娌′粈涔堥棶棰樼殑錛屼絾鏄湅浠ヤ笅鐨勮皟鐢細
int main(int argc, char* argv[])
{
CEntity * a = new CEntity('a');
delete a;
void * b = new CEntity('b');
delete b;
return 0;
}
鍏惰緭鍑轟負錛?nbsp;constructing entity a
destructing entity a
constructing entity b
鍙錛宒elete b 鐨勬椂鍊欐病鏈夐噴鏀緈_data鎵鎸囧悜鐨勫唴瀛橈紝娌℃湁鎵ц鏋愭瀯鍑芥暟銆?nbsp;