锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鑰屽埌浜?/span>c++涓嬶紝璁捐瀛楃涓叉墍閬囧埌鐨勯棶棰橈紝灝辮繙姣旀兂璞′腑澶嶆潅錛屾棤涓敓鏈夌殑鍙堝嚟絀哄鍑烘潵寰堝涓嶅繀瑕佺殑瑕佹眰錛屽唴瀛樿祫婧愮鐞嗭紙榪欎釜鍦?/span>C++鍑犱箮鏄棤瑙o級錛屽紓甯稿畨鍏紙寰瀛楃涓叉坊鍔犳柊鍐呭錛屽亣濡傚唴瀛樺垎閰嶅け璐ワ紝蹇呴』淇濇寔鍘熸湁鍊肩殑瀹屾暣鎬э級錛岃繕鏈夋ц兘瑕佹眰錛堟埅鍙栧瓧絎︿覆閬垮厤鐢熸垚鏂扮殑瀛楃涓詫級銆傚緢澶氬緢澶氱殑瑕佹眰錛屽鑷磋璦灞傞潰涓婂帇鏍瑰氨娌℃硶涔熶笉鍙兘鎻愪緵鍘熺敓鐨勫瓧絎︿覆鏀寔錛岃岃繖涓鐐逛笂鍙堝紩鍑烘潵鏂扮殑闂錛屼唬鐮侀噷闈紝閫昏緫鎰忎箟涓婄湅錛屽氨涓嶆瀛樺湪涓縐嶅瓧絎︿覆綾誨瀷銆傚ソ鍦紝澶?/span>C++鎷ユ湁涓板瘜澶氬僵鐨?/span>feature錛屽簲璇ヨ凍浠ュ疄鐜板瓧絎︿覆綾誨瀷浜嗭紝榪欎篃鏄ぇC++鐨勮璁″摬瀛︼紝鏃㈢劧璇█涓婃病娉曞疄鐜扮殑涓滆タ錛屽氨鎻愪緵鐢ㄤ互鏀寔榪欑涓滆タ鐨?/span>feature錛岀敤鎴瘋鎬庝箞瀹炵幇灝辨庝箞瀹炵幇錛岄夋嫨鏉冧氦鍒扮敤鎴鋒墜閲屻?/span>
鎵浠ワ紝C++鐨勫簱瑕佹庝箞鍋氬嚭鏉ヤ竴閬?/span>string錛岃繖閬撹彍鐨勫懗閬撳浣曪紝灝卞緢璁╀漢濂藉銆備竴璺冨療涓嬫潵錛岃浜哄ぇ璺岀溂闀滐紝绔熺劧娌℃湁涓涓?/span>c++搴撹兘鎻愪緵鍝佽川浼樿壇瀛楃涓詫紝 鍏舵娊璞″厖鍏墮噺涔熷氨鏄瘮瀛楃鏁扮粍濂戒竴鐐圭偣錛屽畬鍏ㄥ氨娌℃湁Unicode緙栫爜鐨勬娊璞°?/span>Stl鐨勫瓧絎︿覆鏇磋浜哄彂鎸囷紝绔熺劧鏈夊嚑涓ā鏉垮弬鏁幫紝鏈潵澶氱被鍨嬬殑瀛楃涓查棶棰樺氨鏇存槸闆笂鍔犻湝浜嗭紝鍙﹀stl鐨?/span>string榪樹笉鑳戒綔涓?/span>dll鍑芥暟鐨勫弬鏁扮被鍨嬨傚叾瀹烇紝寰堝鏃跺欙紝鐚跨尨鐨勮姹傜湡鐨勪笉楂橈紝鍙姹備竴縐?/span>utf8緙栫爜鐨?/span>string錛屽甫鏈夋牸寮忓寲錛岃繕鏈変竴浜?/span>split錛?/span>trim錛?/span>FindOneOf錛?/span>toupper絳夊父鐢ㄥ瓧絎︿覆澶勭悊鐨勬搷浣滃氨琛屼簡錛屽彧鍙儨錛屾病鏈変竴涓?/span>c++搴撹兘鍩烘湰婊¤凍榪欐牱鐨勫熀鏈姹傘傚叾瀹烇紝榪欎簺瑕佹眰錛屽叿浣撳埌C++涓嬶紝瑕佸熀鏈弧瓚籌紝涔熺殑紜緢鍥伴毦銆?/span>
闄や簡c++錛屽緢澶氳璦鐨?/span>string綾誨瀷閮芥槸鍘熷瓙灞炴э紝涓涓?/span>string鍊鹼紝浣嗗嚒涓鐐歸鍚硅崏鍔紝閮借鐢熸垚鏂扮殑string鍊鹼紝鍘熸湁鐨勫煎繀欏諱繚鎸佷笉鍙樸傛澶栵紝鍏跺畼鏂逛篃鎻愪緵浜嗙被浼間簬StringBuffer鎴栬?/span>StringBuilder鐢ㄤ互鏋勯犲緢闀垮緢闀匡紝浠ュ譏琛ヨ繖縐嶅姩涓嶅姩灝辯敓鎴愭柊String鐨勬ц兘闂銆傝繖涓ょ綾誨瀷娉炬腑鍒嗘槑銆傝?/span>c++鐨?/span>string錛屼技涔庢槸鎶婅繖涓ょ綾誨瀷緋呭悎鍦ㄤ竴鍧椾簡錛岀敱姝ゅ甫鏉ヨ涔変笂鐨勪笉娓呮櫚錛屼篃閫犳垚寰堝涓嶅繀瑕佺殑楹葷儲錛屽洜涓虹粷澶у鏁板満鍚堜笅錛屽彧闇瑕佷嬌鐢?/span>string鐨勫師瀛愬睘鎬э紝鍙彉鐨?/span>string鍙槸鐢ㄦ潵淇濆瓨瀛楃緙撳啿鑰屽凡銆傜煡閬撳悧錛?/span>stl鐨?/span>string鏈変竴鐧懼涓垚鍛樺嚱鏁幫紝寰堝閮芥槸涓嶅繀瑕佺殑閲嶈澆錛屼笉榪囨槸涓轟簡閬垮厤瀛楃涓茬殑澶嶅埗鑰屽凡銆?/span>
鎵浠ワ紝棣栧厛瑕佸鍙鐨?/span>string鍋氭娊璞★紝涔熷嵆鏄?/span>string_view錛屽彧闇涓や釜鎴愬憳瀛楁錛屽瓧絎︿覆鐨勮搗濮嬪湴鍧浠ュ強緙撳啿闀垮害錛屽茍涓斾笉瑕佹眰浠?/span>0緇撴潫錛屽畠鏈変竴涓緢濂界殑鐗規э紝瀛楃涓茬殑浠諱綍涓閮ㄥ垎錛屼篃閮芥槸瀛楃涓詫紝鐢氳嚦錛屽繀瑕佹椂錛屼竴涓瓧絎︼紝閫氳繃鍙栧湴鍧錛屼篃鍙互鐪嬪仛鏄暱搴︿負1鐨?/span>string_view銆備換浣曡繛緇殑鍐呭瓨瀛楃鍧楋紝閮藉彲浠ョ湅鍋氭槸string_view銆傚叾涓嶅繀娑夊強鍐呭瓨鐨勫垎閰嶏紝鏄懼緱闈炲父鐨勮交閲忕駭錛屽彲浠ュ湪紼嬪簭涓埌澶勪嬌鐢紝鍙渶娉ㄦ剰鍒板瓧絎︾紦鍐茬殑鐢熷懡鍛ㄦ湡錛屽氨涓嶅繀鎷呭績浼氬紩鏉ヤ粈涔堥棶棰樸傚湪string_view涓婏紝鍙互鍋?/span>trim錛屾瘮杈冿紝鏌ユ壘錛屽弽鍚戞煡鎵劇瓑鎿嶄綔錛岄櫎浜嗚鍙栧崟涓瓧鑺傜殑榪唬鍣紝榪樻彁渚涗袱濂楄凱浠e櫒錛岀敤浠ュ彇鍒?/span>unicode鐮佷綅鍊鹼紙uin32錛夛紝鍜岀敤浠ヨ闂昏緫瀛楃錛屽叾鍊間篃涓?/span>stirng_view銆?/span>
鍓╀笅鏉ュ氨鏄彲鍐欏彲淇敼鐨?/span>string錛岃姹備互0緇撴潫錛屼篃鍗蟲槸stl鐨?/span>string錛屽洜涓哄緢澶氬嚱鏁伴兘鍦?/span>string_view涓婏紝鎵浠ヨ繖閲屽熀鏈笂閮藉彧鏄彃鍏ャ佹坊鍔犮佸垹闄ゃ佹浛鎹㈢殑鎿嶄綔錛岃娉ㄦ剰鐨勬槸錛屼腑鎷彿鎿嶄綔絎︿笉鑳借繑鍥炲瓧絎﹀紩鐢紝鍥犱負閭f牱瀹屽叏娌℃湁浠諱綍鎰忎箟錛屽氨綆楁槸淇濈暀涓嫭鍙瘋繑鍥炲瓧絎﹀鹼紝鎰忎箟涔熷緢灝忋?/span>Trim銆佹煡鎵俱佹瘮杈冪瓑鎿嶄綔錛屽繀欏婚氳繃鍏舵垚鍛樺嚱鏁?/span>view鏉ヨ繑鍥炰唬琛ㄨ嚜宸辯殑string_view銆?/span>String鐨勫緢澶氭垚鍛樺嚱鏁幫紝澶у鏁板弬鏁扮被鍨嬪氨鏄?/span>string_view錛屽洜姝や篃娌℃湁鍍忔槸鍦?/span>stl涓嬪瀮鍦?/span>string鐨勯偅涔堝涔變竷鍏碂鐨勯噸杞姐傚緢綆鏄庣殑璁捐錛屾ц兘涓庣畝鍗曠殑鑹ソ緇熶竴錛屼笉鐭ヤ負浣曪紝stl瑕佸埌c++17鐨勬椂鍊欙紝鎵嶄細鍔犲叆stirng_view榪欎箞閲嶈鐨勭被鍨嬶紝鍗充究鏄姝わ紝stl鐨?/span>string鏃㈡湁浠g爜宸叉垚瀹氬眬錛屼篃娌″姙娉曠敤string_view鏉ョ畝鍖栧畠鐨勪竴鐧懼涓殑鎴愬憳鍑芥暟浜?/span>
榪戜袱騫存潵鍦ㄥ啓C++鐨勮繍琛屾椂鐜錛屽弽灝勩佽繍琛屾椂綾誨瀷淇℃伅銆佸唴瀛樼鐞嗐佸茍琛屻佸瓧絎︿覆銆佸崗紼嬨?/span>ORM絳夌瓑錛屽熀鏈笂閲嶅啓浜嗕竴濂?/span>鏍囧噯搴撲互鍙婅繍琛屽簱銆傚浜庡湪c++涓嬩嬌鐢ㄥ瓧絎︿覆錛屾繁鏈変綋浼氥備竴寮濮嬪憰蹇冩播琛錛屾畾綺劇铏戯紝鏀寔澶氱緙栫爜鏂瑰紡錛?/span>Utf8銆?/span>Utf7銆?/span>GB2312銆?/span>Utf16LE錛?/span>Utf16BE絳夛級鐨勫瓧絎︿覆綾誨瀷錛屼互鍙婂湪姝や箣涓婄殑瀵硅繖浜涘瓧絎︿覆鎻愪緵鏍煎紡鍖栥佸瓧絎︿覆瑙f瀽銆?/span>json銆?/span>xml銆佹枃浠惰鍐?/span>BOM絳夌瓑鍔熻兘錛屽繀欏繪壙璁わ紝澶?/span>C++鐪熸槸鍙樻侊紝鍍忔槸榪欐牱鍙樻佹棤鑱婄殑姒傚康閮藉彲浠ユ敮鎸侊紝榪樺彲浠ュ疄鐜板緱寰堝ソ錛岀敤璧鋒潵紜疄涔熸柟渚褲傚彲鏄紝姣忔闈復瀛楃涓叉搷浣滅殑鏃跺欙紝閮戒細蹇冮噷鍙戞瘺錛岄兘浼氬榾鍜曟鏃舵鍒伙紝綰犵粨鐨勬槸鍝棬瀛愮殑緙栫爜錛屼篃鎼炲緱寰堝浠g爜蹇呴』浠?/span>template鐨勫艦寮忥紝鏀懼湪澶存枃浠朵笂錛屼笉鏀懼湪澶存枃浠訛紝灝卞繀欏繪娊璞″嚭鏉ヤ竴涓氱敤鐨勫姩鎬佸瓧絎︿覆綾誨瀷錛屼唬琛ㄤ換鎰忕紪鐮佺殑涓縐嶅瓧絎︿覆綾誨瀷錛屼唬鐮侀噷闈㈠紩鍏ュ悇縐嶅悇鏍瘋噯閫犵殑澶嶆潅鎬с傜粓浜庡彈涓嶄簡鍟︼紝鏈鍚庢悶鎴愮粺涓鐢?/span>utf8緙栫爜錛岄噸鏋勪簡鍑犲崈琛屼唬鐮侊紙鍗佸嚑涓枃浠訛級錛岀劧鍚庯紝鏁翠釜瀛楃涓蹭笘鐣岀粓浜庢竻闈欎簡錛屾帴鍙?/span>api璁捐浠涔堢殑錛屼篃涓涓嬪瓙娓呯埥浜嗗緢澶氥傛暣涓▼搴忓唴閮紝灝卞簲璇ュ彧浣跨敤鍚屼竴縐嶇紪鐮佺殑瀛楃涓層?/span>stl鐨勫甫鏈夊涓ā鏉跨殑string璁捐錛屽氨鏄棤鐥呭懟鍚燂紝鐢昏泧娣昏凍銆?/span>
涓轟粈涔堥夋嫨Utf8緙栫爜錛岄鍏堬紝闈?/span>unicode緙栫爜鐨勫瓧絎︿覆鏄笉鑳借冭檻鐨勶紱鍏舵錛?/span>utf16涔熸槸鍙橀暱鐨勭紪鐮佹柟寮忥紝鑰屼笖榪樻湁澶у皬绔殑鍖哄埆錛屾墍浠ヤ篃涓嶈兘鑰冭檻錛?/span>utf32鍙堝お鍗犵敤鍐呭瓨浜嗐傛兂鏉ユ兂鍘伙紝緇堜簬涓嬪畾鍐沖績錛?/span>utf8綆鐩村氨鏄敮涓鐨勯夋嫨浜嗐傝櫧鐒跺彲鑳芥湁榪欐牱閭f牱鐨勫皬闂錛屾瘮濡傝錛岀函涓枃鏂囨湰錛?/span>utf8鍗犵敤澶?/span>50%鍐呭瓨錛堢浉姣斾簬Utf16錛夛紝windows涓?/span>utf8鏈夌偣涓嶅弸濂姐備絾鍏跺疄閮戒笉鏄棶棰橈紝涔熼兘鍙互瑙e喅銆傛瘮濡傝錛?/span>windows涓嬶紝鎵鏈夌殑娑夊強瀛楃涓蹭笌緋葷粺鐨?/span>api浜や簰錛屽厛涓存椂杞崲鎴?/span>utf16錛岀劧鍚庡啀璋冪敤api銆?/span>api鐨勮繑鍥炵粨鏋滀負utf16錛屽啀杞崲涓?/span>utf8銆傚ソ鍍忔湁涓鐐規ц兘涓婄殑鎹熷け錛屽叾瀹炴病鍟ュぇ涓嶄簡鐨勩?/span>windows瀵逛簬澶氬瓧鑺備篃鏄繖鏍鋒敮鎸佺殑錛屽畬鍏ㄥ氨鎰熷彈涓嶅埌鎬ц兘涓婄殑褰卞搷銆傛諱箣錛?/span>utf8綆鐩村氨鏄▼搴忓鐞嗙殑鍞竴瀛楃涓茬紪鐮併?/span>
鍚愭Ы涓涓?/span>std鐨勫瓧絎︿覆錛屼互鍙婁笌姝ょ浉鍏崇殑涓鍒囨蹇碉紝iostream錛?/span>locale絳夌瓑涓滆タ錛屽瀮鍦捐璁$殑鍏歌寖銆傛帴鍙d笉鍙嬪ソ錛屽姛鑳藉急錛岃屼笖榪樻ц兘宸紝鏇村叧閿殑鏄叾鎶借薄涓婄殑娉勬紡銆備竴鏁村ぉ灝卞彧浼氬湪寮曠敤璁℃暟錛屽啓鏃跺鍒訛紝鐭瓧絎︿覆浼樺寲涓婂仛鏂囩珷錛屾椂闂寸簿鍔涢兘涓嶇敤鍦ㄥ垁鍒冧笂銆?/span>C++17緇堜簬寮曞叆string_view鐨勭被鍨嬶紝鎯呭喌紼嶅井鏈変簺鏀瑰杽銆傜敱浜庡瓧絎︿覆浣跨敤涓婁笉鏂逛究錛屼篃鍥犳鎹熷け浜嗕竴澶х墖鐨勭敤鎴鳳紝闃靛湴涓鍐嶅け瀹堛傛暣浣撲笂璁詫紝stl鐨勮璁★紝鑷劧鏄湁綺懼績鐨勮冭檻錛屼絾鏄紝浣滃嚭榪欎簺鎶借薄鐨勬爣鍑嗕細涓婁竴澶х兢鐨勮佺埛瀛愪滑錛屽ぇ姒傜巼涓婅錛屽簲璇ユ槸娌℃湁鐢?/span>stl姝e効鍏粡鍦板紑鍙戝伐涓氱駭涓婄殑浠g爜錛岃噯閫犳娊璞★紝欏捐檻澶錛岃〃闈笂鐪嬭搗鏉ュソ鍍忔槸閭d箞涓鍥炰簨錛岀湡姝g敤璧鋒潵鐨勬椂鍊欙紝灝變笉澶鍔詫紝浼氭湁榪欐牱閭f牱鐨勪笉瓚籌紝寰堜笉鏂逛究銆?/span>
綆鍗曡涓涓?/span>U8String鐨勮璁℃濊礬銆?/span>U8String鐢ㄤ互綆$悊瀛楃涓茬紪鐮佺紦瀛樼殑鐢熷懡鍛ㄦ湡錛岃拷鍔犵緝鐭浛鎹㈠瓧絎︿覆錛屾敮鎸侀氳繃涓嬫爣鍙互璇誨彇瀛楄妭char錛屼絾鏄笉鏀寔灝嗗瓧鑺傚啓鍏ュ埌鏌愪釜绱㈠紩涓婄殑浣嶇疆錛屽綋鐒舵敮鎸佸線瀛楃涓蹭腑鎻掑叆unicode緙栫爜鐨勫瓧絎︺傝嚦浜庡瓧絎︿覆鐨勬瘮杈冦佹煡鎵俱?/span>Trim銆佹埅鍙栧瓙瀛楃涓茶繖浜涘父鐢ㄦ搷浣滐紝灝卞叏閮ㄥ帇鍦?/span>U8View涓娿傚鏋?/span>U8String瑕佷嬌鐢ㄨ繖浜涳紝瑕佸厛閫氳繃view鐨勫嚱鏁幫紝鑾峰彇鑷繁瀛楄妭緙撳瓨涓嬬殑瑙嗗浘銆?/span>U8View琛ㄧず涓孌佃繛緇殑瀛楃緙栫爜鍐呭瓨錛?/span>U8View鐨勪換鎰忎竴閮ㄥ垎涔熸槸U8View錛屼笉瑕佹眰浠?/span>0緇撴潫銆傚彧瑕佹眰U8View鐨勭敓瀛樺懆鏈熶笉鑳芥瘮鍏跺涓伙紙U8String錛屽瓧絎︽暟緇勶紝U8鍘熺敓瀛楃涓詫級闀垮懡銆備簨瀹炰笂錛屽緢澶?/span>api鐨勫瓧絎︿覆鍙傛暟錛屽叾瀹炲彧鏄姹備負U8View灝辮浜嗭紝涓嶉渶瑕佹槸浠涔?/span>const string&綾誨瀷銆傛澶栵紝榪樻彁渚?/span>U8PointPtr鐨勬寚閽堢被鍨嬶紝鐢ㄤ互閬嶅巻U8View錛屽叾鍙栧間負unicode緙栫爜鍊鹼紝涔熷氨鏄?/span>wchar_t綾誨瀷銆傚彟澶栵紝鏃㈢劧鏈?/span>U8View錛岃嚜鐒朵篃灝辨湁ArrayView錛屼唬琛ㄨ繛緇唴瀛樺潡鐨勪換鎰忕被鍨嬨?/span>
鑷劧錛屽簱涓繀欏繪彁渚涙牸寮忓寲Fmt浠ュ強瑙f瀽瀛楃涓?/span>Scanf鐨勫嚱鏁般?/span>StrFmt鐢ㄤ互鐢熸垚鏂扮殑U8String錛岃?/span>Fmt鏍煎紡鍖栧嚱鏁頒腑浼犲叆瀛楃涓茬殑璇濓紝灝卞皢鏍煎紡鍖栫粨鏋滆拷鍔犲埌瀛楃涓插悗闈€?/span>Fmt鍙互鏍煎紡鍖栨暟鎹埌鎺у埗鍙幫紝鏂囨湰鏂囦歡錛屾棩蹇楃瓑絳夎緭鍑虹粨鏋滀笂銆?/span>StrFmt鐨勫疄鐜板彧鏄畝鍗曞湴璋冪敤Fmt騫惰繑鍥?/span>U8String銆傛湁浜?/span>Fmt鍜?/span>Scanf錛屾搷浣滃瓧絎︿覆灝卞緢鏂逛究寰堢伒媧諱簡錛屽悓鏃朵篃娑堥櫎寰堝寰堝鏈夊叧瀛楃涓茬浉鍏崇殑澶勭悊鍑芥暟銆?/span>Fmt涓嶄粎浠呰兘鏍煎紡鍖栧熀鏈被鍨嬶紝鑷畾涔夌被鍨嬶紝榪樿兘鏍煎紡鍖栨暟緇勶紝vector錛?/span>list錛?/span>pair錛?/span>tuple絳夋ā鏉跨被鍨嬬殑鏁版嵁銆傚簱涓篃鎻愪緵浜嗙被浼間簬iostream閲嶈澆<<鍜?/span>>>鐨勬搷浣滅銆傚ぇC++鎻愰珮鐨?/span>feature錛岄犲嚭鏉ョ殑string綾誨瀷錛屼嬌鐢ㄤ笂鐨勬柟渚匡紝涓鐐歸兘涓嶉婅壊浜庡叾浠栦換浣曡璦鐨勫師鐢?/span>string綾誨瀷銆傚綋鐒訛紝std鐨勯偅涓?/span>string錛岀畝鐩村氨鏄簾鐗┿?/span>
涓嶇鎬庝箞璇達紝鏈漢榪樻槸寰堝枩嬈?/span>C++鐨勶紝鐢?/span>c++鍐欎唬鐮佸緢鑸掔晠錛屽彲姣旂敤C#銆?/span>haskell銆?/span>lisp銆?/span>scala鏃惰寮蹇冨緢澶氥?/span>C++鍙戝睍鍒?/span>C++11錛屽熀鏈姛鑳戒篃閮藉畬澶囦簡錛屽綋鐒訛紝C++14銆?/span>C++17鑷劧鍔熻兘鏇村姞寮哄ぇ錛岀壒鍒槸瀹炵幇妯℃澘搴撶殑鏃跺欙紝灝辨洿鏂逛究浜嗭紝涔熺‘瀹炲緢鍚稿紩浜恒傝嚜鐒訛紝C++涔熼潪鍗佸叏鍗佺編錛屼篃鏈夊緢澶氱殑涓嶈凍錛屾瘮濡備笉鑳借嚜瀹氫箟鎿嶄綔絎︼紝涓嶆彁渚涢潪渚靛叆寮忕殑鎴愬憳鍑芥暟錛岀己涔忓歡榪熸眰鍊肩殑璇█鏈哄埗錛屽紩鐢ㄧ殑淇敼緇戝畾錛堝彧瑕佷笉緇戝畾鍒?/span>nullptr灝卞ソ浜嗭級錛屾垚鍛樺嚱鏁版寚閽堢殑鏃犵闄愬埗銆備絾鏄紝涓栫晫涓婂張鍝噷瀛樺湪瀹岀編鐨?/span>language鍛紝鐗瑰埆鏄浜庤繖縐嶇洿鎺ユ搷綰靛唴瀛樼殑搴曞眰璇█鏉ヨ銆傝嚦浜?/span>rust錛屽彨鍤g潃瑕佸彇浠?/span>c++錛屽氨瀹冮偅鍓壒鎬э紝榪樿繙鐫鍛€?/span>
搴熻瘽灝變笉璇翠簡錛岀洿鍏ユ棰樺惂銆?/span>
鍋囪錛岀幇鍦ㄦ湁鎺ュ彛錛屽亣璁炬槸IUnknown錛岄噷闈㈡湁閭d笁涓憲鍚嶇殑綰櫄鍑芥暟錛?/span>QueryInterface, AddRef, Release錛屽ソ鍍忔槸榪欎笁涓摜淇┿?/span>
鐒跺悗錛屾湁涓涓被錛屽氨鍙?/span>ClassA錛屽疄鐜頒簡IUnknown鎺ュ彛錛屽叾瀹炲氨鏄戶鎵?/span>IUnknown錛屼篃灝辨槸璇達紝閲嶅啓浜嗛偅涓変釜綰櫄鍑芥暟銆傛澶栵紝ClassA榪樻湁涓澶у爢鑷繁鐨勪笢瑗匡紝姣斿public鐨勫瓧孌墊垨鑰呮垚鍛樺嚱鏁般?/span>
鐜板湪錛屾湁ClassB錛屾兂鍩轟簬ClassA鏉ュ仛涓浜涗簨鎯咃紝浣嗘槸鍙堜笉鎯寵鐢ㄦ埛鐪嬪埌ClassA閲岄潰閭d簺涔變竷鍏碂鐨勭帺鎰忥紝鍥犳錛岃繖縐嶆儏鍐典笅錛岀敤private浼間箮寰堝悎閫傘備唬鐮佸涓嬶細
struct IUnknown
{
public:
virtual HRESULT QueryInterface(REFIID riid,void** ppvObject) = 0;
virtual ULONG AddRef() = 0;
virtual ULONG Release() = 0;
};
struct ClassA : IUnknown
{
virtual HRESULT QueryInterface(REFIID riid, void** ppvObject) override { ... }
virtual ULONG AddRef() override { ... }
virtual ULONG Release() override { ... }
...
};
struct ClassB : private ClassA
{
...
};
榪欓噷錛屽唴瀛樼殑浣跨敤涓婇潪甯哥揣鍑戯紝鍙互璇達紝娌℃湁澶氫綑鐨勫湴鏂廣備絾鏄紝榪欓噷鐨?/span>private錛屼笉浠呬粎浼?/span>private ClassA鐨勪竴鍒囷紝灝辮繛IUnknown涔熻private錛岃繖鏈夋椂鍊欏氨涓嶇鍚堣姹備簡錛屽洜涓鴻繖閲屾剰鍥炬槸錛?/span>private ClassA錛屼絾鏄張鎯?/span>public IUnknown錛屼篃灝辨槸璇達紝瀵瑰鐣屾潵璇達紝ClassB涓嶆槸ClassA錛岃櫧鐒跺叾鍐呴儴鍩轟簬ClassA瀹炵幇錛屼絾鏄紝鍙堝笇鏈?/span>ClassB鏄?/span>IUnknown銆傚姝わ紝鏈夊嚑縐嶈В鍐沖仛娉曪紝浣嗘槸閮戒笉鑳借浜烘弧鎰忋?/span>
鏂規硶1銆佽ClassB鍐嶆瀹炵幇IUnknown鎺ュ彛錛屽涓嬫墍紺猴細
struct ClassB : private ClassA, public IUnknown
{
virtual HRESULT QueryInterface(REFIID riid, void** ppvObject) override { ... }
virtual ULONG AddRef() override { ... }
virtual ULONG Release() override { ... }
};
鍏跺ソ澶勬槸錛?/span>ClassB鐨勫疄渚嬪彲浠ユ棤緙濈敤浜?/span>IUnknown鐨勪竴鍒囧満鍚堬紝涓嶇鏄紩鐢ㄦ垨鑰呮寚閽堬紝const闈?/span>const銆備絾鏄紝浠d環涔熸槸寰堝ぇ鐨勶紝棣栧厛瑕侀拡瀵?/span>IUnknown鐨勬瘡涓櫄鍑芥暟錛岄兘瑕佷竴涓鎵嬪啓錛屽啀嬈¤漿鍙戠粰private鐨勫熀綾伙紝鍏舵錛?/span>ClassB姣?/span>ClassA澶氫簡涓涓櫄鍑芥暟琛ㄦ寚閽堬紝澶у皬灝辨瘮鍘熸潵澶氫簡涓涓寚閽堢殑澶у皬錛岃繖灝變笉鏄浂鎯╃綒浜嗭紝榪欐槸鏈涓嶈銆?/span>
鏂規硶2錛岃繕鏄繚鎸佺鏈夌戶鎵匡紝鍐嶅湪ClassB涓坊鍔犲嚑涓嚱鏁幫紝鐢ㄤ互榪斿洖IUnknown錛屼唬鐮佸涓?/span>
struct ClassB : private ClassA
{
//涔熷彲浠?/span>using ClassA鐨勪笁涓?/span>IUnknown閲岄潰鐨勫嚱鏁?/span>
const IUnknown* GetUnknown()const { return this; }
IUnknown* GetUnknown()const { return this; }
};
閬垮紑浜嗘柟娉?/span>1鐨勪笉瓚籌紝浣嗘槸灝變笉鑳芥棤緙濈敤浜?/span>IUnknown涓嬶紝姣忔浣跨敤蹇呴』璋冪敤涓涓?/span>GetUnknown()錛屽浜庡紩鐢ㄧ殑鎯呭喌涓嬶紝榪樺繀欏誨姞澶氫竴涓槦鍙?/span>*錛屼篃鏄尯涓嶆柟渚跨殑銆傚浜嗭紝榪欓噷灝辯畻娣誨姞浜嗙被鍨嬪嚱鏁伴噸杞斤紝涔熷嵆鏄?/span>operator IUnknown錛岀紪璇戝櫒涔熸嫆緇濆皢ClassB鏃犵紳杞崲鎴?/span>IUnknown銆?/span>
鏂規硶3錛岀敤鍖呭惈錛屼笉鐢ㄧ鏈夌戶鎵褲傚涓嬶細
struct ClassB
{
ClassA mA;
operator const IUnknown&()const { return *this; }
operator IUnknown&() { return *this; }
};
榪欐牱瀛愶紝ClassB鐨勫疄渚嬪彲浠ユ棤緙濈敤浜?/span>IUnknown寮曠敤涓嬬殑鎯呭喌銆傚浜庢寚閽堢殑璇濓紝鍙互浠塊犳柟娉?/span>2閭f牱瀛愶紝鍐欎袱涓嚱鏁拌繘琛岃皟鐢ㄣ傝矊浼肩患鍚堣搗鏉ワ紝鏂規硶3鐨勬暣浣撳垎鏁版渶楂樸?/span>
灝變釜浜鴻岃█錛屾洿鍋忓悜浜庯紝鐩存帴灝辮ClassB public緇ф壙ClassA濂戒簡錛屽皯浜嗛偅涔堝楝兼紝铏界劧鍑虹幇寰堝涓嶅繀瑕佺殑鍑芥暟錛屽叾瀹炰篃娌′粈涔堜笉濂姐?/span>
1銆?nbsp;c++寰堝ソ寰堝己澶э紝鐩茬洰榪芥眰榪愯鎬ц兘錛岀畝鐩村反鏅礇澶潯浠跺弽灝勶紝璐$尞浜嗕竴澶у潹鍨冨溇浠g爜錛?/span>
2銆?nbsp;c++鐨勯潰鍚戝璞″鎸佸緢鍨冨溇錛屼粈涔堥錛屼唬鐮佸緢瀹規槗灝辮﹀悎錛屼簬鏄糠涓婂璞?/span>+娑堟伅鍙戦佺殑闈㈠悜瀵硅薄錛?/span>
3銆?nbsp;c++澶鏉備簡錛?/span>template澶娊璞★紝澶╁椋炰粰錛屾悶涓嶆噦錛屼簩榪涘埗澶嶇敤鍙堝樊銆傛暣涓?/span>c++灝辨槸鍨冨溇錛岀畝鐩寸▼搴忚璁¤璦閲岄潰鐨勮觸綾伙紝C璇█澶氬ソ鍟婏紝灝忓閥綺捐嚧綆鍗曟竻鏅幫紱
4銆?nbsp;浣跨敤鍏朵粬璇█鍋氬紑鍙戯紝java銆?/span>C#銆?/span>F#銆?/span>elisp銆?/span>scheme銆?/span>python銆?/span>haskell銆?/span>javascript銆?/span>php絳夌瓑涓澶у潹璇█錛屾劅姒傛瘡涓縐嶈璦閮芥瘮鍨冨溇C++涓嶈濂藉お澶氾紝鍙戣獡涓嶅啀鐢?/span>c++鍐欏摢鎬曚竴琛岀殑浠g爜錛?/span>
5銆?nbsp;鏌愪竴澶╋紝紿佺劧鏈夌偣鐞嗚В浜嗚繖縐嶈璦錛屼竴鍒囧彉寰楁竻鏅頒簡錛屽師鏉?/span>c++涔熺浉褰撲笉閿欙紝涔熷彲浠ュ仛涓浜涗簨鎯咃紝鐪嬪紑涔嬪悗錛屾劅瑙夊紑鍙戞晥鐜囦篃璺熶笂鏉ヤ簡錛屽仛鍚屾牱鐨勪簨鎯咃紝鐢?/span>c++瀹炵幇涓嶄細姣?/span>C#銆?/span>python絳夋參銆?/span>
鐩告瘮浜庡叾浠栬璦錛?/span>c++鐨勭嫭鐗逛紭鍔垮湪浜?/span>
棰勭紪璇戞湡鐨勪吉鍥劇伒瀹屽錛岃繖涓鐐癸紝濂藉璇█榪樻槸鏈夌殑錛屽茍涓旀洿瓚呯駭濂斤紝姣斿rust錛?/span>scheme
緙栬瘧鏈熼棿鐨?/span>C++鏄姛鑳藉畬澶囩殑瑙i噴鍣紝鍏惰緭鍑虹粨鏋滄槸姝e父榪愯鐨?/span>c++浠g爜錛岀粨鍚堝畯錛屽彲浠ュ埗閫犲緢澶氬叾浠栬璦蹇呴』鍦ㄨ娉曞眰闈笂鏀寔鐨勮娉曠硸銆傝繖涓В閲婂櫒鐨勫濡欎箣澶勫湪浜庡畠榪愯浜庣紪璇戞湡錛屼竴鏃﹂敊璇殑妯℃澘浠g爜瑕佽繘鍏ヨ繍琛屾湡錛屽氨浼氬嚭鐜扮紪璇戦敊璇紝鑰屼笉闇瑕佽繘鍏ヨ繍琛屾椂鐨勪唬鐮侊紝鍗充究澶╁ぇ閿欒錛屼篃閮戒笉瑕佺揣錛岃屼竴鏃﹁繖孌典唬鐮佽榪涘叆榪愯鏃訛紝閭d箞妯℃澘閿欒灝遍冧笉榪囩紪璇戞湡瑙i噴鍣ㄧ殑娉曠溂銆?/span>
鐢熸垚鍚勭鍐呭瓨甯冨眬鐨勪究鍒╄娉曠硸鍜岃嚜鐢辯殑鍐呭瓨鎿嶆帶錛涗笉鍚岀被鍨嬬殑瀵硅薄錛屽彧瑕佸叾鍐呭瓨甯冨眬涓鑷達紝閫氳繃寮哄埗杞崲錛屽氨鍙寜鍚屼竴綾誨瀷鏉ュ鐞嗭紝榪欎竴鐐逛綔姝昏兘鍔涳紝緇濅笉琚湁gc鐨勮璦鏀寔銆傚唴瀛樼殑鏃犺妭鎿嶇帺寮勶紝緇撳悎template錛屽垎鍒嗛挓灝辮兘浠跨湡鍑烘潵鍏朵粬蹇呴』璇█灞傞潰涓婃彁渚涚殑鏁版嵁緇撴瀯錛岀被鍨嬪畨鍏ㄣ佽繍琛屾ц兘銆佹槗鐢ㄦэ紝涓鐐歸兘涓嶉婅壊錛屽ソ姣?/span>string錛屽鎵橈紝鍏冪粍錛屽垪琛紝鍙┖綾誨瀷錛?/span>
C++鐨勪笓鏈夌壒鎬э紝raii銆佸緇ф壙鍜屽叏灞鍙橀噺銆傜壒鍒槸鍏ㄥ眬鍙橀噺錛岀粨鍚堝畠鐨勬瀯閫犲嚱鏁扮壒鐐瑰拰綾誨瀷鎺ㄥ錛屾墍鑳界帺鍑烘潵鐨勪赴瀵屾柊鑺辨牱錛屽叾浠栬璦寰堥毦鍋氬埌銆傚叏灞鍙橀噺鏄繛鎺ヨ繍琛屾湡鍜岀紪璇戞湡鐨勬ˉ姊併傚鏋滄病鏈夊叏灞鍙橀噺錛屾湰搴у簲璇ヤ笉浼氬啀嬈″c++浜х敓鐑儏銆傚鎬殑鏄紝鑷充粖涓烘錛?/span>c++鐨勫熀紜搴撻兘涓嶆庝箞鎸栨帢鍏ㄥ眬鍙橀噺鐨勬綔鑳姐傚綋鐒訛紝瀵瑰叏灞鍙橀噺鐨勪嬌鐢紝鑲畾鏄妸瀹冨綋鍋氬父閲忔潵鐢紝鍏ㄥ眬鍙橀噺鏈夊敮涓鐨勫唴瀛樺湴鍧錛屽氨璧峰埌鍘熷瓙鐨勪綔鐢紝浣嗗畠鍙堝彲鎵撳寘浜嗕赴瀵岀殑闈欐佺被鍨嬩俊鎭?/span>
浠ヤ笂鐨勭嫭鐗癸紝閫犲氨浜?/span>c++灞傚嚭涓嶇┓鐨勬柊鎰忥紝鑰屽崜瓚婄殑榪愯鎬ц兘錛屽彧鏄叾寰笉瓚抽亾鐨勪紭鐐廣傝櫧鐒惰錛岃璦涓嶉噸瑕侊紝鎬濇兂鎵嶉噸瑕侊紝杞歡鏋舵瀯鎵嶉噸瑕侊紝浣嗘槸c++鎵鑳芥壙杞界殑鎬濇兂錛屼互鍙婂叾鍒拌揪鐨勬娊璞¢珮搴︼紝鐨勭‘灝辯湡鐨勫ぇ澶ч檷浣庢鏋剁殑澶嶆潅鎬э紝璇氱劧錛?/span>c++鐨勫熀紜搴撳紑鍙戣闈復鏃犵┓鏃犲敖鐨勭粏鑺傜籂緇擄紝鍏跺疄錛岃繖涔熷弽鏄犱簡c++緙栬瘧鍣ㄦ帉鎺х粏鑺傜殑鑳藉姏錛屽洜姝わ紝鎴戜滑鍙堝彲浠ヨ緙栬瘧鍣ㄨ嚜鍔ㄥ畬鎴愬緢澶氬緢澶氱粏鑺傞噸澶嶏紝浠庤屽ぇ騫呭害鍦板噺杞諱唬鐮佹暟閲忥紝榪樻棤鎹熷叾榪愯鎬ц兘銆傚張鐢變簬c++瀹屽寮哄ぇ鐨勯潤鎬佺被鍨嬬壒鎬э紝鍦ㄧ敤鍔ㄦ佽璦椋庢牸鐨勭畝媧佹潵緙栧啓浠g爜鐨勫悓鏃訛紝鍙堟棤鎹熷叾蹇熸柟渚垮湴浠g爜閲嶆瀯銆傜瑪鑰呯殑鍩虹搴撻」鐩紝鍑犲崄嬈″ぇ瑙勬ā鐨勯噸鏋勶紝鍊熷姪鍗曞厓嫻嬭瘯錛屼繚璇佷簡閲嶆瀯欏哄埄蹇熺殑瀹屾垚錛屾繁鎰?/span>c++鍦ㄩ噸鏋勪笂鐨勪究鍒╋紝榪欎簺浠g爜錛屽寘鎷笉鍒?/span>1鍗冭鍗村姛鑳藉畬鏁寸殑xml搴擄紙榪樻敮鎸佸璞′笌xml鏁版嵁鐨勭洿鎺ヤ簰鐩歌漿鎹級錛涗笉鍒?/span>1鍗冭鍗翠竴鐐歸兘涓嶉婅壊浜?/span>boost鐨?/span>spirit緇勫悎瀛愯В閲婂櫒錛堢紪璇戦熷害鍗村揩浜嗗緢澶氾紝璇硶涓婄畝媧佸緢澶氾紝鏇磋兘鏂逛究鍦拌В閲婂悇縐嶈娉曪級錛涙墠1鍗冨琛岀殑寮傛io妗嗘灦錛涜緭鍏ヨ緭鍑猴紝鏂囦歡鎿嶄綔錛屾暟鎹簱錛屽崗紼嬬瓑浠g爜閮界畝媧佸紓甯革紝鎵鏈夎繖浜涗唬鐮侀兘鏀寔鍔ㄦ佸簱涓婄殑浜岃繘鍒跺鐢紝璁╀漢寰堟儕璇т簬c++鐨勫厜鎬檰紱葷殑寮哄ぇ銆?/span>
褰撶劧錛?/span>c++鐨勭己闄蜂篃闇囨捈浜哄績錛?/span>
1銆?nbsp;璇█鐗規уお榪囩箒鏉傛娊璞″井濡欙紝姣斿template銆佸緇ф壙銆佽繍綆楃閲嶈澆銆佺被鍨嬭漿鎹€佸吋瀹規ц冭檻鐨勫緢澶氱碂緋曡璦鐗規э紝鎵浠ュ浣跨敤鑰呯殑鑺傚埗鍔涜姹傚緢楂橈紝瑕佹眰浠栦滑鏃跺埢娓呮鑷繁鍦ㄥ共浠涔堬紝鐞愮涓婄殑鎬濊冨お澶氾紱
2銆?nbsp;緙轟箯緇熶竴鐨勪簩榪涘埗鏍囧噯錛屽熀紜搴撻兘鐢ㄦ簮浠g爜鐨勫艦寮忓叡浜紝榪欒鍘熸湰灝遍緹閫熺殑緙栬瘧閫熷害鏇村姞鍦頒護浜哄ぇ澶ф劅鍔紱
3銆?nbsp;緙轟箯楂樻爣鍑嗙殑鍩虹搴擄紝stl鍜?/span>boost鏇村湪鏌愪簺鎶鏈繍鐢ㄧ殑灞曠ず涓婃洿璧峰埌寰堝潖鐨勫獎鍝嶏紱
4銆?nbsp;緙轟箯鏌愪簺寤惰繜姹傚肩殑鏈哄埗錛岀己涔忓繀瑕佺殑鍑芥暟寮忚璦鏈哄埗錛屾墍浠?/span>c++濮嬬粓灝辨棤娉曟垚涓哄爞鍫傛姝g殑鐜頒唬鍖栭珮綰ц璦錛?/span>
灝辮繖鏍峰惂銆?/span>
铏界劧錛屽緢鏃╁氨娓呮鎬庝箞鍦?/span>c++涓嬫悶闈炰鏡鍏ュ紡鎺ュ彛錛屼絾鏄紝鏁翠釜妗嗘灦浠g爜錛岄噸鏋勪簡鍗佸嚑嬈′箣鍚庯紝鎵嶇粓浜庢弧鎰忋傛敮鎸佺粰鍩烘湰綾誨瀷娣誨姞鎺ュ彛錛屽ソ姣?/span>int錛?/span>char錛?/span>const char*錛?/span>double錛涙敮鎸佹硾鍨嬶紝濂芥瘮vector錛?/span>list錛涙敮鎸佺戶鎵匡紝鍩虹被瀹炵幇鐨勬帴鍙o紝琛ㄧず瀛愮被涔熺戶鎵夸簡瀵硅鎺ュ彛鐨勫疄鐜幫紝鑰屼笖瀛愮被涔熷彲浠ユ嫆緇濆熀綾葷殑鎺ュ彛錛屽ソ姣旈腑瀛愭嫆緇濆熀綾婚笩綾?#8220;浼氶”錛岀紪璇戞椂鎶ラ敊錛涙敮鎸佹帴鍙g粍鍚堬紱……錛屼絾鏄紝榪欓噷浠呬粎綆鍗曚粙緇嶅叾鍘熺悊錛屽茍涓嶆秹鍙奀++涓悇縐嶅彉鎬佺粏鑺傜殑澶勭悊錛孋++涓紝浣嗗嚒鏄姝e効鍏粡鐨勭◢寰仛鐐規浜嬶紝灝辮闈復鏃犵┓鏃犲敖鐨勭粏鑺傜籂緇撱?/span>
鍏堢湅鐪嬪叾浣跨敤渚嬪瓙錛?/span>
1銆佽嚜鐒舵槸瀹氫箟涓涓帴鍙o細鍙栦箣浜庣湡瀹炰唬鐮佺墖孌?/span>
2銆佹帴鍙g殑瀹炵幇綾伙紝鍋囪涓?/span>int娣誨姞IFormatble鐨勬帴鍙e疄鐜幫紝瀹為檯浠g爜鑲畾涓嶄細榪欐牱瀵逛竴涓竴涓殑鍩烘湰綾誨瀷鏉ュ啓瀹炵幇綾葷殑浠g爜銆傝繖閲屽彧鏄負浜嗕婦渚嬭鏄庛傜被鐨勫悕瀛楀氨闅忎究璧峰ソ鍟︼紝
榪欓噷鐨勫叧閿槸錛屽疄鐜扮被鐨勫瓧孌佃瑙勫畾姝諱簡錛屾渶澶氬彧鑳藉寘鍚?/span>3涓寚閽堟垚鍛樺瓧孌碉紝涓旂1涓瓧孌典竴瀹氭槸鐩殑綾誨瀷鎸囬拡錛岀浜屾槸綾誨瀷淇℃伅瀵硅薄錛堢敤浜庢硾鍨嬶級錛岀涓夋槸棰濆鍙傛暟錛屾搴忎笉鑳戒貢銆傛垚鍛樺瓧孌靛鏋滀笉闇瑕佺敤鍒扮浜岀涓変釜鎴愬憳瀛楁鏁版嵁錛屽彲浠ョ渷鐣ヤ笉鍐欙紝濂芥瘮榪欓噷銆傛墍鏈夋帴鍙e疄鐜扮被蹇呴』閬靛畧榪欐牱鐨勫唴瀛樺竷灞錛?/span>
3銆佽閰嶏紝灝嗘帴鍙g殑瀹炵幇綾昏閰嶅埌鐜版湁鐨勭被涓婏紝浠ュ憡璇夌紪璇戝櫒璇ョ被瀵逛簬鏌愪釜鎺ュ彛錛堣繖閲屼負IFormatble錛夌殑瀹炵幇錛岀敤鐨勬槸絎?/span>2姝ョ殑瀹炵幇綾?/span>ImpIntIFormatble錛?/span>
4銆佸皢瀹炵幇綾繪敞鍐屽埌綾誨瀷淇℃伅鐨勬帴鍙e疄鐜板垪琛ㄤ腑錛岃繖涓姝ュ彲浠ョ渷鐣ワ紝鍙槸涓轟簡榪愯鏃剁殑鎺ュ彛鏌ヨ錛岀浉褰撲簬IUnknown鐨?/span>Query銆傝繖涓琛屼唬鐮佹槸鍦ㄥ叏灞瀵硅薄鐨勬瀯閫犲嚱鏁頒腑鎵ц鐨勶紝鏀懼湪cpp婧愭枃浠朵腑
鏄惁鏈夌偣紲炲鍛紵鍏跺疄涔熸病浠涔堬紝涓嶈繃灝辨槸鍦?/span>trait鍜屽唴瀛樺竷灞涓婂仛鏂囩珷錛屼篃灝卞彧鏄敤浜嗙被鍨嬭繍綆楃殑浼庝咯銆傝冨療ImpIntIFormatble鐨勫唴瀛樺竷灞錛屽浜庢櫘閬嶇殑c++緙栬瘧鍣ㄦ潵璇達紝瀵硅薄鐨勮櫄鍑芥暟琛ㄦ寚閽堬紙濡傛灉瀛樺湪鐨勮瘽錛夛紝閮芥斁鍦ㄥ璞$殑璧峰鍦板潃涓婏紝鍚庨潰绱ц窡瀵硅薄鏈韓鐨勬垚鍛樻暟鎹瓧孌碉紝鍥犳錛?/span>ImpIntIFormatble鐨勫唴瀛樺竷灞鐩稿綋浜庯紝
娉ㄦ剰錛岃繖閲屽凡緇忔病鏈夌戶鎵夸簡銆傝繖灝辨槸錛屽疄鐜頒簡IFormatble 鎺ュ彛鐨?/span>ImpIntIFormatble瀵硅薄鐨勫唴瀛樿〃紺恒傚洜姝わ紝鍙互鎯寵薄錛屾墍鏈夌殑鎺ュ彛瀹炵幇綾葷殑鍐呭瓨甯冨眬閮藉己鍒惰瀹氫負浠ヤ笅褰㈠紡錛?/span>
褰撶劧錛屽鏋滅紪璇戝櫒鐨勮櫄鍑芥暟琛ㄦ寚閽堜笉鏀懼湪瀵硅薄璧峰鍦板潃鐨勮瘽錛屽氨娌℃硶榪欎箞鐜╀簡錛岄偅涔堥潪渚靛叆寮忔帴鍙d篃鏃犱粠鍋氳搗銆傜劧鍚庯紝灝辨槸TInterface浜嗭紝緇ф壙浜?/span>InterfaceLayout
涓嶇鎬庝箞璇撮兘濂斤紝TInterface瀵硅薄鐨勫唴瀛樺竷灞涓庢帴鍙e疄鐜扮被鐨勫唴瀛樺竷灞涓鑷淬傚洜姝ゆ搷浣滅->閲嶈澆鍑芥暟鎵嶅彲浠ョ矖鏆寸殑綾誨瀷杞崲鏉ラ『鍒╁畬鎴愩傜劧鍚庢瀯閫?/span>TInterface瀵硅薄鐨勬椂鍊欏氨鏄己鍒惰幏鍙?/span>ImpIntIFormatble瀵硅薄鐨勮櫄鍑芥暟琛紙涔熷氨鏄叾璧峰鍦板潃鐨勬寚閽堟暟鎹級鎸囬拡璧嬪肩粰InterfaceLayout鐨?/span>mVtbl錛岃繘鑰屼緷嬈℃妸瀹為檯瀵硅薄鐨勬寚閽堟斁鍦?/span>mThis涓婏紝鑾峰彇鍒扮被鍨嬩俊鎭璞℃斁鍦?/span>mTypeInfo涓紝濡傛灉鏈夊繀瑕佹惌鐞?/span>mParam錛屼篃鐩稿簲鍦拌祴鍊箋?/span>
鐒跺悗錛屽氨鏄?/span>template<typename Interface, typename Object>struct InterfaceOf鍚勭鐗瑰寲鐨勮繍鐢ㄨ屽凡錛屽氨涓嶅間竴鎻愪簡銆?/span>
鐢變簬c++鐨?/span>abi娌℃湁緇熶竴鏍囧噯錛屽茍涓旓紝c++鏍囧噯涔熸病鏈夎瀹氱紪璇戝櫒蹇呴』鐢ㄨ櫄鍑芥暟琛ㄦ潵瀹炵幇澶氭侊紝鎵浠ワ紝榪欓噷鐨勫鎶娣閥騫朵笉鑳戒繚璇佸湪鎵鏈夊鉤鍙頒笂閮借兘澶熸垚绔嬶紝浣嗘槸錛岄潪渚靛叆寮忔帴鍙g湡鏄柟渚匡紝宸茬粡鏄湰搴у啓c++浠g爜鐨勬牳蹇冨伐鍏鳳紝涓鍒囬兘鍥寸粫鐫闈炰鏡鍏ュ紡鎺ュ彛鏉ュ睍寮銆?/span>
鍘熸湰鎵撶畻闀跨瘒澶ц錛屼篃鍙湁鑽夎崏鏀跺満銆備箣鍚庯紝鏈駭灝辮В鏀句簡錛屼細鏆傛椂紱誨紑cppblog寰堜箙錛岃鍒掍腑鐨勫唴瀹癸紝娑堟伅鍙戦侊紝铏氭ā鏉垮嚱鏁幫紝瀛楃涓詫紝杈撳叆杈撳嚭錛屾牸寮忓寲錛屽簭鍒楀寲錛?/span> locale錛屽叏灞鍙橀噺錛屾ā鏉胯〃杈懼紡錛岀粍鍚堝瓙瑙f瀽鍣紝allocator錛屾櫤鑳芥寚閽堬紝紼嬪簭榪愯鏃訛紝鎶借薄宸ュ巶璁塊棶鑰呯瓑妯″紡鐨勫彟綾誨疄鐜幫紝浠ユ眰浠庡叏鏂扮殑瑙掑害涓婃潵琛ㄧ幇C++鐨勫己澶э紝涔熷彧鑳戒腑鏂簡銆?/span>
闈欐侀潰鍚戝璞¤璦錛岃繖閲屼笉鑰冭檻template錛?/span>c++鐨?/span>template鏄腑瀛愮被鍨嬶紝鏈川涓婏紝c++緙栬瘧鏈熷氨鏄竴涓姛鑳藉畬澶囩殑鍔ㄦ佽璦銆備唬鐮佷笂鐨勫鐢ㄥ氨鍙兘浠ュ熀綾諱負綺掑害鏉ヨ繘琛岋紝姣斿錛屽嚱鏁?/span>int fn(Base* bb)錛屽彧鏈?/span>Base鐨勫瓙綾伙紝鎵嶆湁璧勬牸鎴愪負鍑芥暟fn鐨勪細鍛樸傚嚱鏁?/span>fn涔嬫墍浠ュ0鏄庡叾鍙橀噺bb鐨勭被鍨嬩負Base錛屽氨鏄負浜嗕嬌鐢ㄧ被鍨?/span>Base閲岄潰鐨勪竴浜涗笢瑗匡紝涓鑸氨鏄垚鍛樺嚱鏁幫紙瀵逛簬娓呮暀寰掓潵璇達紝涓嶆槸涓鑸紝鑰屾槸蹇呯劧錛夈傚亣濡傦紝鍑芥暟fn鐨勫疄鐜頒腑錛屽氨鐢ㄥ埌Base鐨勫嚑涓垚鍛樺嚱鏁幫紝姣斿璇?/span>f1錛?/span>f2錛?/span>…錛?/span>fn銆傛崲鍙ヨ瘽璇達紝铏界劧fn(Base* bb)琛ㄩ潰涓婅姹備竴瀹氳Base鐨勫瓙瀛欏悗浠f墠鑳芥媴褰撻噸浠伙紝浣嗗疄闄呬笂錛屽彧瑕佸埆鐨?/span>class錛屼笉蹇呰窡Base鏈夊崐姣涢挶鍏崇郴錛屽彧瑕佽繖涓?/span>class閲岄潰鏀寔f1錛?/span>f2錛?/span>…錛?/span>fn榪欎簺鎿嶄綔錛岄偅涔堝師鍒欎笂浠栧氨鏈夎祫鏍煎埌fn閲岄潰涓娓搞傚ぉ涓嬪敮鏈夊痙鑰呭眳涔嬶紝涓嶅繀璁茬┒浠涔堣吹鏃忋備絾鏄紝鍦ㄦ病鏈夋帴鍙g殑絳夌駭媯弗鐨勫皝寤虹ぞ浼氶噷闈紝灝辯畻浣犳湁鎯婂ぉ涔嬪湴涔嬭兘錛屽氨鍥犱負浣犳病鏈夋煇縐嶉珮璐電殑琛緇燂紝鎵浠ヤ綘灝變笉琛屻?/span>
鍦ㄥ崟鏍圭被鐨勭帇鍥戒腑錛屾墍鏈夊璞¢兘婧愪簬Object錛屼篃鍙互閫氳繃鍙嶅皠錛岄氳繃鍑芥暟鍚嶅瓧榪愯鏃惰幏鍙栦覆f1錛?/span>f2錛?/span>fn絳夋垚鍛樺嚱鏁幫紝鐒跺悗鍐嶄漢鑲夌紪璇戝櫒鍏充簬鍙傛暟淇℃伅鍜岃繑鍥炲肩被鍨嬶紝浠ユ憜鑴?/span>Base鐨勭被鍨嬫姊忥紝浣嗘槸錛屼及璁′篃鍙湁鍦ㄦ渶鐗規畩鐨勬椂鍊欙紝鎵嶄細榪欐牱鐜┿傝繖鏍風帺錛岀畝鐩寸疆緙栬瘧鍣ㄧ殑綾誨瀷媯鏌ヤ簬涓嶉【錛岄潤鎬佽璦灝辨槸瑕佸敖鍙兘鐨勬寲鎺樼紪璇戝櫒綾誨瀷媯鏌ョ殑鏈鍚庝竴涓濇綔鍔涖?/span>
鎺ュ彛鐨勫嚭鐜幫紝灝卞湪綰靛悜鐨勭被鍨嬪叧緋諱笂鎾曞紑涓閬撻亾鍙e瓙錛屼粠鑰屽敖鏈澶ч檺搴﹂噴鏀懼璞$殑鑳藉姏銆傛椂浠d笉鍚屼簡錛岀幇鍦ㄦ帴鍙?/span>IBase閲岄潰澹版槑f1錛?/span>f2錛?/span>fn絳夊嚱鏁幫紝鐒跺悗鍑芥暟fn鐨勫叆鍙備負IBase錛屼篃鍗蟲槸 int fn(IBase* bb)錛屼互鏄庣‘琛ㄧずfn閲岄潰鍙敤鍒?/span>IBase鐨勫嚱鏁幫紝璇箟鐨勮姹備笂鏇村姞綺懼噯銆傜劧鍚庯紝浠諱綍class錛屽彧瑕佸叾瀹炵幇浜嗘帴鍙?/span>IBase錛屽氨鏈夎祫鏍艱fn鎺ョ撼錛屼笉蹇呭啀鏄?/span>Base涔嬪悗浜嗐傛墍浠ヨ錛岃闈㈠悜鎺ュ彛緙栫▼錛屽氨鏄闈㈠悜鍔熻兘鏉ユ惉鐮栵紝閫夋嫨鐨勬牱鏈┖闂村氨騫塊様浜嗗緢澶氥傛帴鍙f槸姣斿叿浣撶被鍨嬭鐏墊椿錛屼絾涓嶆剰鍛崇潃鎵鏈夌殑鍦版柟灝卞繀欏誨彧鍑虹幇鎺ュ彛錛?/span>class綾誨瀷灝辨病鐢ㄤ簡錛屽綋鐒朵笉鏄紝鏈変簺鍦版柟灝卞緢鏈夊繀瑕佺敤鍏蜂綋綾誨瀷錛屾瘮濡傝string綾誨瀷錛屾瘮濡傝澶嶆暟榪欎簺錛屽氨蹇呴』鏄庣‘瑙勫畾鍏蜂綋綾誨瀷錛屾棤欏葷敤鍒版帴鍙g殑鐏墊椿鎬с傛諱箣錛岃繕鏄偅鍙ヨ瘽錛屾病鏈夐摱寮癸紝鍏蜂綋闂鍏蜂綋鍒嗘瀽銆?/span>
浣跨敤瀵硅薄錛屽叾瀹炲氨鏄湪浣跨敤瀵硅薄鐨勬垚鍛樺嚱鏁幫紝閭d箞錛屾帴鍙d篃鍙互鐪嬫垚鏄垚鍛樺嚱鏁扮殑綺掑害綆$悊宸ュ叿銆傛墍浠ワ紝鎺ュ彛灝辮〃紺轟簡涓鎵規垚鍛樺嚱鏁幫紝闇瑕佺敤涓鎵規垚鍛樺嚱鏁扮殑鏃跺欙紝鐢ㄦ帴鍙f渶涓烘柟渚褲傚潑闂存湁涓浜涚姱virtual鎭愭儳鐥囩殑c++鐚跨尨錛岄珮楂樺叴鍏村湴鐢ㄤ竴鎵?/span>function浠f浛鎺ュ彛錛岀綌欏懼叾鎬ц兘錛堟椂闂寸┖闂達級鐨勬崯澶便佷嬌鐢ㄤ笂鐨勪笉渚匡紝鍝庯紒闈㈠悜瀵硅薄鏄己鏈夊姏鐨勬娊璞″伐鍏鳳紝姣斾箣浜庨潰鍚戣繃紼嬶紝鍑芥暟寮忥紝鏈夌潃鐙壒鐨勪紭鐐癸紝鍙嶆浠g爜鏋勬灦涓婏紝浼樺厛浣跨敤闈㈠悜瀵硅薄錛岀粷涓嶄細閿欍傝岄潰鍚戝璞★紝灝卞繀鐒跺洖閬夸笉浜嗘帴鍙c?/span>
鍧婇棿鏀寔闈㈠悜瀵硅薄璇█涓鎺ュ彛鐨勬敮鎸侊紝褰撲互rust錛?/span>scala鐨?/span>trait鏈哄埗鏈涓轟護浜哄枩嬈紝闈炰鏡鍏ュ紡鍟婏紝鑷劧鐙楄璦鐨勪篃榪樺ソ錛屼絾鏄紝鏈漢鏈鍙嶆劅錛屽弽姝o紝鐙楄璦涓婁竴鍒囩嫭鏈夌壒鎬э紝鏈漢閮芥湰鑳藉湴姣棤鐞嗙敱鎺掓枼銆傝嚜鐒訛紝java銆?/span>C#鎴栬?/span>c++鐨勫緇ф壙錛屾渶涓虹鎷欙紝鍛嗘澘銆?/span>
java銆?/span>C#閲岄潰錛岀被鑳藉瀹炵幇鐨勬帴鍙o紝鍦ㄧ被鐨勫畾涔変腑錛屽氨宸茬粡瀹氫笅鏉ヤ簡銆傜被涓鏃﹀畾涔夊畬姣曪紝涓庤綾葷浉鍏崇殑鎺ュ彛灝卞畾涓嬫潵錛岄搧鏉夸竴鍧楋紝瀵嗕笉閫忛錛屼笉鑳藉涓嶈兘鍑忎篃涓嶈兘鏀廣備綘鏄庢槑鐪嬪埌涓涓被灝卞凡緇忓疄鐜頒簡鏌愪釜鎺ュ彛鐨勬墍鏈夋柟娉曪紙鍑芥暟鍚嶅瓧鍜岀鍚嶄竴妯′竴鏍鳳級錛屼絾灝辨槸鍥犱負璇ョ被娌℃湁鍦ㄥ畾涔変腑鏄庣‘璇存槑瀹炵幇璇ユ帴鍙o紝鎵浠ョ紪璇戝櫒灝辨媧諱笉鎵胯璇ョ被瀹炵幇榪欎釜鎺ュ彛銆傚彧鑳界敤閫傞厤鍣ㄦā寮忥紝涔熷嵆鏄柊閫犱竴涓?/span>class錛屽疄鐜拌鎺ュ彛錛屽寘鍚棫綾葷殑瀵硅薄錛屽皢鎺ュ彛鐨勬墍鏈夋柟娉曢兘濮旀墭緇欏璞$殑鐩稿簲鍑芥暟鏉ュ仛銆?/span>java鐨勭箒鏂囩紱鑺傚氨鏄繖鏍鋒潵鐨勶紝瑙勮鐭╃煩錛屾瘯鎭瘯鏁紝涓姝ヤ竴涓剼鍗般傛洿楹葷儲鐨勬槸錛屾瘡嬈′紶閫掑弬鏁伴兘瑕?/span>new涓涓傞厤鍣ㄥ璞℃潵婊¤凍鍙傛暟鐨勮姹傦紝榪欐槸鏈璁╀漢闅懼彈鐨勫湴鏂廣?/span>
java銆?/span>C#鐨勮繖縐嶆帴鍙f満鍒訛紝瀹炲湪涓庣幇瀹炲涓嶄笂鍙鳳紝鐪熸槸鎵句笉鍒頒換浣曞師鍨嬶紝浠諱綍綾誨瀷鐨勭墿鍝侊紝灝辯畻鏄柊閫犵殑涓滆タ錛屾垜浠兘涓嶅彲鑳戒竴寮濮嬪氨絀峰敖瀹冪殑鎵鏈夋ц川鎵鏈夊姛鑳姐傚氨綆楁槸鑽墿錛岄兘鏈夊彲鑳芥槸姝墦姝g潃鐨勫姛鑳斤紝姣斿浼熷摜鐨勫姛鑳斤紝鏄叾鐮斿彂闃舵涓剰鎯充笉鍒扮殑銆?/span>java銆?/span>c#鐨勮繖縐嶆帴鍙o紝浼氬緢騫叉壈綾葷殑瀹屾暣鏈灝忓寲鐨勮璁″師鍒欙紝榪涜屽姞澶х被鐨勮璁¢毦搴︺傚綋鐒訛紝瀹冧篃闈炰竴鏃犳槸澶勶紝璧風爜錛岀被鏀寔澶氬皯鎺ュ彛錛屼竴鐪煎氨鐪嬪嚭鏉ヤ簡錛屾鏃犵枒涔夈傞棶棰樻槸錛屾帴鍙h繖縐嶄笢瑗匡紝鏈川涓婂氨搴旇鏄笉紜畾鐨勬í鍚戣瑙掓潵鑰冨療綾葷殑鍏崇郴銆?/span>java銆?/span>C#涓嬬殑鎺ュ彛闂錛屽ぇ澶ч檺鍒朵簡鎺ュ彛鐨勪嬌鐢ㄥ満鍚堛?/span>
鍏舵錛岀戶鎵挎椂錛屽瓙綾誨氨緇ф壙浜嗗熀綾葷殑鎵鏈変笢瑗匡紝鍖呮嫭鍏跺疄鐜扮殑鎺ュ彛銆備絾鏄紝鏈変簺鏃跺欙紝瀛愮被騫朵笉鎯蟲嫢鏈夌埗綾葷殑鏌愪簺鎺ュ彛銆傛瘮濡傦紝楦瓙搴旇綆楁槸楦熺被鐨勪竴涓瓙綾伙紝鑰岄笩綾繪敮鎸?#8220;浼氶”榪欎釜鎺ュ彛錛屼絾鏄腑瀛愭樉鐒朵笉浼氶錛屼篃灝辨槸璇達紝铏界劧楦瓙鍖呭惈浜嗛笩綾葷殑鎵鏈夋暟鎹紝浣嗘槸瀹冧笉鎷ユ湁浼氶榪欎釜鍔熻兘銆傚姝わ紝鎴戜滑甯屾湜鍦ㄧ紪璇戞湡闂達紝灝辮兘鍦ㄨ姹備細椋炵殑鍦哄悎涓嬶紝浼犻腑瀛愬璞¤繘鍘繪椂錛岀紪璇戝櫒鎶ラ敊銆備絾鏄紝瀵規錛屽彧鑳藉湪榪愯涓姤閿欙紝鑰屼笖錛岃繕鏄湪璋冪敤浼氶鐨勬垚鍛樺嚱鏁伴噷闈㈡墠鎶ラ敊銆傚師鍒欎笂錛岀紪璇戝櫒鏄彲浠ョ煡閬撻腑瀛愪笉浼氶榪欎釜姒傚康鐨勶紝浣嗘槸錛岀敱浜?/span>java銆?/span>C#鐨勬帴鍙f帶鍒剁矑搴﹀崟涓錛屾弧瓚充笉浜嗚繖縐嶈姹傘?/span>
鍐嶆錛屾帴鍙d笉鑳界粍鍚堬紝姣斿璇達紝鍑芥暟fn鐨勫弬鏁幫紝鍋囪鍚嶅瓧涓?/span>pp錛?/span>pp瑕佹眰鍚屾椂瀹炵幇鎺ュ彛IA錛?/span>IB銆傚姝わ紝java銆?/span>C#涓槸娌℃湁璇硶婊¤凍榪欑澶氫釜鎺ュ彛鐨勮姹傘傞亣鍒拌繖縐嶉渶姹傛椂錛屽彧鑳界敤寮哄埗綾誨瀷杞崲錛屽厛闅忎究璁╁弬鏁扮被鍨嬩負IA鎴栬?/span>IB錛岀劧鍚庡湪蹇呰鏃訛紝寮哄埗杞崲涓哄彟澶栫殑綾誨瀷錛屽彧鑳藉湪榪愯鏃舵姤閿欍傚張鎴栬呮槸錛屾柊閫犱竴涓帴鍙?/span>IAB浠?/span>IA錛?/span>IB涓婄戶鎵匡紝鐒跺悗鍑芥暟fn鐨勫弬鏁?/span>pp鐨勭被鍨嬩負IAB錛屼絾鏄繖鏍鳳紝渚濈劧瀛樺湪涓嶈凍錛屽亣濡傛煇涓被瀹炵幇IA鍜?/span>IB錛屼絾鏄病鏈夎〃鏄庡畠瀹炵幇IAB錛岄偅涔堣繕鏄笉鑳芥弧瓚沖弬鏁扮殑瑕佹眰銆傛帴鍙g粍鍚堢殑闂錛屼笉綆℃槸go銆?/span>rust錛岄兘娌℃湁寰堝ソ鐨勬敮鎸侊紝鍙兘鍒拌繍琛屾椂綾誨瀷杞崲鎵嶈兘鍙戠敓銆?/span>
鏈閲嶈鐨勬槸錛岃繖縐嶆帴鍙f満鍒惰繚鍙嶄簡闆舵儵緗氱殑鏈哄埗銆傚氨浠?/span>c++涓轟緥鏉ヨ鏄庯紝灝卞彧璁烘帴鍙eソ浜嗭紝涔熷嵆鏄彧鏈夎櫄鍑芥暟浣嗘槸娌℃湁鎴愬憳瀛楁鐨勫熀綾匯備負浜嗘柟渚挎弿榪幫紝榪樻槸涓句緥瀛愩?/span>
鎺ュ彛IA鏈夎櫄鍑芥暟錛岄噷闈㈠氨瑕佹湁涓涓寚閽堟寚鍚戝叾铏氬嚱鏁拌〃錛屾墍浠ュ叾鍐呭瓨鍗犵敤灝辨槸涓涓寚閽堢殑澶у皬錛涘悓鐞嗭紝IB涔熷姝ゃ傝〃闈㈢殑鎰忔濇槸Derived瀹炵幇浜嗘帴鍙?/span>IA錛?/span>IB錛屽疄闄呬笂錛屽湪C++涓紝鎺ュ彛瀹炵幇灝辨槸緇ф壙錛屼篃灝辨槸璇存瘡涓?/span>Derived鐨勫疄渚嬮兘瑕佸寘鍚?/span>IA錛?/span>IB閲岄潰鐨勬暟鎹紝鎸囧悜瀵瑰簲铏氬嚱鏁拌〃鐨勬寚閽堝瓧孌碉紝涔熷嵆鏄湁涓や釜鎸囬拡銆傝繖閲屽仛涓嶅埌闆舵儵緗氱殑鎰忔濓紝鏄錛?/span> Derived涓轟簡琛ㄦ槑鑷繁鏈?/span>IA銆?/span>IB鐨勮兘鍔涳紝姣忎釜瀵硅薄浠樺嚭浜嗕袱涓浣欑殑鍐呭瓨鎸囬拡絀洪棿鐨勪唬浠鳳紝鍗充究鏄璞′笉闇瑕佸湪IA銆?/span>IB鐨勭幆澧冧笅浣跨敤錛岃繖涓唬浠烽兘閬垮厤涓嶄簡銆傞浂鎯╃綒鎶借薄錛屽氨鏄鐢ㄥ埌鐨勬椂鍊欐墠浠樺嚭浠d環錛屽摢鎬曡繖涓唬浠峰彲浠ュぇ涓鐐廣傜敤涓嶅埌鏃訛紝鍒欎笉蹇呮秷鑰楀摢鎬曚竴鐐圭偣絀洪棿鏃墮棿涓婄殑嫻垂銆傜┖闂翠笂嫻垂鐨勯棶棰樹笉鍦ㄤ簬鑺傜渷鍐呭瓨錛岃屽湪浜庝撫澶變簡綺捐嚧鐨勫唴瀛樺竷灞錛岃繘鑰屽獎鍝嶅埌浜岃繘鍒剁殑澶嶇敤銆傝繖涓鐐癸紝闈炰鏡鍏ュ紡鎺ュ彛灝變笉鐢ㄤ篃娌″姙娉曞湪瀵硅薄韜笂鍖呭惈鍏舵墍鏀寔鐨勬墍鏈夋帴鍙g殑铏氬嚱鏁拌〃鎸囬拡錛屽洜涓虹被鍨嬪畾涔夊畬姣曪紝鍚庨潰榪樺彲鑳藉湪鍏朵笂娣誨姞鏂扮殑鎺ュ彛瀹炵幇銆?/span>
鑰岀敱榪欏嚑鐐歸棶棰樺紩鐢沖嚭鏉ョ殑鍏朵粬緙洪櫡灝變笉蹇呮彁浜嗐傚弽姝o紝C++錛屽寘鎷?/span>java錛?/span>C#鐨勮繖縐嶆帴鍙f満鍒舵渶涓嶈浜哄枩嬈簡銆?/span>
鑷充簬鐙楄璦鐨勯腑瀛愭帴鍙o紝鏈夋椂浼氬嚭鐜板嚱鏁板悕瀛楀啿紿佺殑灝忛棶棰橈紝紼嶅井鏀逛竴涓嬪悕瀛楀氨濂戒簡銆備富瑕佹槸榪欑鎺ュ彛鏈哄埗鍙涓涓被鍖呭惈浜嗘煇涓帴鍙g殑鎵鏈夋垚鍛樺嚱鏁幫紝灝遍殣寮忚涓哄畠瀹炵幇浜嗚繖涓帴鍙c傝繖閲屼細鏈夋殫紺猴紙璇錛岃鎯戯級錛屽氨鏄畾涔夌被鐨勬垚鍛樺嚱鏁版椂錛屼細鏈夋剰鎴栬呮棤鎰忓湴榪佸氨鐜版湁鎺ュ彛鐨勬垚鍛樺嚱鏁幫紝鍚屾牱錛屽0鏄庢帴鍙f垚鍛樺嚱鏁版椂錛屼篃浼氭湁鎰忔棤鎰忓湴寰鐜版湁綾葷殑鎴愬憳鍑芥暟涓婇潬銆備粠鑰屽鑷寸湡姝e嚱鏁扮殑璇箟涓婃妸鎺т笉澶熺簿鍑嗐傚茍涓旓紝榪欑鏈哄埗澶繃綺楁毚錛屼竾涓榪欎釜綾昏櫧鐒舵敮鎸佹煇涓帴鍙g殑鎵鏈夊嚱鏁幫紝浣嗘槸騫朵笉涓瀹氬氨鎰忓懗鐫瀹冨氨瑕佸疄鐜拌繖涓帴鍙d簡銆傜嫍璇█鏈浠や漢鍙嶆劅涔嬪灝辨槸鍚勭鑷綔鑱槑鑷互涓烘槸鐨勮瀹氥傚綋鐒訛紝鐢變簬鐙楄璦鐨勬垚鍛樺嚱鏁板彲浠ラ潪渚靛叆寮忥紝榪欎釜闂閫犳垚鐨勪笉渚夸竴瀹氱▼搴︿笂鏈夋墍鍑忚交錛屼絾鏄紝璇村疄鍦紝灝辮繛闈炰鏡鍏ュ紡鐨勬垚鍛樺嚱鏁幫紝鏈駭涔熶笉澶枩嬈簡銆傚彟澶栵紝浠呬粎浠庤璦灞傞潰涓婏紝涓嶅熷姪鏂囨。錛屽緢闅劇煡閬撲竴涓被鍒板簳瀹炵幇閭d簺鎺ュ彛錛屾煇涓帴鍙h閭d簺綾誨疄鐜幫紝java銆?/span>C#鐨勬帴鍙e湪榪欎竴鐐圭殑琛ㄧ幇涓婂氨寰堝崜瓚娿傚叾瀹烇紝鏈駭鍙嶆劅鐙楄璦鐨勬渶澶у師鍥犺繕鏄洜涓虹嫍綺夛紝鐩告瘮涔嬩笅錛?/span>java綺夈?/span>php綺夌瓑綺夛紝灝卞彲鐖卞浜嗐?/span>
rust浠?/span>trait褰㈠紡瀹炴彁渚涚殑鎺ュ彛鏈哄埗灝變笉澶氳浜嗭紝璇硶褰㈠紡涓婄畝媧佹紓浜紝鍩烘湰涓婃ⅵ瀵愪互姹傜殑鎺ュ彛鏍峰瓙灝辨槸榪欐牱瀛愮殑浜嗐?/span>
浠ヤ笂璇█鐨勬帴鍙o紝鍏ㄩ儴灞炰簬闈欐佹帴鍙o紝涔熷嵆鏄被鍨嬫墍瀹炵幇鐨勬帴鍙e湪緙栬瘧鏈熼棿灝卞叏閮ㄥ畾涓嬫潵浜嗭紝榪愯鏃跺氨涓嶅啀鏈変換浣曞彉鍖栥備絾鏄紝濡傛灉瀵硅薄涓鐩村湪鍙樺寲錛屽ソ姣旂敓鐗╋紝灝辮浜虹被濂戒簡錛屾湁濠村効灝戝勾闈掑勾涓勾鑰佸勾姝諱骸榪欎簺鍙樺寲闃舵錛屾樉鐒舵瘡涓闃舵鐨勮涓鴻兘鍔涢兘澶т笉涓鏍鳳紝涔熸嫢鏈変笉鍚屽ご琛旓紝涓嶅悓韜喚銆備篃灝辨槸璇達紝鐜板疄涓紝媧葷敓鐢熷璞$殑鎺ュ彛闆嗗悎騫墮潪涓鎴愪笉鍙橈紝瀹冨畬鍏ㄥ彲浠ョ幇鍦ㄥ氨涓嶆敮鎸佹煇涓帴鍙o紝楂樺叴鏃跺欏張鍙互鏀寔浜嗭紝涓嶉珮鍏存椂灝卞張涓嶆敮鎸佷簡錛岃亱浜嗗氨鍚笉鍒板0闊籌紝鐩蹭簡灝辯湅涓嶈錛屽ソ浼兼秷鎭彂閫侀偅鏍峰瓙錛屾樉鐒朵互涓婅璦鏄笉鏀寔榪欑鍔ㄦ侀渶姹傜殑鎺ュ彛鐨勩?/span>
鍙﹀錛?/span>com鐨勬帴鍙f煡璇㈣櫧鐒跺彂鐢熷湪榪愯鏃訛紝浣嗘槸錛?/span>com鐨勮鑼冿紝姣斿瀵圭О鎬с佷紶閫掓с佹椂闂存棤鍏蟲х瓑瑙勫垯錛岀‖鏄妸com浠庡姩鎬佹帴鍙i檷緇村埌闈欐佹帴鍙o紝榪欎篃鍙互鐞嗚В錛屽洜涓哄姩鎬佹帴鍙g殑搴旂敤鍦烘櫙鐪熺殑騫朵笉澶氥傝繖浜涢兘娌′粈涔堬紝com鏈鏍規湰鐨勯棶棰橈紝榪樻槸鍦ㄤ簬鎺ュ彛瑕佹壙杞界被鐨勫姛鑳斤紝褰撶劧錛岃繖鏍蜂篃鏈夊ソ澶勶紝姣斿璇█鐨勬棤鍏蟲с?/span>IUnknown鐨勪笁澶ф垚鍛樺嚱鏁板垎鏄庡氨鏄被鐨勬湰鑱屽伐浣滐紝AddRef錛?/span>Release綆$悊瀵硅薄鐨勭敓鍛藉懆鏈燂紝Query鏌ヨ鎵瑕佺殑鎺ュ彛銆傜敓鍛藉懆鏈熺敱瀵硅薄綺掑害緇嗗寲涓烘帴鍙g矑搴︼紝灝辨樉寰楀お鐞愮錛岃璋ㄨ濂藉嚑鏉¤鍒欙紝瑕佸皬蹇冪考緲煎湴搴斾粯AddRef錛?/span>Release鐨勫嚱鏁拌皟鐢紝鏅鴻兘鎸囬拡涔熷彧鑳藉噺杞婚儴鍒嗗伐浣滈噺錛岃繖灝辨槸綺掑害榪囧皬甯︽潵鐨勭棝鑻︺傝?/span>Query鐨勬湰璐ㄥ氨鏄璞℃墍瀹炵幇鎺ュ彛闆嗗悎錛岃繖鏄璞$殑鏈垎宸ヤ綔錛岀幇鍦ㄦ悶鎴愭帴鍙d笌鎺ュ彛涔嬮棿鐨勫叧緋匯傜敱浜庢帴鍙h秺淇庝唬搴栵紝鎵挎帴浜嗙被鐨勮亴璐o紝灝辮姹傛瘡涓帴鍙i兘瑕佺戶鎵?/span>IUnknown錛屾湰鏉ユ帴鍙d箣闂村氨搴旇娌′粈涔堝叧鑱旀х殑鎵嶅錛岃繕瀵艱嚧com鐨勫疄鐜頒互鍙婁嬌鐢紝鍦?/span>c++涓嬶紝闈炲父綣佸楹葷儲錛屼護浜哄ご鐨彂楹匯傛墍浠ヨ錛岀被涓庢帴鍙o紝涓浣撲袱闈紝璋佷篃涓嶈兘浠f浛璋併?/span>
---------------------------------------------------------------------------------------------------------------------------------
澶囨敞錛氱幇瀹炰笘鐣屼腑錛屼竴縐嶆垨鍑犵鍔熻兘灝辮兘鎺ㄥ鍑烘潵鍏朵粬鎬ц川錛屽搴斿埌鎺ュ彛涓紝灝辨槸濡傛灉瀵硅薄瀹炵幇鏌愪簺鎺ュ彛錛屽氨琛ㄧず瀹冭兘瀹炵幇鍙﹀鍏朵粬鎺ュ彛銆傜洰鍓嶇殑璇█錛屼篃灝辨槸鎺ュ彛緇ф壙錛屽瓙鎺ュ彛緇ф壙鐖舵帴鍙o紝閭d箞錛屽鏋滀竴涓被瀹炵幇浜嗗瓙鎺ュ彛錛屽氨琛ㄧず瀹冧篃瀹炵幇浜嗙埗鎺ュ彛錛岃璦鏄庨潰涓婂彧鏀寔榪欑鎺ュ彛鐨勮暣鍚叧緋匯傚浜庡叾浠栫殑钑村惈鎯呭喌錛屽彧鑳界敤閫傞厤鍣ㄦ潵鍑戞暟錛岃屽湪闈炰鏡鍏ュ紡鎺ュ彛涓紝鍏惰璦褰㈠紡灝辨樉寰楁洿鍔犵殑绱禈錛岃繖涓鐐癸紝鍦?/span>java涓婂挨涓虹獊鍑恒傚叾瀹烇紝璇村埌搴曪紝閫傞厤鍣ㄦā寮忓彧鏄譏琛ヨ璦涓嶆敮鎸佹帴鍙h暣鍚満鍒剁殑浜х墿銆?/span>
鏈灝忓寲鐨勫ソ澶勬槸鍙互淇濇寔姒傚康鏈澶х殑鐙珛鎬э紝涔熸剰鍛崇潃錛屽彲浠ョ敤鏈灝忕殑浠d環鏉ュ疄鐜拌繖涓蹇碉紝涔熸剰鍛崇潃瀵瑰簲鐢ㄥ眰鐨勪唬鐮佽姹傝秺灝戯紝闈炰鏡鍏ュ紡錛熷ソ姣?/span>c++11 noexcept鍙栦唬throw()錛屽ソ姣斾粠澶氱戶鎵夸腑鍒嗗寲鍑烘潵鎺ュ彛鐨勬蹇碉紝濂芥瘮涓嶈冭檻澶氱戶鎵胯櫄緇ф壙鐨勬櫘閫氭垚鍛樺嚱鏁版寚閽堛傚張姣斿錛屽鏋滀笉瑕佹眰鍙瀛楃涓蹭互0緇撴潫錛岄偅涔堝氨鍙互鎶婂彧璇誨瓧絎︿覆鐨勪換浣曚竴閮ㄥ垎閮藉綋鎴愭槸鍙瀛楃涓層傜被鐨勫澶栧姛鑳藉浐鐒墮噸瑕侊紝浣嗘槸錛岀被涓嶈兘鍋氱殑浜嬫儏錛屼篃寰堥噸瑕併?/span>
棣栧厛鏄鏈夋竻鏅扮殑姒傚康浠ュ強榪欎釜姒傚康瑕佹敮鎸佺殑鏈鍩烘湰榪愮畻錛岀劧鍚庡湪姝ゅ熀紜涓婄粍緇囨暟鎹紝鍔℃眰鎴愬憳鏁版嵁鐨勬渶灝忓寲銆傚綋鐒訛紝姒傚康鐨勪駭鐢燂紝騫墮潪鎷嶇潃鑴戣鎯沖嚭鏉ョ殑錛屾槸鍥犱負浠g爜閲岄潰鍑虹幇澶閭g鐩稿叧鏁版嵁鐨勬鏁幫紝鎵浠ュ氨鏈夊繀瑕佹妸榪欎簺鏁版嵁鎵撳寘璧鋒潵錛屾娊璞℃垚涓涓蹇點傚ソ姣旇錛岀湅鍒?/span>stl綆楁硶鍑芥暟鍙傛暟鍒板寮濮嬬粨鏉熺殑榪唬鍣紝灝辨湁蹇呰鎶婂紑濮嬬粨鏉熸斁鍦ㄤ竴璧楓傛瘮濡傝錛?/span>string_view鐨勫嚭鐜幫紝榪欓噷鍋囪鍏跺瓧絎﹀瓨鍌ㄧ被鍨嬩負char錛?/span>string_view灝辨槸榪炵畫char鍐呭瓨鍧楃殑鎰忔濓紝鍙互榪欐牱琛ㄧず
struct string_view
{
const char* textBegin;
size_t length; //鎴栬?/span> const char* textEnd
};
榪欓噷鐨勯噸鐐規槸錛?/span>string_view閲岄潰鐨勪袱涓垚鍛樺瓧孌電己涓涓嶅彲錛屼絾鏄篃涓嶅繀鍐嶆坊鍔犲埆鐨勪粈涔堝叾浠栦笢瑗褲傜劧鍚庯紝鍦ㄨ繖涓や釜鏁版嵁涓婂睍寮瀹炵幇涓緋誨垪鐨勬垚鍛樺嚱鏁幫紝榪欓噷錛屾垚鍛樺嚱鏁板拰鎴愬憳瀛楁榪欎袱鑰咃紝鏈変竴鐐圭偣楦$敓铔嬬敓楦$殑綰犵粨錛屽洜涓哄繀瑕佹垚鍛樺嚱鏁扮殑闆嗗悎錛堝師濮嬫蹇電殑緇嗗寲錛夛紝鎴愬憳鍑芥暟鍐沖畾浜嗘垚鍛樺瓧孌電殑琛ㄧず錛岃屾垚鍛樺瓧孌靛畾涓嬫潵涔嬪悗錛岃繖鍙嶈繃鏉ュ張鑳藉楠岃瘉鎴愬憳鍑芥暟鐨勫繀瑕佹с備笉綆℃庝箞璇撮兘濂斤紝鎴愬憳鍑芥暟鐨勮璁★紝涔熷繀欏婚伒浠庢渶灝忓畬鏁村寲鐨勫師鍒欍傚啀鍏蜂綋涓鐐癸紝灝辨槸璇翠絾鍑′竴涓垚鍛樺嚱鏁板彲浠ラ氳繃鍏朵粬鎴愬憳鍑芥暟鏉ュ疄鐜幫紝灝辨剰鍛崇潃榪欎釜鍑芥暟搴旇璧跺嚭綾誨錛屼綔涓哄叏灞鍑芥暟瀛樺湪銆傚綋鐒訛紝榪欎篃涓嶆槸姝繪澘鐨勬暀鏉★紝鏈変簺寰堢壒孌婄殑鍑芥暟錛屼篃鍙互鏄垚鍛樺嚱鏁幫紝鍥犱負鎴愬憳鍑芥暟鐨勪嬌鐢紝紜疄寰堟柟渚褲?/span>
鍙兘浼氭湁鐤戞儜錛屾劅瑙夋墍鏈夌殑鎴愬憳鍑芥暟鍏跺疄閮藉彲浠ユ槸鍏ㄥ眬鍑芥暟銆傛垨鑰呰錛屾垜浠彲浠ュ姣忎竴涓垚鍛樺瓧孌甸兘鎼炰竴瀵?/span>set銆?/span>get鐨勫嚱鏁幫紝閭d箞鎵鏈夌殑鍏朵粬鎴愬憳鍑芥暟灝卞彲浠ユ槸鍏ㄥ眬鍑芥暟鐨勫艦寮忥紝寰堝鏄撳氨鍙互閬靛畧鏈灝忓畬鏁村寲鐨勫師鍒欍傚綋鐒訛紝榪欐槸鏄庢樉鍋鋒噿錛屾嫆緇濇濊冪殑鎭跺姡琛屼負銆備笌鍏惰繖鏍鳳紝榪樹笉濡傚氨寮鏀炬墍鏈夌殑鎴愬憳瀛楁錛岄偅鏍峰瓙灝辮惤鍏?/span>c璇█鐨勫璺簡銆傛墍浠ョ殑娉曡鏄紝涓涓嚱鏁幫紝榪欓噷鍋囪鏄叏灞鍑芥暟錛屽鏋滃畠鐨勫疄鐜板繀欏昏璁塊棶鍒版垚鍛樺瓧孌碉紝涓嶈兘閫氳繃璋冪敤璇ョ被鐨勬垚鍛樺嚱鏁幫紙涓鑸笉鏄?/span>get錛?/span>set錛夋潵杈懼埌鐩殑錛屾垨鑰咃紝涔熷彲浠ュ己琛岀敤鍏朵粬鍑芥暟鏉ュ畬鎴愪換鍔★紝浣嗘槸寰堥夯鐑︼紝鎴栬呰浠樺嚭鏃墮棿絀洪棿涓婄殑浠d環錛岄偅涔堝氨鎰忓懗鐫榪欎釜鍑芥暟搴旇鏄綾葷殑鎴愬憳鍑芥暟銆?/span>
綾葷殑璁捐錛屽氨鏄繀涓嶅彲灝戠殑鎴愬憳瀛楁鍜屽繀涓嶅彲灝戠殑鎴愬憳鍑芥暟錛屽畠浠竴璧鳳紝瀹炵幇浜嗗綾葷殑鍘熷姒傚康鐨勫畬鏁磋〃杈撅紝鍏朵粬浠涔堢殑錛岄兘涓嶅繀鐞嗕細銆備竴涓被濡傛灉涓嶅ソ鍐欙紝寰寰鎰忓懗鐫榪欎釜綾葷殑鍔熻兘涓嶄笓涓錛屾垨鑰呭叾姒傚康涓嶅畬鏁達紝榪欐椂錛屽彲浠ヤ笉瑕佹ョ潃鎶借薄錛屽鏋滀竴涓被鏈夊繀瑕佽癁鐢燂紝閭d箞鍦ㄤ唬鐮佺殑緙栧啓涓紝璇ョ被鐨勬娊璞℃蹇靛皢涓鍐嶉噸澶嶅嚭鐜幫紝鐚跨尨瀵瑰畠鐨勭悊瑙d篃瓚婃潵瓚婃竻鏅幫紝浠庤岋紝姘村埌娓犳垚鍦版妸瀹冮犲嚭鏉ャ傛墍鏈夐潪闇姹傛帹鍔紝闈炰唬鐮佹帹鍔ㄧ殑錛屾媿鐫鑴戣錛屾兂褰撶劧鐨勯犵被琛屼負錛岄兘鏄湪鑷嗛犳娊璞★紝鑴辯瀹為檯鐢熸椿鐨勮壓鏈紝鏈緇堝皢琚窐姹般?/span>
綾葷殑璁捐錛屽叾鐫鐪肩偣鍦ㄤ簬鐢ㄥ繀瑕佺殑鏁版嵁鏉ュ畬鏁磋〃杈句竴涓竻鏅扮殑姒傚康銆傝岀戶鎵匡紝鍒欐槸瀵圭被鐨勬蹇佃繘琛岀粏鍖栵紝涔熷氨鏄垎綾伙紝濂芥瘮璇寸敓鐗╀笅闈㈠紑鍑烘潵鍔ㄧ墿銆佹鐗╄繖涓や釜瀛愮被錛屽氨鏄妸鐢熺墿鍒嗘垚鍔ㄧ墿銆佹鐗╄繖涓ょ被錛岀戶鎵夸笌鏃ュ父鐢熸椿鐨勫垎綾諱笉澶竴鏍鳳紝緇ф壙鐨勫垎綾繪柟寮忔槸寮鏀懼紡錛屾牴鎹渶瑕侊紝闅忔椂鍙互娣誨姞鏂扮殑瀛愮被鍒傛暣涓被鐨勪綋緋伙紝鏄竴棰椾弗鏍肩殑鍗曟牴鏍戯紝浠諱綍綾誨彧鑳芥湁涓涓牴綾匯備粠浠諱綍綾誨紑濮嬶紝鍙兘鏈変竴鏉¤礬寰勫洖婧埌鏈寮濮嬬殑鏍圭被錛?/span>java銆?/span>C#涓氨鏄?/span>Object錛屾墍鏈夌殑綾婚兘媧劇敓鑷?/span>Object錛岃繖鏄竴媯靛ぇ鏍戙傚崟鏍圭郴涓嬶紝涓囩墿鐨嗘槸瀵硅薄錛岃繖鑷劧寰堟柟渚匡紝璧風爜錛岃繖灝變粠璇█灞傞潰涓婄洿鎺ユ敮鎸?/span>c++ std鐨勫瀮鍦?/span>any浜嗐傝岀敱浜?/span>java銆?/span>C#瀹屽杽鐨勫弽灝勪俊鎭紝鎶涘純闈欐佺被鍨嬩俊鎭紝涔熷彲浠ュ仛鍔ㄦ佽璦灞傞潰涓婄殑浜嬫儏錛岃?/span>c錛?/span>c++鐨?/span>void*錛屾墍鏈夌殑鍔ㄦ佺被鍨嬩俊鎭叏閮ㄩ兘鍦ㄧ尶鐚寸殑澶ц剳涓?/span>java騫沖彴涓婄敓瀛樼潃澶ф妸鐨勫姩鎬佽璦錛岃屼笖錛屾ц兘閮借繕寰堜笉閿欍?/span>
鐩稿寰堝璇█鏉ヨ錛?/span>c++灝辨槸鎬儙灝辨槸寮傛暟錛岃嚜鏈夊叾鑷韓鐨勮璁″摬瀛︼紝瀹冩槸澶氭牴緋葷殑錛屽畠涓嶅彲鑳戒篃娌″繀瑕佹悶鎴愬崟鏍圭郴錛屽綋鐒訛紝鎴戜滑鍙互鍋囪涓涓┖綾伙紝鐒跺悗鎵鏈夌殑綾婚兘榛樿緇ф壙鑷繖涓┖綾匯?/span>c++鐨勬墍鏈夌被緇勬垚涓涓.鏋楋紝媯灄閲岀殑鏍戦兘闀胯嚜澶у湴銆備絾鏄笉綆℃庝箞璇撮兘濂斤紝鍙兘鍏佽鍗曠戶鎵匡紝鍗冧竾涓嶈鏈夊緇ф壙錛岃繖鏄簳綰匡紝鍗冧竾鍗冧竾涓嶈兘榪濊儗錛堝綋鐒訛紝濂囨妧娣閥鐨勫満鍚堬紝灝變笉蹇呴伒瀹堣繖涓垝鏉★紝澶氱戶鎵垮崈鑸笉鏄紝浣嗘槸涓嶅彲鎴栫己錛屽洜涓哄畠鍙互鐜╁嚭鏉ュ緢澶氳姳鏍鳳紝騫朵笖閮藉緢瀹炵敤寰堝繀瑕侊級銆傛渶璧風爜錛屽崟鏍圭郴鍑烘潵鐨勫唴瀛樺竷灞鐩磋鍙嫻嬶紝涓瀹氱▼搴︿笂璺ㄧ紪璇戝櫒錛屽彧鏈夎壇濂界殑鍐呭瓨甯冨眬錛屾墠鏈夋湜鑹ソ鐨勪簩榪涘埗澶嶇敤銆傚彟澶栵紝鐖剁被瀵瑰瓙綾諱竴鏃犳墍鐭ワ紝涓嶈寮曠敤鍒板瓙綾諱竴涓佺偣鐨勪俊鎭紝瑕佷繚鎸佽繖縐嶄俊鎭殑鍗曞悜嫻佸姩鎬с?/span>
鍦ㄨ繖縐嶅崟鏍圭郴鐨勭瓑綰у垎鏄庣殑闃剁駭浣撶郴涓嬶紝涓鍒囨姘旀矇娌夛紝娌℃湁涓鐐圭偣鐨勭ぞ浼氭椿鍔涖傛樉鐒訛紝鍙湁鍚屽睘浜庡悓涓鐖剁被鐨勭被鍒箣闂達紝鎵嶈兘鍏變韓閭d箞涓涓佺偣鍙滅殑鍏辨с傚鏋滄病鏈夋帴鍙f崳涔憋紝灝嗘槸鎬庢牱鐨勬偛鍓э紝鏈濂界殑渚嬪瓙錛?/span>mfc錛岀湡鏄帀瀹籌紝娌℃湁鐢ㄥ埌鎺ュ彛錛屽眳鐒跺彲浠ュ仛鍑烘潵涓ヨ皚婊¤凍澶у鏁伴渶瑕佺殑gui妗嗘灦錛屾病鏈夋帴鍙o紝騫朵笉琛ㄧず瀹冧笉闇瑕侊紝鍥犱負mfc寮浜嗗悗闂紝鐢ㄤ笂浜嗘洿鍘夊鐨勭帺鎰?/span>----娑堟伅鍙戦侊紝鍗充究濡傛錛?/span>mfc鏈変簺鍦版柟鐨勫熀綾昏繕鏈変緷璧栧埌瀛愮被錛岃繖灝卞緢璁╀漢鏃犺浜嗐?/span>
c++涓嬶紝綾葷殑璁捐緇濆涓嶅鍎挎垙錛屼竴瀹氳娓呮鑷繁鎯寵鐨勬槸浠涔堬紝鎶借薄鍑烘潵鐨勬蹇墊墠涓嶄細鍙樻垚鍨冨溇銆傚ぇ鑰屽叏鐨勭被錛岃繙榪滀笉濡傚嚑涓皬鑰屼笓鐨勭粏綾匯?/span>java錛?/span>C#涓嬬殑綾誨紑鍙戝緢鏂逛究錛屼絾鏄矑搴﹁繃澶э紝鎶婁竴鎻藉瓙鐨勪笢瑗塊兘涓㈢粰浣狅紝寮哄崠寮轟拱錛屽弽姝e彧瑕佺被涓瀹氫箟錛屽繀鐒剁浉搴旂殑灝變細鍑虹幇涓澶у潹瀹屽杽鐨勫弽灝勪俊鎭紝鑰屽璞¢噷闈篃鍖呭惈浜嗕竴浜涙棤鍏崇揣瑕佺殑鎴愬憳瀛楁錛岃屽璞$殑璁塊棶錛屼篃鍏ㄩ儴閮芥槸闂存帴寮曠敤鐨勮闂紝铏界劧錛岀幇鍦ㄨ綆楁満鎬ц兘榪囧墿錛岃繖浜涢兘鏃犱激澶ч泤銆?/span>c++緇欎簡寮鍙戣呮渶澶х殑閫夋嫨錛岃屾悶c++鐨勭尶鐚達紝鍩烘湰涓婇兘鏅哄姏榪囧墿錛屽浜庢瘡縐嶉夋嫨錛岄兘娓呮鍏惰儗鍚庣殑浠d環浠ュ強鎵瑕佸埌杈劇殑鐩殑錛屾墍浠ヨ櫧鐒跺紑鍙戞椂鍊欙紝瀛樺湪蹇冩櫤鍖呰⒈褰卞搷寮鍙戞晥鐜囷紝浣嗘槸錛屼絾鍐呭績灝變笉浼氬瓨鍦ㄤ粈涔堟ц兘鍖呰⒈鐨勮礋緗劅銆傚氨涓漢鑰岃█錛岃繕鏄枩嬈?/span>c++榪欑鏈楂樿嚜鐢卞害鐨勮璦錛屾湁鏃跺欙紝瀵逛簬鍐呭瓨鏈緇嗚嚧鐨勬帶鍒訛紝鍙互寰楀埌鏇寸簿綆鐨勮璁★紝榪欓噷鏃犲叧榪愯鎬ц兘錛屽ソ姣旇錛屽湪c++涓紝鍙鍐呭瓨甯冨眬涓鑷達紝鍗充究鏄笉鍚岀被鍨嬬殑瀵硅薄錛岄氳繃寮哄埗綾誨瀷杞崲鏉ョ粺涓瀵瑰緟錛岃繘鑰屽仛鍖し鎵鎬濅箣浜嬶紝濂芥瘮COM閲岄潰錛屼負浜嗚仛鍚堝鐢紝涓涓被錛岀珶鐒跺彲浠ラ拡瀵瑰悓涓涓帴鍙f彁渚涗袱濂楀疄鐜版柟寮忋傝繖縐嶆柟渚匡紝鍦ㄥ叾浠栧己綾誨瀷璇█涓槸涓嶆敮鎸佺殑銆?/span>
鏌愮鎰忎箟涓婅錛?/span>c++鍦ㄩ潰鍚戝璞′笂鎻愪緵鐨勮璦鏈哄埗錛屽氨鏄負浜嗘柟渚垮湴鐢熸垚鍚勭鍐呭瓨甯冨眬錛屼互鍙婃鍐呭瓨甯冨眬涓婃墍鑳芥敮鎸佺殑鎿嶄綔錛岃櫄鍑芥暟鐢ㄤ互鐢熸垚涓鍫嗘垚鍛樺嚱鏁版寚閽堬紝緇ф壙鍒欑敤浠ユ柟渚垮湴鐢熸垚涓鍧ㄦ垚鍛樺瓧孌碉紝……銆傛墍浠ワ紝c++鐨勯潰鍚戝璞″氨鏄潰鍚戝唴瀛樺竷灞鍦拌璁★紝鑰屽緇ф壙銆佽櫄緇ф壙銆佹ā鏉胯繖浜涢涓滆タ寰堝鏄撳氨瀵艱嚧鍐呭瓨甯冨眬鐨勫け鎺э紝涓嶈繃錛屽鏋滀嬌鐢ㄥ緱褰擄紝鍗村張鏈夐鏂х宸ヤ箣濂囨晥錛屽垱閫犲嚭鏉ュ叾浠栬璦鎵娌℃湁鐨勫榪廣傜湡鐨勶紝璁哄姩鎬佽涓鴻壓鏈紝浠諱綍璇█鍦?/span>c++榪欎釜澶т漢闈㈠墠閮芥槸騫煎効鍥噷鐨勫皬瀛︾敓銆?/span>
涓轟簡寮曞嚭鎺ュ彛錛屾湰搴ц姳澶у姏姘斿仛縐戞櫘銆傝繖涔熸病鍔炴硶錛屽洜涓虹被铏界劧鏄熀紜錛屼絾鏄潤鎬侀潰鍚戝璞$殑綺懼崕錛屽叏閮ㄩ兘鍦ㄦ帴鍙d笂銆傚彧鏈夋竻鏅版槑紜被鐨勫姛鑳借亴璐o紝鎵嶈兘鐞嗚В鎺ュ彛鐨勫繀瑕佹т互鍙婂叾澶氭牱鎬с傞偅涔堬紝鍙笉鍙互鍙湁鎺ュ彛錛屾病鏈夌被鐨勩傚彲浠ワ紝灝卞ソ鍍廲om閭f牱瀛愶紝鑰屼唬浠鋒槸錛屼嬌鐢ㄨ搗鏉ワ紝鍚勭涓嶆柟渚褲傝繖涓笘鐣岋紝浠庢潵灝變笉瀛樺湪鍖呮不鐧劇梾涔嬩竾鑳借嵂銆備粈涔堜簨鎯呴兘鑳藉仛鐨勬剰鎬濆氨鏄粈涔堥兘鍋氫笉濂姐?/span>
鐢變簬娑夊強鐨勯鐩繃浜庡簽澶э紝鍙嶈屼笉鐭ラ亾濡備綍涓嬬瑪銆傚厛緗楀垪涓涓嬮棶棰橈紝涔嬮棿娌℃湁涓ユ牸鐨勫厛鍚庝箣鍒嗭紝綰補灝辨槸絎旇呮兂鍒板摢閲岋紝灝卞啓鍒板摢閲屻備篃涓嶄竴瀹氬氨浼氳В絳斻傜戶鎵跨殑鏈川鏄粈涔堬紵涓轟粈涔堜竴瀹氳鏈夋帴鍙o紵c++澶氱戶鎵夸負浣曢ケ鍙楅潪璁紝鐪熺殑灝變竴鏃犳槸澶勶紵涓轟綍絎旇呭氨鍙嶆劅go鎺ュ彛錛屽弽姝?/span>go鐙湁鐨勪竴鍒囷紝絎旇呴兘鏄笅鎰忚瘑鐨勬帓鏂ワ紵鍔熻兘綣佹潅鐨?/span>Com錛岀粨鍚?/span>C++鐨勮嚜韜壒鐐癸紝鑳藉惁鏀瑰ご鎹㈤潰錛?/span> ……
鍦ㄥ師鏁欐棬鐪奸噷錛岄潰鍚戝璞$殑鏁欎箟灝辨槸“瀵硅薄+娑堟伅鍙戦?/span>”錛屾暣涓▼搴忕敱瀵硅薄緇勬垚錛岃屽璞′箣闂寸殑灝變粎浠呭彧閫氳繃鍙戦佹秷鎭搷搴旀秷鎭潵浜や簰錛岀▼搴忕殑鍔熻兘閮芥槸鍦ㄥ璞′笌瀵硅薄鐨勬潵鍥炴秷鎭彂閫佷腑瀹屾垚錛岀敤鐜板疄浜嬫儏綾繪瘮錛屼漢綾誨氨鏄竴涓釜媧葷敓鐢熺殑瀵硅薄錛屼漢綾婚氳繃娑堟伅鐨勫線鏉ワ紝姣斿璇煶銆佹枃瀛椼佸箍鎾瓑錛屾湁浜哄埗閫犳柊闂伙紝鏈変漢鎺ュ彈鍒拌繖浜涙秷鎭悗錛屽悇鑷弽搴旓紝鏈鍚庡畬鎴愪竴鍒囩ぞ浼氭椿鍔ㄣ傚ソ鍍忚寰楁湁鐐規娊璞★紝灞曞紑鏉ヨ錛屽叾瀹炲氨鏄紝娑堟伅鐨勫彂閫佽咃紝鍘熷垯涓婁笉闇瑕佷簨鍏堜簡瑙g洰鏍囧璞$殑浠諱綍鑳屾櫙璧勬枡錛岀敋鑷充粬鏄庣煡閬撳鏂逛笉楦熸秷鎭紝姣斿璇達紝鏄庢槑瀵規柟灝辨槸涓涓篂涓愶紝浣嗘槸騫朵笉濡ㄧ浣犲悜浠栧?/span>500涓囦漢姘戝竵錛屽弽姝o紝娑堟伅灝辨槸榪欐牱鍙戦佸嚭鍘葷殑銆傜劧鍚庯紝瀵硅薄鎺ュ彈鍒版秷鎭箣鍚庯紝灝卞悇鑷弽搴旓紝姣斿璇存湁浜虹湡鐨勫熼挶緇欎綘錛涙湁浜哄摥絀鳳紱鏈変漢鍢鍜曚綘鍒板鍊熼挶錛屾棤鑰伙紱……錛屽悇寮忓悇鏍鳳紝涓嶄竴鑰岃凍銆?/span>
鍚搗鏉ュソ鍍忎漢綾葷ぞ浼氭椿鍔ㄥ氨鏄秷鎭殑寰鏉ヤ笅鎺ㄥ姩錛岃壈闅劇殑鍓嶈繘錛屼絾鏄紝榪欒兘鎷挎潵鎼爾鍚楋紵鍙互鐨勶紝鐪熺殑鍙互錛佸嵆渚挎槸C璇█錛岄兘鍙互鏉ユ悶娑堟伅鍙戦佽繖縐嶉珮澶т笂鐨勪簨鎯咃紝灝卞ソ鍍?/span>win32閭f牱瀛愶紝閫氳繃SendMessage鍑芥暟緇欑獥鍙e彂閫佹秷鎭紝鍏剁鍚嶅涓嬶細
LRESULT SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
濂藉儚鍙傛暟鏈夌偣澶氥傝鐧戒簡錛屾秷鎭彂閫佸氨鐩稿綋浜庢垚鍛樺嚱鏁板嚱鏁拌皟鐢ㄧ殑涓涓柊椹敳錛屾崲浜嗕竴縐嶈娉曡屽凡銆傛垚鍛樺嚱鏁拌皟鐢紝褰㈠紡鏄繖鏍峰瓙錛?/span>obj.fn(param1, param2, …)錛屾秹鍙婂埌瀵硅薄錛屽嚱鏁板悕瀛楋紝榪樻湁鍙傛暟錛屽彲鑳藉弬鏁版暟閲忎笉姝竴涓紝鍙傛暟綾誨瀷涔熷悇涓嶄竴鏍鳳紝榪欎簺閮芥病鍏崇郴銆?/span>hWnd涓虹獥鍙o紝涔熷嵆鏄璞★紱Msg涓哄嚱鏁板悕縐幫紝鐜板湪鐢ㄦ鏁村瀷緙栧彿鏉ヤ唬琛紝鏈変簺娑堟伅鍙戦佺郴緇熺敤鍘熷瓙錛?/span>qt濂藉儚鏄敤瀛楃涓詫紙鎬ц兘鍫咖鍟婏級錛?/span>wParam錛?/span>lParam鍙互鐪嬫垚void*綾誨瀷錛屼篃鍗蟲槸鍑芥暟鐨勫弬鏁幫紝鐢ㄨ繖涓や釜鍊煎皝瑁呮墍鏈夌殑鍙傛暟銆傚ぉ鐪燂紝澶╀笅鍑芥暟鍙傛暟綾誨瀷鎴愬崈涓婁竾錛屽弬鏁版暟鐩垨0涓佹垨1涓佹垨涓変簲涓佹垨涓冨叓涓紝灝?/span>wParam錛?/span>lParam榪欎袱涓急楦★紝灝辮兘灝佽寰楄繃鏉ワ紵鍙互鐨勶紝閫氳繃寮哄埗綾誨瀷杞崲錛屽氨鍙互璁?/span>void*鐨勫間繚瀛?/span>char銆?/span>int銆?/span>float絳夊鹼紝鍙堟垨鑰呮槸灝嗗弬鏁版墦鍖呬負緇撴瀯浣擄紝榪欐牱瀛愶紝灝卞彲浠ュ簲浠樺崈鍗冧竾涓囩殑鍑芥暟鍙傛暟瑕佹眰錛岃繖鏍峰瓙錛屼笉瑕佽錛屾湁涓や釜wParam錛?/span>lParam鏉ヤ紶閫掑弬鏁幫紝灝辯畻鏄彧鏈変竴涓紝涔熼兘鍙互搴斾粯鍗冨崈涓囦竾鐨勫嚱鏁拌姹傘?/span>
閭d箞錛屽浣曞搷搴旀秷鎭紵鍙互鍙傝?/span>win32鐨勫師鐢?/span>api寮鍙戯紝榪欓噷灝變笉灞曞紑浜嗐傚師鐞嗗氨鏄紝姣忎釜瀵硅薄閮芥湁涓涓嚱鏁版寚閽堬紝閭d釜鍑芥暟鎶婂叏閮ㄧ殑鎴愬憳鍑芥暟閮藉帇緙╁湪涓涓簽澶х殑switch璇彞閲岄潰錛屾瘡涓秷鎭紪鍙?/span>case鍒嗘敮錛屽氨浠h〃涓涓垚鍛樺嚱鏁幫紝鏄劇劧錛岃繖涓垎鏀紝瑕佸厛灝?/span>wParam錛?/span>lParam閲岄潰鍦ㄨ繕鍘熸垚瀵瑰簲鍙傛暟鐨勫疄闄呮儏鍐碉紝鐒跺悗鍐嶆墽琛岀浉搴旀搷浣溿?/span>
SendMessage鏄劇劧鎶瑰幓浜嗘墍鏈夌獥鍙g殑鍏蜂綋綾誨瀷淇℃伅錛岀敪綆′綘鏄寜閽佹紓浜寜閽佽彍鍗曘佺紪杈戞銆?/span>……錛屽叏閮ㄤ竴寰嬮兘閫鍖栨垚紿楀彛瀵硅薄銆傝寰緙栬緫妗嗛噷闈㈡坊鍔犳枃瀛楋紝灝辯粰瀹冨彂閫佹坊鍔犳枃瀛楃殑娑堟伅錛?/span>wParam錛?/span>lParam灝卞甫鐫瑕佹坊鍔犵殑鏂囨湰鍜岄暱搴︺傝屼笉鏄皟鐢ㄧ紪杈戞鐨勬坊鍔犳枃瀛楃殑鎴愬憳鍑芥暟鏉ュ仛榪欎釜浜嬫儏錛屾渶鏄庢樉鐨勪簨鎯咃紝灝辨槸涔熷彲浠ョ粰鎸夐挳紿楀彛涔熷彂閫佹坊鍔犳枃鏈殑娑堟伅錛岃櫧鐒舵寜閽獥鍙e姝ゆ秷鎭殑鍙嶅簲鏄暐涔熶笉鍋氥備護浜烘儕璁剁殑鏄紝浣犲彲浠ュ瓙綾誨寲涓涓寜閽獥鍙o紝璁╁畠瀵規坊鍔犳枃鏈殑娑堟伅鍋氬嚭鍙嶅簲錛岃繖瀹屽叏鏄彲浠ョ殑銆?/span>
鏄劇劧錛屽師鏁欐棬鐨勯潰鍚戝璞℃暀涔夛紝鐨勮屼笖紜紝鐏墊椿錛岃В鑰﹀交搴曪紝涓嶅悓綾誨瀷瀵硅薄涔嬮棿鐨勮﹀悎鍏崇郴涓寰嬩笉澶嶅瓨鍦紝涔嬮棿鍙湁娑堟伅鐨勫線鏉ャ傞殢蹇冩墍嬈茬殑鍙戦佹秷鎭紙鑳′貢璋冪敤鎴愬憳鍑芥暟錛夛紝鑷敱鑷湪鐨勫弽搴旀秷鎭紙涓鍒囧叏鏃犲綰﹀彲璦錛夛紝涓嶇悊鐫紝鎴栬呰繖涓鍒諱笉鐞嗙潿涓嬩竴鍒誨張鍔ㄤ簡錛屾垨鑰呰繖涓鍒誨姩浜嗕笅涓鍒誨張鎷掔粷鍙嶅簲銆傜敋鑷籌紝娑堟伅榪樺彲浠ヤ繚瀛橈紝鎺掗槦錛屾眰鍙嶏紝鍙犲姞浠涔堢殑錛屼篃鍗蟲槸娑堟伅宸茬粡鏄竴縐嶆娊璞℃暟鎹被鍨嬩簡錛屾敮鎸佸縐嶈繍綆椼傜浉姣斾簬涓嶇煡鎵璋撶殑鍩轟簬綾葷殑闈欐侀潰鍚戝璞★紙緇ф壙灝佽澶氭侊級錛岀畝鐩翠笉鍙悓鏃ヨ岃錛屽お澶氱殑綰︽潫錛屽憜鏉跨殑璇硶錛屾繁鍏ョ殑鍝插鎬濊冿紝鏋跺簥鍙犲眿鐨勭被鍨嬪叧緋伙紝涔熷ソ鎰忔濆浜哄鍙潰鍚戝璞°?/span>
褰撶劧錛屽璞?/span>+娑堟伅鍙戦佽繖縐嶆満鍒訛紝浠樺嚭鐨勪唬浠蜂篃鏄緢宸ㄥぇ鐨勶紝鍩烘湰涓婏紝鍑芥暟璋冪敤鐨勯潤鎬佺被鍨嬫鏌ヤ笉鏈嶅瓨鍦紝鎵鏈夐棶棰橀兘瑕佸埌榪愯鏃舵墠鑳藉彂鐜般傚茍涓旓紝娑堟伅鍙戦佺殑璇硶涔熷緢涓嶇洿瑙傦紝蹇呴』鍚勭綾誨瀷杞崲錛岃屽搷搴旀秷鎭椂鍙堝繀欏昏漿鎹㈠洖鍘匯傛澶栵紝涓哄嚱鏁板畾涔夋秷鎭紪鍙鳳紝涔熷緢鎭跺績銆備笉榪囷紝榪欎簺鍦ㄥ姩鎬佽璦閲岄潰閮戒笉鏄棶棰橈紝鍙嶆錛屽姩鎬佽璦閲岄潰娌℃湁闈欐佺被鍨嬬害鏉熴傚彟澶栵紝絎旇呯敤template銆佸叏灞鍙橀噺銆佸畯絳夊鎶娣閥錛屽湪c++閲岄潰錛屽凡緇忓疄鐜頒簡綾誨瀷瀹夊叏鐨勬秷鎭彂閫佹鏋訛紝姣斿錛?/span>Send(obj, kAppendText, U8String(“hello”))錛岃屽璞″疄鐜板娑堟伅鐨勫搷搴旓紝鐩存帴涔熸槸鎴愬憳鍑芥暟鐨勫艦寮忥紝騫朵笖榪樻槸闈炰鏡鍏ュ紡鐨勶紝涔熷嵆鏄錛屽湪main鍑芥暟涔嬪墠錛屽彲浠ラ殢鏃跺湪浠繪剰鍦版柟緇欏璞℃坊鍔犳柊鐨勬秷鎭弽灝勶紝鎵鏈夊弬鏁頒笂綾誨瀷杞崲浠ュ強榪斿洖鍊間笂鐨勭被鍨嬭漿鎹紝鍏ㄩ儴閮戒笉闇瑕佷簡銆?/span> 浣嗗嵆渚挎槸榪欐牱錛屼篃涓嶈禐鎴愬師鏁欐棬鐨勯潰鍚戝璞″埌澶勬硾婊ャ傚師鍥犳槸錛岀敤瀹冨啓鍑烘潵鐨勭▼搴忥紝綾誨瀷灞傛寰堜笉娓呮櫚錛岀浉姣斾簬鏋舵瀯鑹ソ鐨勭被褰㈠紡鐨勯潰鍚戝璞$▼搴忥紝鍙鎬ц繙榪滀笉濡傦紝涔熶笉濂界淮鎶ゃ傛洿娣卞埢鐨勫師鍥犳槸錛屽璞?/span>+娑堟伅鍙戦佺殑濞佸姏澶儕浜猴紝鐢ㄩ斿お騫匡紝浠諱綍澶氭佷笂鐨勮涓猴紝閮藉彲浠ョ敤瀹冩潵鍋氥備粈涔堥兘鍙互鍋氾紝灝辨剰鍛崇潃浠涔堥兘灝介噺涓嶈璁╀粬鏉ュ仛銆?/span>
鍏跺疄錛屽嵆渚?/span>java銆?/span>C#榪欑緇ф壙灝佽澶氭佺殑闈㈠悜瀵硅薄鍗冭埇寮遍浮鍚勭綣佹枃緙涜妭錛屼篃涓嶅Θ紕嶄漢瀹剁О闇稿ぉ涓嬶紝鍒板嫻佽銆備綘瀵硅薄+娑堟伅鍙戦佸啀緹庡錛屾祦琛屽害閮戒笉鍙婁漢瀹?/span>java涓涓浂澶達紝obj c榪樹笉鏄潬鐫ios鐨勬祦琛屾墠鏈夋墍璧瘋壊錛屾尋鍏ユ帓琛屾鍗佸悕鍐呫傝櫧鐒惰甯傚満涓嶈兘璇存槑浠涔堬紝浣嗘槸瀵規瘮濡傛鎮畩錛岃嚜鏈夊叾閬撶悊銆?/span>
鍐嶈錛岄潤鎬佺被鍨嬬殑鎴愬憳鍑芥暟璋冪敤妯″紡錛屽箍娉涘瓨鍦ㄤ簬浜虹被紺句細媧誨姩涓備漢涓庝漢涔嬮棿鐨勫緢澶氫簨鎯咃紝鍏跺疄鍙婊¤凍涓瀹氱殑鏉′歡錛屽繀鐒跺氨浼氬彂鐢燂紝鍏跺悗鏋滀篃鍙互棰勬枡銆傚緢澶氭秷鎭殑鍙戦侊紝鍏跺疄鏄湁鑰冭檻鍒板鏂圭殑韜喚闂錛屾墠浼氬彂璧鳳紝濂芥瘮灝忓瀛愯窡鐖稿瑕侀浂鐢ㄩ挶鐨勬秷鎭紝灝忓瀛愬啀鍙戦佽闆剁敤閽辯殑娑堟伅錛屼竴瀹氭槸閽堝浜蹭漢鎵嶅彂璧風殑銆傜湡鐩告槸錛屽線寰瑕佹弧瓚充竴浜涘繀瑕佹潯浠訛紝娑堟伅鎵嶅緱浠ュ彂璧鳳紝褰撶劧錛屽彧瑕佷綘楂樺叴錛岄殢鏃墮兘鍙互鍙戣搗浠諱綍娑堟伅錛岄棶棰樻槸錛岃繖縐嶄漢澶氬崐涓嶆甯搞傞噺浣撹琛o紝閽堝浠涔堟牱鐨勯棶棰橈紝灝卞簲璇ラ噰鐢ㄧ浉搴旂殑鎵嬫錛屼竴鎷涢矞鍚冮亶鍏ㄥぉ涓嬶紝琛屼笉閫氱殑銆傚叿浣撻棶棰橈紝蹇呴』鍏蜂綋鍒嗘瀽銆傛瘡縐嶉棶棰橈紝閮芥湁鑷繁鏈鐙壒鏈夋晥鐨勮В娉曘傜瑪鑰呭湪鍘熸暀鏃ㄧ殑闈㈠悜瀵硅薄涓婇噸澶嶅お澶氬唴瀹癸紝榪炶嚜宸遍兘鎭跺績錛屼互鍚庡簲璇ュ緢灝戝啀鎻愬強銆?/span>
鎵浠ヨ錛岄潰鍚戝璞$殑璁捐錛岄鍏堝簲璇ラ噰鐢ㄧ殑蹇呯劧榪樻槸緇ф壙灝佽澶氭佺殑鎬濊礬銆傚湪姝ゅ熀紜涓婏紝鏍規嵁涓嶅悓鐨勫姩鎬佽姹傦紝閲囩敤涓嶅悓絳栫暐鏉ュ簲瀵廣備紒鍥劇敤涓囪兘鐨勬秷鎭彂閫佹潵浠f浛闈欐佺被鍨嬮潰鍚戝璞$殑鑽掕艾灝卞鍚岀敤鍍靛寲鐨勯潰鍚戝璞℃潵妯℃嫙涓鍒囧姩鎬佽涓猴紝涓よ呴兘鏄姱浜嗗悓鏍風殑姣涚梾銆傚彲鏄紝闈欐侀潰鍚戝璞″仛璁捐錛屽張紜疄鍥伴毦閲嶉噸錛岃屾渶緇堢殑寮鍙戞垚鏋滐紝鎬繪槸璁╀漢闅句互婊℃剰銆傞偅鏄洜涓猴紝騫垮ぇ鍔沖姩緹や紬瀵歸潤鎬侀潰鍚戝璞′竴浜涘熀鏈蹇電殑鐞嗚В錛屽瓨鍦ㄨ繖鏍烽偅鏍風殑璇尯錛岃岀敱浜庨潰鍚戝璞¤璦錛?/span>java錛?/span>C#錛夎繕緙轟箯涓浜涘繀瑕佹満鍒訛紝瀵艱嚧璁捐涓婂嚭鐜板Ε鍗忥紝鍘熷垯鎬х殑閿欒瓚婄Н瓚婃繁錛屼互鑷充簬鏈鍚庡穿鐩樸傚叾瀹烇紝涓嶈璇翠竴鑸漢錛屽氨榪炲ぇ浜虹墿錛屽湪闈㈠悜瀵硅薄涓婏紝涔熼兘鍙槸鎺㈢儲錛屽ソ姣?/span>c++涔嬬埗BS錛屾悶鍑烘潵澶氱戶鎵匡紝铏氱戶鎵匡紝iostream浣撶郴錛屽湪閿欒鐨勯亾璺笂錛岃秺璧拌秺榪滐紝瓚婅蛋瓚婅繙銆?/span>
濂藉惂錛屽叾瀹烇紝澶氱戶鎵匡紝榪樻槸寰堟湁浣滅敤鐨勶紝鍦ㄥ緢澶氬鎶娣閥涓婂緢鏈夌敤姝︿箣鍦幫紝寰堟柟渚褲備絾鏄紝鐢ㄥ緇ф壙鍋氭灦鏋勭殑鍗遍櫓錛屽氨鍦ㄤ簬鍏跺姛鑳藉お榪囧己澶с傝繖灝辨剰鍛崇潃瀹冭娌﹁惤鎴愪負goto鍟娿佹寚閽堝晩閭f牱鐨勮鑹詫紝鍏堢敪綆″畠閽葷煶灝村艾銆傚緇ф壙鐨勬渶閲嶈瑙掕壊錛屾蹇靛疄鐜幫紝涔熷嵆鏄帴鍙o紝涔熷嵆鏄畾涔変竴鎵硅櫄鍑芥暟錛岄噷闈㈡病鏈変換浣曟暟鎹紝榪欎釜鎶借薄灝卞繀欏婚矞鏄庯紝榪欎竴鐐癸紝java鍜?/span>C#灝卞仛寰楀緢鍒頒綅銆傚氨搴旇浠庡緇ф壙涓婃彁鐐煎嚭鏉ヨ繖涔堜竴涓ソ涓滆タ錛屽挦錛屽浜嗭紝涓轟綍瑕佹湁鎺ュ彛錛熸病鏈夋帴鍙o紝灝辯湡鐨勪笉琛屽悧錛熸槸鐨勶紝闈欐侀潰鍚戝璞¢噷闈紝鎺ュ彛紜疄蹇呬笉鍙皯銆?/span>
緇ф壙錛屾湰璐ㄤ笂灝辨槸鍒嗙被瀛︺傝屽垎綾伙紝鏈閲嶈涓鐐癸紝灝辨槸浠諱綍涓浠跺厓绱狅紝蹇呴』涔熷彧鑳藉彧灞炰簬鍏朵腑涓涓被錛屼笉寰楀惈緋娿傚彲浠ュ瓨鍦ㄥ縐嶅垎綾繪柟寮忥紝浣嗘槸錛屼竴鏃︾‘瀹氭煇縐嶅垎綾繪柟寮忥紝閭d箞闆嗗悎閲岄潰鐨勪竴涓笢瑗匡紝灝卞繀欏誨彧鑳藉睘浜庡叾涓竴澶х被銆傜戶鎵匡紝灝辨槸鍒嗙被鐨勪竴鍐嶇粏鍖栵紝涔熸槸姒傚康鐨勭戶緇赴瀵屻傛瘮濡傝錛屼粠鐢熺墿鍒板姩鐗╁埌鍝轟鉤鍔ㄧ墿錛屾蹇靛寘鍚殑鏁版嵁瓚婃潵瓚婂銆傛墍浠ヨ錛岀戶鎵夸綋鐜扮殑鏄暟鎹笂鐨勪赴瀵屽叧緋伙紝瀹冨己璋冪殑鏄暟鎹殑縐瘡錛屼粠榪滃彜鍩虹被寮濮嬶紝涓璺Н绱笅鏉ョ殑鏁版嵁錛屽叏閮ㄥ繀涓嶅彲灝戯紝涔熶笉寰楅噸澶嶏紝涓鏃﹁繚鍙嶈繖鏉″簳綰匡紝灝辨剰鍛崇潃緇ф壙浣撶郴涓婄殑閿欎貢銆傜戶鎵匡紝鐩稿綋浜庣被鍨嬬殑紜歡錛岀己涔忕‖浠跺厓鍣ㄤ歡鏃訛紝灝辨棤娉曞畬鏁磋〃杈捐綾誨瀷鐨勬蹇點傛瘮濡傝錛屼漢綾誨彲鍒嗕負鐢蜂漢銆佸コ浜猴紝鑷劧錛岀敺浜烘湁鐢蜂漢鐨勯槼鍒氾紝濂充漢鏈夊コ浜虹殑闃存煍錛岄偅涔堥槾闃沖悓浣撴庝箞鍔烇紝闆嗕袱鎬т箣鎵闀匡紝闅鵑亾灝辮闃撮槼浜哄緇ф壙涓庣敺浜哄コ浜哄悧錛熼偅涔堬紝榪欐牱緇ф壙涓嬫潵錛岄槾闃充漢宀備笉鏄氨鏄湁涓や釜澶達紝鍥涘彧鎵嬶紝鍥涙潯鑵夸簡錛屽晩錛岃繖涓嶆槸闃撮槼浜猴紝榪欐槸瓚呬漢錛屾姂鎴栨槸鎬墿銆傛墍浠ワ紝闃撮槼浜哄簲璇ユ槸浜洪噷闈㈢殑涓涓垎鏀紝涔熷嵆鏄紝浜虹殑鍒嗙被錛屽氨瑕佹湁鐢蜂漢銆佸コ浜恒侀槾闃充漢榪欎笁澶у熀綾匯傚啀嬈″己璋冿紝緇ф壙鏄負浜嗙戶鎵挎暟鎹紝鑰屼笉鏄負浜嗗姛鑳斤紝鍔熻兘鍙笉榪囨槸鏁版嵁鐨勯檮甯﹀搧銆傞偅涔堬紝鎬庝箞鎻忚堪鐢蜂漢鐨勯槼鍒氥佸コ浜虹殑闃存煍錛屾庝箞閬垮厤闃撮槼浜哄紩鍏ュ悗錛屽垎鍒粠鐢蜂漢闃沖垰錛屽コ浜洪槾鏌斾笂澶嶅埗浠g爜鍛紵姝ゅ錛屽啀嬈¤冭檻騫寵鍥涜竟褰紝涓嬮潰濂藉儚鍙堟湁鑿卞艦錛屾湁鐭╁艦涓ゅぇ綾伙紝鐒跺悗韜泦鑿卞艦鐭╁艦鐨勬鏂瑰艦錛岃繖閲岀殑鍒嗙被璇ュ浣曞鐞嗭紝闅鵑亾蹇嶄笉浣忚璁╂鏂瑰艦澶氱戶鎵胯彵褰㈢煩褰㈠悧錛熶粠榪欎釜鎰忎箟涓婅錛屽湪鍚屼竴浣撶郴涓嬶紝澶氱戶鎵跨殑鍑虹幇錛岀悊鎵褰撶劧錛屽ぇ閿欑壒閿欙紝鐢辨鍙煡錛?/span>iostream灝辨槸璐ョ被銆?/span>iostream閫氳繃铏氱戶鎵塊伩鍏嶇粷涓栭捇鐭崇殑鍑虹幇錛屼絾鏄繖涓櫄緇ф壙鍟婏紝鐪熸槸瑕佽浜哄懙鍛點侰++涓紩鍏ヨ櫄緇ф壙鐪熸槸錛屾庝箞璇村憿錛屽ソ鍚э紝涔熺畻鑴戞礊澶у紑鐨勪紭鑹墿鍝侊紝涔熶笉鏄畬鍏ㄤ竴鏃犳槸澶勶紝璧風爜錛屽湪iostream涓婂氨澶ф淳鐢ㄥ満浜嗐備綘灝辮璇達紝铏氱戶鎵塊偅鐐逛笉濂戒簡錛熷氨涓鐐癸紝涓轟簡瀛愬瓙綾葷殑鍗冪鍩轟笟錛屽瓙綾誨繀欏昏櫄緇ф壙鍩虹被錛屽瓙綾誨彈瀛愬瓙綾誨獎鍝嶏紝灝辮繖涓鐐癸紝浣犺兘蹇嶃?/p> 紿佺劧鍙戠幇錛屾枃绔犲凡緇忓緢闀夸簡錛屼笉綆′簡錛岃繖灝辨墦浣忋傝嚦浜庨潪渚靛叆寮忔帴鍙o紝浠ュ悗鍐嶈鍚э紒
]]>
鏄晩錛?/span>1銆佹病鏈夊瀮鍦懼洖鏀訛紱2銆佹病鏈夊師鐢熸敮鎸佺殑瀹屽杽鍙嶅皠鑳藉姏錛?/span>3銆佸緇ф壙銆佽櫄緇ф壙瀵艱嚧鐨勫鏉傚唴瀛樺竷灞銆傝繖涓夊駭澶у北闈㈠墠錛?/span>c++鐨勭爜鐚垮摢鏁㈡煋鎸囦粈涔堥潰鍚戝璞★紝鍙湪榪笉寰楀凡鐨勬儏鍐典笅錛屽皬蹇冪考緲煎湴浣跨敤virtual銆備絾鏄紝浜嬪疄涓婏紝瑕佺帺闈㈠悜瀵硅薄錛?/span>c++鍘熸潵涔熷彲浠ョ帺寰楀緢鐐紝鐢氳嚦錛屽彲浠ヨ錛屽叧浜庨潰鍚戝璞$殑鑳藉姏錛?/span>c++鏄渶寮虹殑錛堟病鏈変箣涓錛夈傝繖鎬庝箞鍙兘錛?/span>
鎵璋撶殑闈㈠悜瀵硅薄錛岃鐧戒簡錛屽氨鏄鍔ㄦ佽涓虹殑淇℃伅鏀寔錛岃兘鍦ㄩ潰鍚戝璞¤璁′笂鐙椋庨獨鐨勮璦錛岄兘鏄湁鐫瀹屽杽鐨勮繍琛屾椂綾誨瀷淇℃伅錛屽氨榪?/span>lisp錛屽叾榪愯鏃跺厓鏁版嵁涔熼兘寰堝畬澶囥傞潤鎬佸己綾誨瀷璇█錛?/span>java銆?/span>C#錛変笌鍔ㄦ佽璦姣旓紝鏄劇劧鏈夌潃寮哄ぇ鐨勯潤鎬佺被鍨嬭兘鍔涳紙榪欎笉鏄簾璇濆悧錛夛紝鑳藉湪緙栬瘧鏈熷氨鎻愬墠鍙戠幇綾誨瀷涓婄殑璇稿閿欒錛屼絾鏄篃鍥犳甯︿笂闈欐佺害鏉燂紝瀵艱嚧鍛嗘澘銆佺箒鐞愮殑浠g爜錛?/span>java鐨勭箒鏂囩紱鑺傦紝灝辨槸鏈濂借瘉鏄庯紱鑰屽姩鎬佽璦鎭板ソ鐩稿弽錛屼唬鐮佺畝媧侊紝搴熻瘽灝戯紝浣嗘槸涓уけ闈欐佷俊鎭紝鎵璋撻噸鏋勭伀钁満錛岄偅閮芥槸琛鍜屾唱鐨勬暀璁傞潤鎬佽璦涓庡姩鎬佽璦鐪熸槸涓瀵瑰啢瀹訛紝濡傚悓鍏夌殑娉㈢矑鎬э紝宸變箣鎵闀挎伆鏄郊涔嬫墍鐭紝宸變箣鎵鐭張鏄郊涔嬫墍闀匡紝楸間笌鐔婃帉涓嶅彲鍏煎緱銆傝?/span>C++绔熺劧鑳介泦涓ゅ涔嬫墍闀匡紝鍦ㄩ潤鎬佽璦鐨勯鍩熶腑鐜╁悇縐嶅姩鎬佽涓鴻壓鏈紝姣斿鍔ㄦ佷慨鏀圭被鍨嬬殑鍙嶅皠淇℃伅錛屽崈濂囩櫨鎬殑鑺辨牱浣滄錛堜撫蹇冪梾鐙傜殑綾誨瀷杞崲錛夛紱鍦ㄥ姩鎬佽寖鐣撮噷闈紝鍙堝彲浠ュ湪緙栬瘧鏈熸Θ鍙栧嚭鏉ラ潤鎬佺被鍨嬩俊鎭紝姣斿錛屾秷鎭彂閫佺殑鍙傛暟淇℃伅錛屾兂鎯硍in32鐨勬棤綾誨瀷鐨剋param鍜宭param錛屾瘡嬈¢兘瑕佺尶鐚村鐓ф墜鍐岃В鐮侊紝浠庤屾渶澶ч檺搴﹀湴鎸栨帢緙栬瘧鍣ㄧ殑鏈澶ф綔鍔涖傛墍浠ヨ錛?/span>c++鏄渶寮哄ぇ鐨勯潰鍚戝璞¤璦錛屾病鏈変箣涓銆傝屾妸闈欐佸拰鍔ㄦ佽瀺涓轟竴浣撲箣鍚庯紝c++鐨勬娊璞¤兘鍔涗篃鍒拌揪涓涓叏鏂扮殑楂樺害錛岃嚜鍔ㄤ唬鐮佺敓鎴愶紝浠ュ悗鍐嶅彂鎸ワ紝榪欐槸涓涓簽澶х殑璇鵑銆?/span>C++浠や漢鍙戞寚鐨勫己澶э紝緇濆榪滆繙瓚呬箮絳夐棽鐚跨尨鐨勬兂璞★紝鐗瑰埆鏄偅鎵?/span>c with class鐨勮崏瑕嗚櫕鍘熷鐢熺墿銆?/span>C++鍙湪閮ㄥ垎鍑芥暟棰嗗煙鐨勬蹇典笂琛ㄧ幇浠や漢涓嶆弧錛屾瘮濡?/span>lambda琛ㄨ揪寮忕殑鍙傛暟綾誨瀷鑷姩鎺ㄥ錛?/span>monad琛ㄨ揪寮忥紝緙轟箯鍘熺敓鐨勫歡榪熸眰鍊肩瓑銆傚綋鐒訛紝c++鏁翠釜鐨勮璁$悊蹇甸潪甯哥箒鏉傞殢蹇冩墍嬈詫紝浣嗘槸錛屽嵈鍙互鍦ㄨ繖涓鍧楁販娌岄噷闈㈡暣鐞嗗嚭鏉ヤ竴浜涗婦涓栨棤鍙岀殑鎬濇兂浣撶郴錛屽氨鏄錛?/span>c++鏄竴澶у爢鍘熸潗鏂欙紝榪樻湁寰堝鍘ㄦ埧鐢ㄥ叿錛屽寘鎷煷鐏紝璁╃尶鐚磋嚜琛屼笅鍘紝鍋氬嚭鏉ョ殑鑿滆偞鍙互寰堥毦鍚冿紝涔熷彲浠ユ槸婊℃眽鍏ㄥ腑錛屽叏鐪嬬尶鐚寸殑鎵嬭壓銆?/span>
褰撶劧錛岃鍦?/span>c++閲屽ご鎼為潰鍚戝璞★紝澶氱戶鎵匡紝铏氱戶鎵跨殑閭d竴濂楋紝蹇呴』褰誨簳鎶涘純銆傛渶澶х殑闂鏄紝澶氱戶鎵夸細瀵艱嚧娣蜂貢鏈煡鐨勪簩榪涘埗鍐呭瓨甯冨眬錛岃櫄鍑芥暟琛ㄤ篃涓濉岀硦娑傦紝鍗佸嚑騫村墠錛?/span>c++璁捐鏂版濈淮鐨勫熀浜?/span>policy鐨勮寖寮忥紝铏界劧浠や漢鑰崇洰涓鏂幫紝涔熷洜涓鴻繖縐嶈寖寮忎笅瀵硅薄鐨勫唴瀛樺竷灞鍗冨鐧炬紝鎵浠ワ紝鍗充究鏄渶杞誨井鐨勬祦琛屼篃娌℃湁鍑虹幇榪囥傚綋鐒訛紝涔熶笉鍙兘澶ц妯℃悶娑堟伅鍙戦佽繖縐嶅緢geek鐨勫璺紝鍔熻兘澶硾鍖栦簡錛屽叾瀹烇紝娑堟伅鍙戦佸氨鏄姩鎬佺殑緇欏璞℃坊鍔犳垚鍛樺嚱鏁幫紝騫朵笖鍙互鍦ㄨ繍琛屾椂鐭ラ亾瀵硅薄鏈夊灝戞垚鍛樺嚱鏁幫紝閭d釜鎴愬憳鍑芥暟鍙互瀵硅娑堟伅鍋氬嚭鍙嶅簲錛屾秷鎭彲浠ユ槸瀛楃涓詫紝鏁村瀷ID錛堝師瀛愶級錛?/span> MFC鐨勬秷鎭槧灝勮〃(BEGIN_MESSAGE_MAP錛?/span>…)灝辨槸涓涓姛鑳戒弗閲嶇緝姘寸増鐨勫ソ渚嬪瓙錛?/span>c++涓嬫敮鎸佹秷鎭槧灝勭殑搴擄紝緇濆鍙互姣旂牬mfc鐨勯偅涓濂楄濂戒笂鍗冪櫨鍊嶏紝涓嶇鏄ц兘銆佺被鍨嬪畨鍏ㄣ佷嬌鐢ㄦ柟渚夸笂銆傜洰鍓嶉櫎浜嗗湪gui榪欑鍙樻佺殑鍦哄悎涓嬫墠闇瑕佸ぇ鎼炴秷鎭彂閫侊紝鍏朵粬鍦烘櫙錛屽畬鍏ㄥ彲浠ヨ鐢ㄤ笉涓婏紝铏界劧璇存秷鎭彂閫佸緢寮哄ぇ寰堢伒媧伙紝浣嗕篃鍥犱負鍏舵潃浼ゅ姏澶帀瀹籌紝鍙嶈岃鏇村姞鎱庨噸銆傝繖濂芥瘮goto錛屽ソ姣旀寚閽堬紝濂芥瘮stl鐨勮凱浠e櫒錛屼粈涔堥兘鑳藉仛鐨勬剰鎬濓紝灝辨槸浠涔堥兘灝介噺涓嶈瀹冨仛銆?/span>
閭d箞錛?/span>c++涓嬫悶闈㈠悜瀵硅薄錛岃繕鏈変粈涔堟硶瀹濆彲鐢ㄥ憿錛熷綋鐒訛紝鍦ㄦ涔嬪墠錛屾垜浠厛瑕佺洿闈㈠唴瀛樺垎閰嶃傚唴瀛樻棦鏄?/span>c++鐨勫畨韜珛鍛戒箣鏈紝鍙堟槸c++娌﹁惤涓鴻惤姘寸嫍涓у鐘箣騫曞悗澶ч粦鎵嬨傚亣濡備笉鑳戒負鎵嬈蹭負鐨勬搷浣滃唴瀛橈紝閭d箞c++鐨勬姌鑵炬硶瀛愶紝濂囨妧娣閥錛岃搗鐮佽姝繪帀涓澶у崐浠ヤ笂銆傝岀敱浜庤鏀寔鍚勭鑺辨牱浣滄鐨勫唴瀛樻搷浣滐紝c++鐨勫瀮鍦懼洖鏀惰繜榪熸湭鏇懼嚭鐜幫紝灝辮繛浠ュ法紜箣澶ц兘鏁村嚭鏉ョ殑.net閭d箞濂界殑gc錛岄湼鐜嬬‖涓婂紦錛屽湪緇欏師鐢?/span>c++寮虹‖鍔犱笂鎵樼鍔熻兘錛堝瀮鍦懼洖鏀訛級錛岄兘鍑哄姏涓嶈濂姐傚彲瑙佹湭鏉ュ瀮鍦懼洖鏀訛紝瀵?/span>c++鏉ヨ錛屽棷錛屾兂鎯沖氨濂戒簡銆傚唴瀛樻槸璧勬簮錛屾病閿欙紝鐢?/span>raii鏉ョ鐞嗭紝涔熸棤鍙帤闈炪備絾鏄紝鍐呭瓨鍗存槸涓縐嶅緢鐗規畩鐨勮祫婧愶紝1銆佸唴瀛樻椂瀵硅薄鐨勫畨韜珛鍛戒箣鎵錛?/span>2銆佷笉鍚屼簬鏅氳祫婧愶紝鍐呭瓨寰堝錛屼笉闇瑕侀┈涓婄敤瀹屽氨鎬ユュ繖蹇欏惎鍔ㄦ竻鐞嗗伐浣滐紝鍙緋葷粺榪樻湁澶ф妸絀轟綑鐨勫唴瀛橈紝灝辯畻榪樻湁寰堝琚氮璐逛簡鐨勫唴瀛橈紝閮戒笉瑕佺揣錛?/span>gc涔熸槸鍥犱負榪欎釜鍘熷洜鎵嶅緱浠ュ瓨鍦ㄣ傜浉姣斿唴瀛橈紝鏅氳祫婧愮粰浜虹殑鎰熻灝辨槸鏁伴噺鍙婂叾鏈夐檺錛岀劧鍚庤鎻愪氦宸ヤ綔緇撴灉錛屽惁鍒欎箣鍓嶆墍鍋氬姫鍔涘氨搴熶簡銆傛墍浠ワ紝瀵逛簬鍐呭瓨錛屽簲璇ヤ篃瑕佺壒鍒寰呫傚氨綆?/span>raii錛屼篃瑕侀噰鐢ㄤ笓闂ㄧ殑raii 銆?/span>
鍋囪鎴戜滑鐨勭▼搴忛噷闈嬌鐢ㄥ縐嶅唴瀛樺垎閰嶅櫒錛屾瘮濡傝錛屾瘡涓嚎紼嬮兘鏈夎嚜宸變笓鏈夌殑鍐呭瓨allocator瀵硅薄錛岀劧鍚庯紝綰跨▼涔嬮棿鐨勫叡浜暟鎹敱鍏ㄥ眬鐨勫唴瀛樺垎閰嶅櫒鍒嗛厤錛岀嚎紼嬬殑鍐呴儴瀵硅薄閮界敤綰跨▼鐨勪笓灞?/span>allocator鏉ュ垎閰嶏紝閭d箞錛屽唴瀛樺垎閰嶅櫒灝辨槸涓涓嚎紼嬪眬閮ㄥ彉閲忥紙tls錛?/span>thread local storage錛夈備簬鏄紝鍙互瑙勫畾錛屾墍鏈夌殑鍐呭瓨鍒嗛厤閮介氳繃GetTlsAllocator()鏉?/span>new瀵硅薄錛屽綋鐒訛紝紜畾鏄叏灞鍏變韓鍙橀噺鐨勮瘽錛屾病鍔炴硶錛屽氨鍙兘鐢?/span>GetGlobalAllocator()鏉?/span>new瀵硅薄銆傞偅涔堬紝鏈夌悊鐢辯浉淇★紝鍚姩涓涓換鍔℃椂錛屾垜浠厛瀹氫箟涓涓?/span>arena allocator鍙橀噺錛屽茍浠ゅ叾鎴愪負褰撳墠綰跨▼鐨勪笓灞炲唴瀛樺垎閰嶅櫒錛岄偅涔堣繖涓換鍔″悗闈㈢殑鎵鏈?/span>new 鍑烘潵鐨勫璞★紝鍖呮嫭寰幆寮曠敤錛岄兘涓嶅繀鍏沖績銆傚彧瑕佷換鍔′竴緇撴潫錛岃繖涓?/span>arena allocator鍙橀噺涓閲婃斁錛屾墍鏈夊瘎鐢熷湪瀹冭韓涓婄殑瀵硅薄錛屽叏閮ㄤ篃閮芥秷澶卞緱騫插共鍑鍑錛屾病鏈変換浣曚竴鐐圭偣鐨勫唴瀛樻硠闇層傚氨綆椾換鍔″唴閮ㄦ湁澶ч噺鐨勫唴瀛樻硠闇詫紝閭e張濡備綍錛屼換鍔′竴緇撴潫錛屾墍鏈夎窡姝や換鍔℃湁鍏崇殑涓鍒囧唴瀛橈紝鍏ㄩ儴鎴愬潡娓呯┖銆傛諱箣錛屼笉瑕佷互甯歌raii鏉ヨВ鍐沖唴瀛樺洶澧冿紝瑙f斁鎬濇兂錛屽湪鍐呭瓨閲婃斁涓婏紝鎴戜滑鍙互鏈変節縐嶅姙娉曡瀹冩錛岃屼笉鏄粎浠呴潬shared_ptr錛?/span>unique_ptr錛?/span>weak_ptr榪欎簺鐙殬鐨勬濈淮銆?/span>
鍏舵錛屽畬鍠勭殑闈㈠悜瀵硅薄璁捐錛岄伩鍏嶄笉浜嗗畬澶囩殑鍙嶅皠錛岀敤浠ュ湪榪愯鏃舵彁渚涘姩鎬佺被鍨嬩俊鎭紝鏃犲弬妯℃澘鍑芥暟鍙互鎶婇潤鎬佺被鍨嬫槧灝勬垚鍏ㄥ眬鍞竴鍙橀噺錛屽ソ姣旓紝TypeOf<vector<int>>錛岃繑鍥?/span>vector<int>鐨勫叏灞鍞竴鐨?/span>const TypeInfo*瀵硅薄錛岃繖涓璞″寘鍚簡vector<int>鐨勬墍鏈夐潤鎬佺被鍨嬩俊鎭紝鍙互榪欎箞璇達紝鍦ㄩ潤鎬佺被鍨嬪眰闈笂vector<int>鎵鑳藉仛鐨勪換浣曚簨鎯咃紝姣斿瀹氫箟涓涓?/span>vector<int>鐨勫彉閲忥紝涔熷嵆鏄垱寤哄璞★紱閬嶅巻銆佹坊鍔犲厓绱犮佹瀽鏋勩佸鍒惰祴鍊箋佸厓绱犳暟閲忕瓑絳変竴鍒囨搷浣滐紝涓?/span>vector<int>瀵瑰簲鐨?/span>TypeInfo瀵硅薄錛岀粺緇熼兘鍙互鍋氬埌銆傛墍涓嶅悓鐨勬槸錛?/span>vector<int>鐨勯潤鎬佺被鍨嬩唬鐮侊紝鍙兘鐢ㄤ簬vector<int>鑷韓鐨勬儏鍐碉紙榪欐牱瀛愬彲鏀懼湪婧愭枃浠朵腑錛夛紝鍙堟垨鑰呮槸閫氳繃template錛岃〃鐜拌涓虹被浼間簬vector<int>鐨勬暟鎹被鍨嬶紙浠g爜蹇呴』鍦ㄥご鏂囦歡涓婏級銆傝岀敤TypeInfo*鍋氱殑浜嬫儏錛屽叏閮ㄩ兘鍦ㄨ繍琛屾椂鍙戠敓錛屾墍鏈夌殑闈欐佺被鍨嬩俊鎭紝鍏ㄩ儴琚甫鍒拌繍琛屾椂鏉ュ仛錛屾墍浠ヨ繖浜涗唬鐮佸叏閮ㄩ兘鍙互澶勫湪婧愭枃浠墮噷闈紝鐢氳嚦鍔ㄦ佸簱閲屽ご錛屽彧涓嶈繃鏄?/span>TypeInfo*鎿嶄綔鐨勫璞℃槸涓涓簩榪涘埗鍐呭瓨甯冨眬鍜?/span>vector<int>涓妯′竴鏍風殑鍐呭瓨鍧楋紝鍙互閫氳繃寮哄埗綾誨瀷杞崲錛屾妸榪愯鏃剁殑鍐呭瓨鍧楄漿鎹㈡垚闈欐佺紪璇戞椂鐨?/span>vector<int>銆傚叾瀹炶繖閲岀殑鎬濇兂錛屽氨鏄兂鏂硅娉曞皢涓板瘜澶氬僵鐨勯潤鎬佺被鍨嬩俊鎭棤鎹熺殑淇濆瓨鍒拌繍琛屾椂涓紝璁╃紪璇戞椂鑳藉仛鐨勪簨鎯咃紝榪愯鏃朵篃鍙互鍋氥傚樊鍒湪浜庯紝涓涓槸鐢ㄩ潤鎬佺被鍨嬩俊鎭潵鍋氫簨鎯咃紝榪欓噷錛屼換浣曚竴鐐圭偣綾誨瀷涓婄殑閿欒錛岄兘浼氳緙栬瘧鍣ㄥ緢涓嶉珮鍏達紱涓涓垯鏄敤鍔ㄦ佺被鍨嬩俊鎭潵鍋氫簨鎯咃紝榪欓噷錛屾樉鐒跺彧鑳借鐚跨尨浜鴻倝緙栬瘧鍣ㄣ傝繖閲岋紝鍙鍔ㄦ佺被鍨嬩俊鎭拰闈欐佺被鍨嬩俊鎭殑琛ㄨ揪鑳藉姏鏄瓑浠風殑錛屼篃鍗蟲槸鍚岀瓑閲嶈鎬х殑鎰忎箟錛岃岄潤鎬佺被鍨嬩俊鎭殑鎰忎箟鏈夊澶э紝鐩鎬俊澶у閮界煡閬撱?/span>
閭d箞錛屽浣曞緩绔嬪畬澶囩殑鍙嶅皠淇℃伅錛岃繖涓繀欏誨彧鑳界敤瀹忔潵閰嶅悎瀹屾垚錛屽閮ㄥ伐鍏風敓鎴愮殑鍙嶅皠淇℃伅浠g爜錛屽姛鑳藉緢涓嶅畬澶囷紝鍙﹀錛?/span>c#銆?/span>java絳夌殑鍙嶅皠淇℃伅鍏ㄩ儴閮芥槸緙栬瘧鍣ㄧ敓鎴愮殑錛屽彲瀹氬埗鎬у緢宸傛垜浠渶瑕佺殑鏄竴鐐歸兘涓嶉婅壊浜庨潤鎬佽涓虹殑鍔ㄦ佽涓恒傛墍浠ワ紝鍙湁鐢辮嚜宸辮嚜琛岀鐞嗗弽灝勶紝鎵嶈兘鍋氬埌鐪熸鎰忎箟涓婄殑瀹屽鍙嶅皠銆傚繀瑕佹椂錛屾垜浠繕鍙互鍦ㄨ繍琛屾椂淇敼鍙嶅皠淇℃伅錛屼粠鑰屽姩鎬佸湴澧炲垹瀵硅薄鐨勮涓烘柟寮忥紝鏀瑰彉瀵硅薄鐨勯潰璨屻傜湅鍒拌繖閲岋紝鏄惁瑙夊緱寰堝鐨勮璁℃ā寮忥紝鍦ㄨ繖閲屼細鏈夋洿娓呮櫚鏇寸畝媧佺殑琛ㄨ揪鏂瑰紡鍛紝鐢氳嚦錛岃交鑰屾槗涓懼氨鍙互鍑虹幇鏂扮殑璁捐妯″紡銆傛瘮濡傦紝浠ヤ笅瀹氫箟瀵硅薄鍙嶅皠淇℃伅鐨勪唬鐮併?/span>
鍦?/span>c++涓嬶紝鐢變簬鍏ㄥ眬鍙橀噺鐢熷懡鍛ㄦ湡鐨勯殢鎰忔э紙鏋勯犲嚱鏁拌皟鐢ㄩ『搴忎笉紜畾錛屾瀽鏋勯『搴忎篃涓嶇‘瀹氾級錛屽ぇ瀹墮兘寰堝繉璁沖叾浣跨敤錛岃櫧鐒跺叏灞鍙橀噺鍔熻兘寰堝己澶э紝寰堝鏃跺欓兘閬垮厤涓嶄簡銆備絾鏄紝鏍囧噯涓婅繕鏄瀹氫簡鍏ㄥ眬鍙橀噺鐨勯『搴忥紝鎵鏈夌殑鍏ㄥ眬鍙橀噺蹇呴』鍦?/span>main鍑芥暟涔嬪墠鏋勯犲畬鎴愶紝鍏舵瀽鏋勫嚱鏁頒篃鍙兘鍦?/span>main鍑芥暟緇撴潫鍚庢墠璋冪敤銆傚彟澶栵紝鍑芥暟鐨勯潤鎬佸彉閲忓繀欏誨湪鍏剁涓嬈¤闂箣鍓嶆瀯閫犲畬鏁淬傚熀浜庤繖涓ょ偣錛屾垜浠氨鍙互鍦?/span>main鍑芥暟涔嬪墠鏋勫緩鍏ㄩ儴鐨勫弽灝勪俊鎭紝嫻佺▼鏄繖鏍峰瓙錛屾墍鏈夌殑綾誨瀷鐨勫弽灝勫璞¢兘鏄互鍑芥暟鍐呴儴鐨勯潤鎬佹寚閽堝彉閲忓瓨鍦紝浠栦滑閮介氳繃璋冪敤GetStaticAllocator()鐨勫唴瀛樺垎閰嶅櫒鏉ュ垱寤猴紝榪欐牱瀛愶紝鎻愪緵鍙嶅皠淇℃伅鐨勫嚱鏁幫紝灝遍伩鍏嶄簡鍏跺唴閮?/span>TypeInfo瀵硅薄鐨勬瀽鏋勫彂鐢熴傛渶鍚庯紝main緇撴潫鍚庯紝鐢?/span>GetStaticAllocator()鍑芥暟鍐呯殑鍐呭瓨鍒嗛厤鍣ㄧ殑鏋愭瀯鍑芥暟緇熶竴閲婃斁鎵鏈夊弽灝勪俊鎭崰鐢ㄧ殑鍐呭瓨銆傛渶鍚庯紝闄勪笂涓涓緥瀛?/span>
涓嬫湡鐨勪富瑙掓槸闈炰鏡鍏ュ紡鎺ュ彛錛屽交搴曟浛鎹?/span>c++涓婄殑澶氱戶鎵匡紝鍔熻兘榪滆繙濂借繃C#銆?/span>java鏉傜鐨勫急楦℃帴鍙o紝鏇磋秴瓚婄嫍璇█鐨勪笉鐭ユ墍璋撶殑闈炰鏡鍏ュ紡鎺ュ彛銆傚鏋滀粎浠呮槸瀹屽鐨勫弽灝勪俊鎭紝鑰岀己涔忛潪渚靛叆寮忔帴鍙o紝鍦?/span>c++涓嬫悶闈㈠悜瀵硅薄錛屽叾瀹炶繕鏄緢鐥涜嫤鐨勩備絾鏄紝鏈変簡闈炰鏡鍏ュ紡鎺ュ彛涔嬪悗錛屼竴鍒囪眮鐒跺紑鏈椼傜敋鑷沖彲浠ヨ錛屾劅瑙?/span>c++閲岄潰鎼為偅涔堝鐜╂剰錛岄兘涓嶈繃鏄負浜嗙粰闈炰鏡鍏ュ紡鎺ュ彛閫犲娍銆傜劧鑰岄潪渚靛叆寮忔帴鍙d竴鐩存湭鏇炬寮忚癁鐢熻繃銆?/span>
鍏跺疄錛屾湁浜涜璦灝辨病鏈夎凱浠e櫒鐨勬蹇碉紝騫朵笖榪樻椿寰楀緢浼橀泤錛屽ソ姣?/span>haskell鐨?/span>list鍟娿?/span>tree鍟婏紝鍘嬫牴灝變笉闇瑕佷粈涔堣凱浠e櫒錛屽彧闇瑕佹ā寮忓尮閰嶏紝浣撶幇鍏舵暟鎹粨鏋勭殑閫掑綊鐗圭偣錛屽氨鍙互寰堜紭闆呭湴琛ㄨ揪綆楁硶銆傚氨鏄?/span>java銆?/span>c#銆?/span>C++榪欏嚑涓牬闈㈠悜瀵硅薄璇█錛屾墠闇瑕佸ぇ鐢ㄧ壒鐢ㄨ凱浠e櫒錛屾病鏈夎凱浠e櫒灝辨椿涓嶄笅鍘諱簡銆傝凱浠e櫒鐨勫嚭鐜板氨鏄負浜嗗譏琛ュ叾璇█涓уけ娓呮櫚琛ㄨ揪閫掑綊鏁版嵁緇撴瀯鐨勮兘鍔涖傜湅鍒?/span>haskell鐨?/span>list鍒?/span>c++鐨?/span>stl涓嬬殑瀵瑰簲鏍峰瓙錛屽緢澶氫漢閮借〃紺哄緢闅捐繃錛屽洜涓?/span>stl閲岄潰錛?/span>list鏍規湰灝辨病鏈?/span>tail鍑芥暟錛屾洿閫炶鏀寔list鐨?/span>tail榪樻槸涓涓?/span>list榪欐牱緇濆鐨?/span>idea銆備竴鍒囧繀欏婚氳繃榪唬鍣ㄨ繖涓竾閲戞補鏉ョ硦寮勫叾灝村艾鐨勫洶澧冦?/span>
闅忎究鏉ョ湅鐪嬪嚑琛?/span>stl綆楁硶鍑芥暟鐨勪唬鐮?/span>
鐪嬪埌娌℃湁錛屼綘淇′笉淇★紝闅忎究緇熻涓涓嬶紝涓鎵撶殑algorithm鍑芥暟錛岃搗鐮佸氨鏈?/span>12涓嚱鏁扮殑璋冪敤涔嬮亾錛屽繀欏諱紶閫?/span>container.begin()錛?/span>container.end()銆?/span>begin鍜?/span>end榪欏鍏勫紵錛屾繪槸鎴愬弻鎴愬鐨勫嚭鐜幫紝璇存槑浜嗕竴浠朵簨鎯咃紝灝辨槸浠庝竴寮濮嬶紝瀹冧滑蹇呴』琚墦鍖呭湪涓璧鳳紝鑰屼笉搴旇紜敓鐢熷湴灝嗗畠浠媶寮銆傜煡閬撹繖涓鎷嗗紑錛屽甫鏉ュ灝戦棶棰樺悧錛熶唬鐮佷笂鐨勭瘡璧樿繕綆楁槸灝忎簨錛屾瘮濡傦紝綆媧佹竻鏅版祦鐣呯殑find(nums, 2)錛屽嵈瑕佺敓紜殑鍐欐垚find(nums.begin(), nums.end(), 2)銆傚綋鐒訛紝榪欑api璁捐錛屼篃騫墮潪涓鏃犳槸澶勶紝璧風爜錛屽湪琛ㄨ揪瀹瑰櫒閲岄潰鐨勯儴鍒嗗尯闂存椂錛屽緢鏂逛究錛屽ソ姣斾笅闈㈢殑浠g爜
int nums[10] = {…};
find(nums+1, end(nums)-1, 2);
鐪嬭搗鏉ワ紝濂藉儚鐨勭‘鎸烘柟渚跨殑錛屽皢begin銆?/span>end鏀懼湪涓璧鳳紝瑕佽〃杈捐繖鏍風殑姒傚康錛屼技涔庡氨鏈変簺楹葷儲錛屼絾鍏跺疄錛岃繖鏄亣璞★紝褰撹搴﹀彉鎹㈡椂錛屾垜浠彲浠ヤ細鏈夋洿鏂逛究鐨勬柟寮忔潵琛ㄨ揪榪欐牱鐨勯渶姹傘傛渶璧風爜錛屽鍣ㄧ殑閮ㄥ垎鍖洪棿涔熷簲璇ユ槸鐢卞鍣ㄦ湰韜潵琛ㄨ揪錛岃屼笉搴旇漿瀚佺粰榪唬鍣ㄦ潵搴斾粯錛屾暟緇勭殑閮ㄥ垎涔熸槸鏁扮粍錛屾爲鐨勫垎鏀篃鏄爲錛岃繖鏍風殑姒傚康錛屽氨搴旇鐢卞鍣ㄦ湰韜潵瀹氫箟銆傚儚鏄搱甯岃〃灝變笉鏀寔閮ㄥ垎鍖洪棿鐨勬蹇點?/span>
涓轟綍algorithm鐨勭畻娉曪紝鍏ㄩ儴錛堜笉鏄熀鏈級閮借姹備竴瀵硅凱浠e櫒銆傞偅鏄洜涓鴻繖浜涚畻娉曠殑杈撳叆瀵硅薄錛屾湰鏉ュ氨鏄竴涓暟鎹泦鍚堛傝屼竴涓凱浠e櫒鏃犳硶瀹屾暣鍦拌〃杈句竴涓鍣紝璧風爜蹇呴』涓瀵硅凱浠e櫒鎵嶈兘瀹屾暣鍦拌〃杈句竴涓暟鎹泦銆備絾鏄紝鐢ㄤ竴瀵硅凱浠e櫒鏉ヤ綔涓哄叆鍙傦紝鍜岀敤涓涓尯闂翠綔涓哄叆鍙傦紝瀹冩墍浣撶幇鎶借薄鐨勪晶閲嶇偣瀹屽叏涓嶅悓錛岃岀敱浜庢縐嶄笉鍚岋紝鏈鍚庣殑婕斿彉緇撴灉錛屼篃鏄ぉ娓婁箣鍒紝鍗蟲槸涓瀵硅凱浠e櫒璁捐鎬濊礬鏄笂錛岃嚜鐒訛紝鑰屽尯闂寸殑璁捐鏂規錛屾樉鐒舵槸澶┿?/span>
鍐嶆鍥為【涓婃枃鐨勭粨灝撅紝find錛?/span>find_if錛?/span>remove, remove_copy, remove_copy_if, remove_if,……錛?/span>鏈夋病鏈夋劅鍙楋紝涓鑲℃祿嫻撶殑榪囩▼寮忛鏍鹼紝鍗佸垎鐨勭閲嶏紝鏄庢樉鐨勯潪姝d氦錛屾祿鐑堢殑c璇█椋庢牸銆傚浜庤繖鏍風殑api錛岃鏈駭瀵瑰鍛樹細鐨勯偅甯佷笉姝伙紝褰誨簳鐨勭粷鏈涗簡銆備粬浠紙瀹冧滑錛夌殑瀹$編瑙傦紝鍋滅暀鍦ㄥ緢浣庡緢浣庣殑灞傛涓娿?/span>
灝?/span>begin錛?/span>end鎷嗗垎寮鏉ョ殑鏈澶ч棶棰橈紝鍏跺疄涔熷氨鍙槸錛屽墠涓涓嚱鏁扮殑澶勭悊緇撴灉錛屼笉鑳藉鉤婊戠殑浼犻掑埌涓嬩竴涓嚱鏁伴噷闈㈠幓銆傛瘮濡傝錛岀幇鍦ㄥ嚱鏁?/span>make_nums榪斿洖vector<int>錛岃瘯姣旇緝涓涓嬶紝楂樹笅绔嬪垽銆?/span>
璇翠簡榪欎箞澶氾紝鎴戜滑寮虹儓瑕佹眰鐨勪粎浠呮槸鍑芥暟椋庢牸鐨?/span>api錛屾浜ゅ紡鐨勫嚱鏁拌璁★紝鍓嶄竴涓嚱鏁扮殑澶勭悊緇撴灉鍙互騫蟲粦鍦頒紶閫掔粰涓嬩竴涓嚱鏁般傛葷粨algorithm鐨勪竴鍧ㄥ嚱鏁幫紝鏈川涓婂彧闇filter錛?/span>fold錛?/span>map錛?/span>insert(copy)榪欏眻鎸囧彲鏁扮殑鍑犱釜鍑芥暟灝卞彲浠ヨ嚜鐢卞湴緇勫悎鍑烘潵錛屽茍涓旇繕鑳界粍鍚堝嚭鏉?/span>algorithm涓婃病鏈夌殑鏁堟灉銆傞鍏堬紝榪欏嚑涓嚱鏁扮殑榪斿洖緇撴灉閮芥槸鏁版嵁鍖虹殑鏁版嵁瀵硅薄(閲岄潰鏈?/span>begin鍜?/span>end鐨勬垚鍛樺嚱鏁幫紝鐢ㄤ互榪斿洖榪唬鍣?/span>)銆傚叾嬈★紝灝辨槸鍦ㄨ凱浠e櫒涓婇潰鍋氭枃绔狅紝浠ユ敮鎸?/span>filter銆?/span>map絳夋搷浣滐紝涔熷氨鏄湪*銆?/span>++銆?/span>!=榪欏嚑涓繍綆楃涓婂仛鑺辨牱錛岃杈懼埌filter銆?/span>map鐨勬晥鏋滐紝寰堝鏄撶殑銆傝嚦浜庡儚鏄姹傞殢鏈鴻闂凱浠e櫒姒傚康鐨勫嚱鏁幫紝澶父鐢ㄧ殑灝卞仛鍒?/span>array_view閲岄潰濂戒簡錛屾垨鑰呭氨鏄庣‘瑙勫畾鍏ュ弬灝辨槸array_view銆?/span>
鐒跺悗stl閲岄潰榪樿噯閫犱簡涓縐嶅ソ鍍忓彨鍋?/span>insert_iterator榪唬鍣ㄧ被鍨嬬殑閫傞厤鍣紝鐢ㄤ互閫氳繃榪唬鍣ㄧ殑璇硶寰瀹瑰櫒閲屽ご鎻掑叆鏁版嵁錛屽ソ鍍忓緢鐜勫錛屽疄鍒欏氨鏄己琛屾嫈楂樿凱浠e櫒鐨勭敤閫旓紝瀹屽叏灝辮繚鑳屼簡榪唬鍣ㄥ嚭鐜扮殑鍒濊》銆傝繖縐嶆壄鏇茬殑鎯蟲硶錛屽畬鍏ㄥ氨鏄笂闈㈤偅涓鍧ㄧ梾鎬?/span>api鐨勪駭鐗┿傛墍浠ワ紝鍘熸湰鐨?/span>api璁捐錛岀畻娉曞嚱鏁板繀欏諱互瀹瑰櫒錛堟暟鎹尯闂達級涓哄叆鍙傦紝鍐呴儴璋冪敤鍏?/span>begin鍜?/span>end鎴愬憳鍑芥暟鑾峰緱榪唬鍣ㄦ潵閬嶅巻瀹瑰櫒鐨勫嚱鏁幫紝浣曞叾娓呮櫚鐨勮璁℃濊礬銆備絾鏄紝stl鐨勮璁℃濊礬錛屽鑷磋凱浠e櫒娉涙互錛岀敋鑷寵繛瀹㈡埛灞傞潰鐨勪唬鐮佷篃澶ф妸澶ф妸鐨勮凱浠e櫒錛屼簬鏄凱浠e櫒鐨勯棶棰樺氨鎺ヤ簩榪炰笁鐨勪駭鐢燂紝浠涔堝け鏁堝晩錛屼粈涔?/span>first鍜?/span>last鍖瑰閿欒銆傝繕鏈夛紝瀵艱嚧瀹瑰櫒閲岄潰鐨勫叧浜庤凱浠e櫒鐨勬垚鍛樺嚱鏁板浜嗕竴鍊嶏紝鍝堝笇琛ㄩ噷闈篃娌℃湁綾諱技浜?/span>C#閲?/span>Dictionary鐨?/span>Keys鍜?/span>Values灞炴у嚱鏁幫紝榪欎簺鐢ㄨ搗鏉ュ緢鏂逛究鐨勶紝涓嶆槸鍚楋紵
stl鐨勮繖縐?/span>api璁捐鎬濊礬瀹屽叏涓嶆槸浠ユ柟渚夸嬌鐢ㄤ負涓伙紝鑰屾槸浠ユ弧瓚寵嚜宸辯殑鐙壒鍙e懗涓虹洰鐨勩傜湅鐪?/span>find鍑芥暟錛屽畠榪斿洖涓涓凱浠e櫒錛屾墍浠ワ紝鎴戜滑浣跨敤鏃訛紝蹇呴』閫氳繃鐢?/span>end鏉ュ垽鏂鎵劇殑涓滆タ鏄惁鍦ㄥ尯闂撮噷闈紝
auto found = find(nums.begin(), nums.end(), 2);
if (found != nums.end()){…}
渚濇湰搴х湅錛岀洿鎺ュ氨榪斿洖鎸囬拡濂戒簡錛屾寚閽堜負nullptr錛屽氨琛ㄧず鍏冪礌鎵句笉鍒幫紝浠g爜鍙樻垚榪欐牱
if (auto found = find(nums, 2)){…}
浠g爜鍚堝茍鎴愪竴琛岋紝涓嶇敤鍐嶅拰end姣旇緝浜嗐傛洿閲嶈鐨勬槸錛岃繑鍥炵粨鏋滃氨鏄寚閽堬紝綾誨瀷闈炲父鏄庣‘錛屽彲浠ュ鉤婊戠殑浼犻掑埌鍒殑鍑芥暟閲岋紱鑰屼笉鏄凱浠e櫒綾誨瀷錛岃皝鐭ラ亾榪唬鍣ㄧ被鍨嬫槸浠涔堢被鍨嬨?/span>template榪欑涓滆タ鐨勭被鍨嬶紝鑳芥槑紜笅鏉ユ椂錛屽氨灝藉揩鏄庣‘涓嬫潵銆傝嚦浜庤錛屾湁浜涘尯闂寸殑鍏冪礌涓嶆敮鎸佽繑鍥炲湴鍧錛屽ソ姣旓紝vector<bool>錛屽緢綆鍗曪紝閭e氨涓嶆敮鎸佸ソ浜嗐傛湰搴х紪鍐?/span>c++浠g爜鐨勫師鍒欎箣涓錛屼笉姹傚ぇ鑰屽叏錛岄渶姹備笓涓錛岀粷涓嶄細鍥犱負涓埆鍚屽錛屽氨鐗虹壊澶у鏁版儏鍐典笅娓呮櫚鏂逛究楂樻晥鐨?/span>api椋庢牸銆傚浜庤繖浜涘紓鏁幫紝蹇呰鏃訛紝鐢ㄥ鎶娣閥瑙e喅銆備綘鐭ラ亾錛屽洜涓哄緇ф壙錛岃櫄緇ф壙錛屾妸鎴愬憳鍑芥暟鎸囬拡榪欎釜綆媧佺殑姒傚康鎼炲緱闈炲父澶嶆潅錛屼笉鑳芥寜姝e父浜烘柟寮忔潵浣跨敤浜嗭紝涓ラ噸褰卞搷鎴愬憳鍑芥暟鐨勭敤鑼冨洿錛屼竴鐩磋鏈駭鑰胯夸簬鎬銆傚叾瀹烇紝95%浠ヤ笂鐨勬儏鍐典笅錛屾垜浠氨浠呬粎闇瑕佹櫘閫氭垚鍛樺嚱鏁版寚閽堣屽凡錛屽彟澶栫殑5%錛屼篃閮藉彲浠ョ敤鏅氭垚鍛樺嚱鏁版潵灝佽銆傛墍浠ワ紝涓轟簡寮ヨˉ榪欎釜閬楁喚錛屾湰搴у仛浜嗕竴涓簿綆鐗堢殑delegate錛屽彧鎺ュ彈鍏ㄥ眬鍑芥暟鍜屾櫘閫氭垚鍛樺嚱鏁幫紝褰撳瓧孌?/span>object涓虹┖錛屽氨琛ㄧず瀛楁鍑芥暟鎸囬拡鏄叏灞鍑芥暟錛屼笉涓虹┖錛屽氨琛ㄧず鍑芥暟鎸囬拡鏄垚鍛樺嚱鏁般傝嚦浜庡叾浠栦竴鍒囧濂囨殑鍑芥暟錛屾湰搴х殑榪欎釜delegate灝?/span>say no錛屾槑紜嫆緇濄?/span>
stl鐨勮繖縐嶇嫭鐗瑰埌澶勯兘鏄紝boost鏇存槸灝嗗叾鍙戞壃鍏夊ぇ錛屽弽姝h璁″嚭鏉ョ殑api錛屽氨鏄笉鑰冭檻璁╀綘鐢ㄧ殑鑸掔埥錛屼簩榪涘埗鐨勫竷灞錛屾洿鍔犱竴濉岀硦娑傘傛瘮濡傦紝any鐨勪嬌鐢紝鏄繖鏍峰瓙鐢ㄧ殑錛?/span>cout << any_cast<int>(anyValue)錛岃繖閲岃繕濂斤紝鍋囧瑕佸垎鍒拡瀵?/span>any鐨勫疄闄呯被鍨嬫潵鍐欎唬鐮侊紝蹇呴』榪欐牱瀛愶細榪欑瀵圭被鍨嬪畨鍏ㄦ棤鐞嗗彇闂圭殑寮鴻皟錛岃浜虹伀鍐掍笁涓堛傝鏈駭璇達紝鐩存帴鍦?/span>any閲岄潰娣誨姞Cast妯℃澘鎴愬憳鍑芥暟錛岀粨鏋滃氨榪斿洖鎸囬拡濂戒簡錛屾寚閽堜負絀猴紝灝辮〃紺虹被鍨嬩笉鍖歸厤錛屼唬鐮佸氨鍙樻垚榪欐牱
鏄惁灝辨病閭d箞蹇冪儲鍛€傚彟澶栵紝閴翠簬stl瀵逛簬鍙嶅皠鐨勬嫆緇濓紝閲囩敤virtual+template鐨勭被鍨嬫嫮鎿﹀ぇ娉曟潵寮ヨˉ錛屽叾瀹炲茍涓嶆庝箞瀹岀編銆傛湰搴х敤鍙嶅皠閲嶆柊瀹炵幇鐨?/span>any錛屾瘮stl鐨?/span>any濂藉浜嗭紝涓嶇鏄ц兘銆佺紪璇戦熷害銆佷嬌鐢ㄦ柟渚夸笂錛岄兘鏄濂藉お澶氥傝繕鏈夛紝stl鐨?/span>any錛岃涓烘瘡涓敤鍒扮殑綾誨瀷閮借鐢熸垚涓涓疄瀹炲湪鍦ㄧ殑澶氭佸叿浣撶被錛屾瘡涓被閮借鏈変竴涓笓闂ㄧ殑铏氬嚱鏁拌〃瀵瑰簲錛岃繖浜涘彲閮借鍐欏埌浜岃繘鍒舵枃浠墮噷闈紝浠g爜灝辨槸榪欐牱鑶ㄨ儉璧鋒潵鐨勩傛諱箣錛?/span>stl鍥為伩鍙嶅皠鍚庯紝鍙嶅皠灝變互鍙︿竴縐嶅艦寮忓洖褰掞紝濂芥瘮virtual+template錛屽ソ姣?/span>%d銆?/span>%s錛屽ソ姣?/span>locale鐨勯偅浜?/span>facet瀹炵幇錛?/span> 榪欎簺鍔ㄦ佹満鍒跺悇鑷負鏀匡紝鍚勭娣蜂貢銆傝繕涓嶅騫茶剢灝變粠婧愬ご涓婄郴緇熷寲鍏悊鍖栧湴緇欎簣緇堟瀬瑙e喅銆?/span>
鎵浠ワ紝鎬諱綋涓婃劅鍙?/span>stl璁捐鎬濊礬涓婂瓨鍦ㄧ殑璺嚎錛屽氨鏄お鍦ㄦ剰浜?/span>c++璇█鏈韓涓婄殑鐗圭偣錛屽彈璇█鑷韓鐨勭己闄峰鏉傚獎鍝嶅お澶氾紝蹇界暐浜嗙湡姝g殑闇姹傦紝澶鐨勮噯閫犻渶姹傦紝寮鴻璁╅渶姹傛潵榪佸氨璇█錛岃屼笉鏄璇█鏉ラ厤鍚堝熀紜搴撶殑瀹為檯鏅亶闇姹傦紝闇姹傛墠鏄牴鏈紝涓轟簡鍙互鏈鏂逛究錛屾渶娓呮櫚錛屾渶鎬ц兘鐨勫熀紜搴擄紝瀹屽叏鍙互澶ц妯″湴浣跨敤瀹忋佹寲鎺樿璦閲岄潰鏈榛戞殫鐨勮竟瑙掓枡錛岀敋鑷充負浜嗗簱鐨勬竻鏅版э紝鍙互鎷掔粷閭d簺鐢ㄤ簡澶嶆潅鐗規х殑鏁版嵁緇撴瀯錛屾瘮濡傚緇ф壙錛岃櫄緇ф壙絳夋棤鑱婄帺鎰忋?/span>
姒傛嫭璧鋒潵錛岃礬綰塊棶棰樺鑷存渶緇堢殑姝f灉錛屼篃鍗蟲槸stl鐨勫叿浣撳急楦¤〃鐜板氨鏄紝鏈鏍規湰鏄簩榪涘埗鎺ュ彛浣跨敤涓婄殑閲嶉噸闃葷錛岃皝鏁㈠湪鍔ㄦ佸簱api浣跨敤stl鐨勬暟鎹被鍨嬨傚叾嬈℃槸浠ヤ笅5灝忕偣錛?/span>
1銆佸唴瀛樺垎閰嶅櫒涓嶅簲璇ユ槸瀹瑰櫒鐨勬ā鏉垮弬鏁幫紝瀵?/span>allocator鐨勫鐞嗗お榪囪崏鐜囷紝褰撳垵榪欓噷蹇呴』鍋氭繁鍏ョ殑鎸栨帢錛?/span>c++瀹屽叏鍙互瀹炵幇涓瀹氱▼搴︿笂鐨勫瀮鍦懼洖鏀跺姛鑳斤紝姣斿arean allocator錛屼笉蹇呬竴涓鍥炴敹鍦?/span>arena allocator涓婂垎閰嶇殑瀵硅薄錛屽彧闇涓嬈℃ч噴鏀?/span>arena allocator鐨勫唴瀛橈紝杈懼埌澶氭鍒嗛厤錛屼竴嬈¢噴鏀劇殑楂樻ц兘鏁堟灉錛岃繕閬垮厤鍐呭瓨娉勯湶錛屼篃涓嶇敤鐩存帴闈㈠寰幆寮曠敤鐨勬儙璁捐闂銆傜幇鏈夌殑鍐呭瓨綆$悊絳栫暐錛屾妸鍘嬪姏閮芥斁鍦ㄦ櫤鑳芥寚閽堜笂錛?/span>
2銆佹彁渚涚殑閫氱敤瀹瑰櫒涓嶅瀹屽錛涘師鏈?/span>stl鐨勬暟鎹粨鏋勫氨澶у彲婊¤凍鎵鏈夋甯稿拰闈炴甯哥殑浣跨敤鍦哄悎錛屾瘮濡傛弧瓚充鏡鍏ュ紡鐨勯摼琛ㄩ渶姹傦紝姣斿涓嶇鐞嗗厓绱犵敓鍛藉懆鏈熺殑瀹瑰櫒絳夛紱
3銆佽繃澶氱殑鏆撮湶榪唬鍣紝榪唬鍣ㄧ殑搴旂敤鑼冨洿榪囧箍錛?/span>stl鐨勭畻娉曞嚱鏁扮敤璧鋒潵寰堜笉鏂逛究錛?/span>
4銆佸洖閬垮姩鎬佺被鍨嬪弽灝勪俊鎭紝瀵規暟鎹殑杈撳叆杈撳嚭鏀寔闈炲父鍗曡杽錛屽寘鎷瓧絎︿覆澶勭悊銆佹枃浠惰鍐欍佺綉緇滄暟鎹敹鍙戠瓑錛屾爣鍑嗗簱涓婄殑鐜版湁閭g偣灝忓姛鑳斤紝浠呬粎鏄亰鑳滀簬鏃犺屽凡錛岄毦鍫ぇ浠伙紱
5銆侀潪瀹瑰櫒緋葷殑瀹炵敤綾誨お灝戯紱
涓鍙ヨ瘽錛岀洰鍓?/span>stl鐨勪嬌鐢紝榪樻槸榪滆繙涓嶅鐖姐傚師鏈敤涓?/span>stl鐨勪唬鐮侊紝搴旇鍙互鏇寸煭銆佹洿蹇佹洿灝忋傚彧鍙儨錛?/span>stl鍦ㄩ氳繃榪唬鍣ㄥ疄鐜扮畻娉曚笌瀹瑰櫒鐨勫垎紱諱箣鍚庯紝灝卞仠姝ヤ笉鍓嶏紝鍏惰璁′綋緋誨湪鍒殑鍦版柟錛岄矞鏈夊緩鏍戝垱鏂般傛垬鐣ラ珮搴﹁繃浜庡眬淇冿紝寰堝澶嶆潅闅炬悶鐨勯棶棰橈紝鍏跺疄閮借暣鍚潃緇濆ぇ鐨勬満閬囷紝鑰?/span>stl閮戒竴涓鍥為伩錛岀湡鏄洖閬垮緱濂斤紒