锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
#include <stdio.h>
#include<iconv.h>
using namespace std;
int utf8togb2312(const char *sourcebuf,size_t sourcelen,char *destbuf,size_t destlen) {
iconv_t cd;
if( (cd = iconv_open("gb2312","utf-8")) ==0 )
return -1;
memset(destbuf,0,destlen);
const char **source = &sourcebuf;
char **dest = &destbuf;
if(-1 == iconv(cd,source,&sourcelen,dest,&destlen))
return -1;
iconv_close(cd);
return 0;
}
int gb2312toutf8(const char *sourcebuf,size_t sourcelen,char *destbuf,size_t destlen) {
iconv_t cd; if( (cd = iconv_open("utf-8","gb2312")) ==0 )
return -1; memset(destbuf,0,destlen);
const char **source = &sourcebuf;
char **dest = &destbuf;
if(-1 == iconv(cd,source,&sourcelen,dest,&destlen))
return -1;
]]>
]]>
鎽樿嚜http://blog.csdn.net/hackbuteer1/article/details/7722667
鍦?鍚勭璁$畻鏈轟綋緋葷粨鏋勪腑錛屽浜庡瓧鑺傘佸瓧絳夌殑瀛樺偍鏈哄埗鏈夋墍涓嶅悓錛屽洜鑰屽紩鍙戜簡璁$畻鏈?閫氫俊棰?鍩熶腑涓涓緢閲嶈鐨勯棶棰橈紝鍗抽氫俊鍙屾柟浜ゆ祦鐨勪俊鎭崟鍏冿紙姣旂壒銆佸瓧鑺傘佸瓧銆佸弻瀛楃瓑絳夛級搴旇浠ヤ粈涔堟牱鐨勯『搴忚繘琛屼紶閫併傚鏋滀笉杈炬垚涓鑷寸殑瑙勫垯錛岄氫俊鍙屾柟灝嗘棤娉曡繘琛屾 紜殑緙?璇戠爜浠庤屽鑷撮氫俊澶辮觸銆傜洰鍓嶅湪鍚勭浣撶郴鐨勮綆楁満涓氬父閲囩敤鐨勫瓧鑺傚瓨鍌ㄦ満鍒朵富瑕佹湁涓ょ錛欱ig-Endian鍜孡ittle-Endian錛屼笅闈㈠厛浠庡瓧鑺傚簭璇磋搗銆?br />涓銆佷粈涔堟槸瀛楄妭搴?br />瀛楄妭搴忥紝欏懼悕鎬濅箟瀛楄妭鐨勯『搴忥紝鍐嶅璇翠袱鍙ュ氨鏄ぇ浜庝竴涓瓧鑺傜被鍨嬬殑鏁版嵁鍦ㄥ唴瀛樹腑鐨勫瓨鏀鵑『搴?涓涓瓧鑺傜殑鏁版嵁褰撶劧灝辨棤闇璋堥『搴忕殑闂浜?銆?/span>鍏跺疄澶ч儴鍒嗕漢鍦ㄥ疄闄呯殑寮 鍙戜腑閮藉緢灝戜細(xì)鐩存帴鍜屽瓧鑺傚簭鎵撲氦閬撱傚敮鏈夊湪璺ㄥ鉤鍙頒互鍙?qiáng)缃懢l滅▼搴忎腑瀛楄妭搴忔墠鏄竴涓簲璇ヨ鑰冭檻鐨勯棶棰樸?br />
鍦ㄦ墍鏈夌殑浠嬬粛瀛楄妭搴忕殑鏂囩珷涓兘浼?xì)鎻愬埌瀛?鑺傚簭鍒嗕負(fù)涓ょ被錛欱ig-Endian鍜孡ittle-Endian錛屽紩鐢ㄦ爣鍑嗙殑Big-Endian鍜孡ittle-Endian鐨勫畾涔夊涓嬶細(xì)
a) Little-Endian灝辨槸浣庝綅瀛楄妭鎺掓斁鍦ㄥ唴瀛樼殑浣庡湴鍧绔紝楂樹綅瀛楄妭鎺掓斁鍦ㄥ唴瀛樼殑楂樺湴鍧绔?br />b) Big-Endian灝辨槸楂樹綅瀛楄妭鎺掓斁鍦ㄥ唴瀛樼殑浣庡湴鍧绔紝浣庝綅瀛楄妭鎺掓斁鍦ㄥ唴瀛樼殑楂樺湴鍧绔?br />c) 緗戠粶瀛楄妭搴忥細(xì)TCP/IP鍚勫眰鍗忚灝嗗瓧鑺傚簭瀹氫箟涓築ig-Endian錛屽洜姝CP/IP鍗忚涓嬌鐢ㄧ殑瀛楄妭搴忛氬父縐頒箣涓虹綉緇滃瓧鑺傚簭銆?br />
1.1 浠涔堟槸楂?浣庡湴鍧绔?br />棣栧厛鎴戜滑瑕佺煡閬揅紼嬪簭鏄犲儚涓唴瀛樼殑絀洪棿甯冨眬鎯呭喌錛氬湪銆奀涓?瀹剁紪紼嬨嬩腑鎴栬呫奤nix鐜楂樼駭緙栫▼銆嬩腑鏈夊叧浜庡唴瀛樼┖闂村竷灞鎯呭喌鐨勮鏄庯紝澶ц嚧濡備笅鍥撅細(xì)
----------------------- 鏈楂樺唴瀛樺湴鍧 0xffffffff
鏍堝簳
鏍?br />鏍堥《
-----------------------
NULL (絀烘礊)
-----------------------
鍫?br />-----------------------
鏈垵濮?鍖栫殑鏁版嵁
----------------------- 緇熺О鏁版嵁孌?br />鍒濆鍖栫殑鏁版嵁
-----------------------
姝?鏂囨(浠g爜孌?
----------------------- 鏈浣庡唴瀛樺湴鍧 0x00000000
鐢卞浘鍙互鐪嬪嚭錛屽啀鍐呭瓨鍒嗗竷涓紝鏍堟槸鍚戜笅澧為暱鐨勶紝鑰屽爢鏄悜涓婂闀跨殑銆?/span>
浠ヤ笂鍥句負(fù)渚嬪鏋滄垜浠湪鏍?涓婂垎閰嶄竴涓猽nsigned char buf[4]錛岄偅涔堣繖涓暟緇勫彉閲忓湪鏍堜笂鏄浣曞竷灞鐨勫憿錛熺湅涓嬪浘錛?br />鏍堝簳 錛堥珮鍦板潃錛?/span>
----------
buf[3]
buf[2]
buf[1]
buf[0]
----------
鏍堥《 錛堜綆鍦板潃錛?/strong>
鍏跺疄錛屾垜浠彲浠ヨ嚜宸卞湪緙栬瘧鍣ㄩ噷闈㈠垱寤轟竴涓暟緇勶紝鐒跺悗鍒嗗埆杈撳嚭鏁扮粍縐嶆瘡涓厓绱犵殑鍦板潃錛屾潵楠岃瘉涓涓嬨?br />1.2 浠涔堟槸楂?浣庡瓧鑺?br />鐜板湪鎴戜滑寮勬竻浜嗛珮/浣庡湴鍧錛屾帴鐫鑰冭檻楂?浣庡瓧鑺?/span>銆傛湁浜涙枃绔犱腑縐頒綆浣嶅瓧鑺備負(fù)鏈浣庢湁鏁堜綅錛岄珮浣嶅瓧鑺備負(fù)鏈楂樻湁鏁堜綅銆傚鏋滄垜浠湁涓涓?2浣嶆棤絎﹀彿鏁村瀷0x12345678錛岄偅涔堥珮浣嶆槸浠涔堬紝浣庝綅鍙堟槸浠涔堝憿錛?鍏跺疄寰堢畝鍗曘?span style="color: #ff0000;">鍦ㄥ崄榪涘埗涓垜浠兘璇撮潬宸﹁竟鐨勬槸楂樹綅錛岄潬鍙寵竟鐨勬槸浣庝綅錛屽湪鍏朵粬榪涘埗涔熸槸濡傛銆傚氨鎷?0x12345678鏉ヨ錛屼粠楂樹綅鍒頒綆浣嶇殑瀛楄妭渚濇鏄?x12銆?x34銆?x56鍜?x78銆?/strong>
楂?浣庡湴鍧绔拰楂?浣庡瓧鑺傞兘寮勬竻浜嗐傛垜浠啀鏉ュ洖欏?涓涓婤ig-Endian鍜孡ittle-Endian鐨勫畾涔夛紝騫剁敤鍥劇ず璇存槑涓ょ瀛楄妭搴忥細(xì)
浠nsigned int value = 0x12345678涓轟緥錛屽垎鍒湅鐪嬪湪涓ょ瀛楄妭搴忎笅鍏跺瓨鍌ㄦ儏鍐碉紝鎴戜滑鍙互鐢╱nsigned char buf[4]鏉ヨ〃紺簐alue錛?br />Big-Endian: 浣庡湴鍧瀛樻斁楂樹綅錛屽涓嬪浘錛?br />鏍堝簳 錛堥珮鍦板潃錛?br />---------------
buf[3] (0x78) -- 浣庝綅
buf[2] (0x56)
buf[1] (0x34)
buf[0] (0x12) -- 楂樹綅
---------------
鏍堥《 錛堜綆鍦板潃錛?br />
Little-Endian: 浣庡湴鍧瀛樻斁浣庝綅錛屽涓嬪浘錛?br />鏍堝簳 錛堥珮鍦板潃錛?br />---------------
buf[3] (0x12) -- 楂樹綅
buf[2] (0x34)
buf[1] (0x56)
buf[0] (0x78) -- 浣庝綅
--------------
鏍?欏?錛堜綆鍦板潃錛?br />
浜屻佸悇縐岴ndian
2.1 Big-Endian
璁$畻鏈轟綋緋葷粨鏋勪腑涓縐嶆弿榪板瀛楄妭瀛樺偍欏哄簭鐨勬湳璇紝鍦ㄨ繖縐嶆満鍒朵腑鏈閲嶈瀛楄妭錛圡SB錛夊瓨鏀懼湪鏈浣庣鐨勫湴鍧 涓娿傞噰鐢ㄨ繖縐嶆満鍒剁殑澶勭悊鍣ㄦ湁IBM3700緋誨垪銆丳DP-10銆丮ortolora寰鐞嗗櫒緋誨垪鍜岀粷澶у鏁扮殑RISC澶勭悊鍣ㄣ?br />+----------+
| 0x34 |<-- 0x00000021
+----------+
| 0x12 |<-- 0x00000020
+----------+
鍥?1錛氬弻瀛楄妭鏁?x1234浠ig-Endian鐨勬柟寮忓瓨鍦ㄨ搗濮嬪湴鍧0x00000020涓?br />
鍦˙ig-Endian涓紝瀵逛簬bit搴忓垪 涓殑搴忓彿緙栨帓鏂瑰紡濡備笅錛堜互鍙屽瓧鑺傛暟0x8B8A涓轟緥錛夛細(xì)
bit 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+-----------------------------------------+
val | 1 0 0 0 1 0 1 1 | 1 0 0 0 1 0 1 0 |
+----------------------------------------+
鍥?2錛欱ig-Endian鐨刡it搴忓垪緙栫爜鏂瑰紡
2.2 Little-Endian
璁$畻鏈轟綋緋葷粨鏋勪腑 涓縐嶆弿榪板瀛楄妭瀛樺偍欏哄簭鐨勬湳璇紝鍦ㄨ繖縐嶆満鍒朵腑鏈涓嶉噸瑕佸瓧鑺傦紙LSB錛夊瓨鏀懼湪鏈浣庣鐨勫湴鍧涓娿傞噰鐢ㄨ繖縐嶆満鍒剁殑澶勭悊鍣ㄦ湁PDP-11銆乂AX銆?strong>Intel緋誨垪寰鐞嗗櫒鍜屼竴浜涚綉緇滈氫俊璁懼銆傝鏈闄や簡鎻忚堪澶氬瓧鑺傚瓨鍌ㄩ『搴忓榪樺父甯哥敤鏉ユ弿榪頒竴涓瓧鑺備腑鍚勪釜姣旂壒鐨勬帓鏀炬搴忋?br />
+----------+
| 0x12 |<-- 0x00000021
+----------+
| 0x34 |<-- 0x00000020
+----------+
鍥?錛氬弻瀛楄妭鏁?x1234浠ittle-Endian鐨勬柟寮忓瓨鍦ㄨ搗濮嬪湴鍧0x00000020涓?br />銆鍦?Little-Endian涓紝瀵逛簬bit搴忓垪涓殑搴忓彿緙栨帓鍜孊ig-Endian鍒氬ソ鐩稿弽錛屽叾鏂瑰紡濡備笅錛堜互鍙屽瓧鑺傛暟0x8B8A涓轟緥錛夛細(xì)
bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
+-----------------------------------------+
val | 1 0 0 0 1 0 1 1 | 1 0 0 0 1 0 1 0 |
+-----------------------------------------+
鍥?4錛歀ittle-Endian鐨刡it搴忓垪緙栫爜鏂瑰紡
娉ㄦ剰錛氶氬父鎴戜滑璇寸殑涓繪満搴忥紙Host Order錛夊氨鏄伒寰狶ittle-Endian瑙勫垯銆傛墍浠ュ綋涓ゅ彴涓繪満涔嬮棿瑕侀氳繃TCP/IP鍗忚榪涜閫氫俊鐨勬椂鍊欏氨闇瑕佽皟鐢ㄧ浉搴旂殑鍑芥暟榪涜涓繪満搴?錛圠ittle-Endian錛夊拰緗戠粶搴忥紙Big-Endian錛夌殑杞崲銆?br />閲囩敤 Little-endian妯″紡鐨凜PU瀵規(guī)搷浣滄暟鐨勫瓨鏀炬柟寮忔槸浠庝綆瀛楄妭鍒伴珮瀛楄妭錛岃孊ig-endian妯″紡瀵規(guī)搷浣滄暟鐨勫瓨鏀炬柟寮忔槸浠庨珮瀛楄妭鍒頒綆瀛楄妭銆?32bit瀹界殑鏁?x12345678鍦↙ittle-endian妯″紡CPU鍐呭瓨涓殑瀛樻斁鏂瑰紡錛堝亣璁句粠鍦板潃0x4000寮濮嬪瓨鏀撅級涓猴細(xì)
鍐呭瓨鍦板潃 0x4000 0x4001 0x4002 0x4003
瀛樻斁鍐呭 0x78 0x56 0x34 0x12
鑰屽湪Big- endian妯″紡CPU鍐呭瓨涓殑瀛樻斁鏂瑰紡鍒欎負(fù)錛?br /> 鍐呭瓨鍦板潃 0x4000 0x4001 0x4002 0x4003
瀛樻斁鍐呭 0x12 0x34 0x56 0x78
鍏蜂綋鐨勫尯鍒涓嬶細(xì)

涓夈丅ig-Endian鍜孡ittle-Endian浼樼己鐐?/strong>
Big-Endian浼樼偣錛氶潬棣栧厛鎻愬彇楂樹綅瀛楄妭錛屼綘鎬繪槸鍙互鐢辯湅鐪嬪湪鍋忕Щ浣嶇疆涓?鐨勫瓧鑺傛潵紜畾榪欎釜鏁板瓧鏄?姝f暟榪樻槸璐熸暟銆備綘涓嶅繀鐭ラ亾榪欎釜鏁板兼湁澶氶暱錛屾垨鑰呬綘涔熶笉蹇呰繃涓浜涘瓧鑺傛潵鐪嬭繖涓暟鍊兼槸鍚﹀惈鏈夌鍙蜂綅銆傝繖涓暟鍊兼槸浠ュ畠浠鎵撳嵃鍑烘潵鐨勯『搴忓瓨鏀劇殑錛屾墍浠ヤ粠浜岃繘鍒跺埌鍗佽繘鍒剁殑鍑芥暟鐗瑰埆鏈夋晥銆傚洜鑰岋紝瀵逛簬涓嶅悓瑕佹眰鐨勬満鍣紝鍦ㄨ璁″瓨鍙栨柟寮忔椂灝變細(xì)涓嶅悓銆?br />
Little-Endian浼樼偣錛氭彁鍙栦竴涓紝涓や釜錛屽洓涓垨鑰呮洿闀垮瓧鑺傛暟鎹殑姹囩紪鎸囦護(hù)浠ヤ笌鍏朵粬鎵鏈夋牸寮忕浉鍚岀殑鏂瑰紡榪涜錛氶鍏堝湪鍋忕Щ鍦板潃涓?鐨勫湴鏂規(guī)彁鍙栨渶浣庝綅鐨勫瓧鑺傦紝鍥犱負(fù)鍦板潃鍋忕Щ鍜屽瓧鑺傛暟鏄竴瀵逛竴鐨勫叧緋伙紝澶氶噸綺懼害鐨勬暟瀛﹀嚱鏁板氨鐩稿鍦板鏄撳啓浜嗐?br />
濡傛灉浣犲鍔犳暟瀛楃殑鍊鹼紝浣犲彲鑳藉湪宸﹁竟澧炲姞鏁板瓧錛堥珮浣嶉潪鎸囨暟鍑芥暟闇瑕佹洿澶氱殑鏁板瓧錛夈?鍥犳錛?緇忓父闇瑕佸鍔犱袱浣嶆暟瀛楀茍縐誨姩瀛樺偍鍣ㄩ噷鎵鏈塀ig-endian欏哄簭鐨勬暟瀛楋紝鎶婃墍鏈夋暟鍚戝彸縐伙紝榪欎細(xì)澧炲姞璁$畻鏈虹殑宸ヤ綔閲忋備笉榪囷紝浣跨敤Little- Endian鐨勫瓨鍌ㄥ櫒涓笉閲嶈鐨勫瓧鑺傚彲浠ュ瓨鍦ㄥ畠鍘熸潵鐨勪綅緗紝鏂扮殑鏁板彲浠ュ瓨鍦ㄥ畠鐨勫彸杈圭殑楂樹綅鍦板潃閲屻傝繖灝辨剰鍛崇潃璁$畻鏈轟腑鐨勬煇浜涜綆楀彲浠ュ彉寰楁洿鍔犵畝鍗曞拰蹇熴?br />鍥涖佽鍐欎竴涓狢鍑芥暟錛岃嫢澶勭悊鍣ㄦ槸Big_endian鐨勶紝鍒欒繑鍥?錛涜嫢鏄疞ittle_endian鐨勶紝鍒欒繑鍥?銆?br />鍓栨瀽錛氱敱浜庤仈鍚堜綋union鐨勫瓨鏀鵑『搴忔槸鎵鏈夋垚鍛橀兘浠庝綆鍦板潃寮濮嬪瓨鏀撅紝鍒╃敤璇ョ壒鎬у氨鍙互杞繪澗鍦拌幏寰椾簡CPU瀵瑰唴瀛橀噰鐢↙ittle- endian榪樻槸Big-endian妯″紡璇誨啓銆?br />璇存槑錛?br />1 鍦╟涓紝鑱斿悎浣擄紙鍏辯敤浣擄級鐨勬暟鎹垚鍛橀兘鏄粠浣庡湴鍧寮濮嬪瓨鏀俱?br />2 鑻ユ槸灝忕妯″紡錛岀敱浣庡湴鍧鍒伴珮鍦板潃c.a瀛樻斁涓?x01 00 00 00錛宑.b琚祴鍊間負(fù)0x01錛?br /> ————————————————————————————
鍦板潃 0x00000000 0x00000001 0x00000002 0x00000003
c.a 01 00 00 00
c.b 01 00
————————————————————————————
3 鑻ユ槸澶х妯″紡錛岀敱浣庡湴鍧鍒伴珮鍦板潃c.a瀛樻斁涓?x00 00 00 01錛宑.b琚祴鍊間負(fù)0x0錛?br /> ————————————————————————————
鍦板潃 0x00000000 0x00000001 0x00000002 0x00000003
c.a 00 00 00 01
c.b 00 00
————————————————————————————
4 鏍規(guī)嵁c.b鐨勫肩殑鎯呭喌灝卞彲浠ュ垽鏂璫pu鐨勬ā寮忎簡銆?br />
涓句緥錛屼竴涓?6榪涘埗鏁版槸 0x11 22 33錛屽叾瀛樻斁鐨勪綅緗槸
鍦板潃0x3000 涓瓨鏀?1
鍦板潃0x3001 涓瓨鏀?2
鍦板潃0x3002 涓瓨鏀?3
榪炶搗鏉ュ氨鍐欐垚鍦板潃0x3000-0x3002涓瓨鏀句簡鏁版嵁0x112233
鑰岃繖縐嶅瓨鏀懼拰琛ㄧず鏂瑰紡錛屾濂界鍚堝ぇ绔?/span>
鍙﹀涓涓瘮杈冨ソ鐞嗚В鐨勫啓娉曞涓嬶細(xì)
鎴栬呬笅闈袱縐嶅啓娉曚篃鏄彲浠ョ殑
]]>
]]>
int* ( *( *fun )( int* ) )[10];
榪欐槸涓涓細(xì)璁╁垵瀛﹁呮劅鍒板ご鏅曠洰鐪┿佹劅鍒版亹鎯х殑鍑芥暟鎸囬拡澹版槑銆傚湪鐔熺粌鎺屾彙C/C++鐨勫0鏄庤娉曚箣鍓嶏紝涓嶅涔?fàn)涓瀹氱殑瑙勫垯錛屾兂鐞嗚В濂借繖綾誨鏉傚0鏄庢槸姣旇緝鍥伴毦鐨勩?/span>
C/C++鎵鏈夊鏉傜殑澹版槑緇撴瀯錛岄兘鏄敱鍚勭澹版槑宓屽鏋勬垚鐨勩傚浣曡В璇誨鏉傛寚閽堝0鏄庯紵鍙沖乏娉曞垯鏄竴涓緢钁楀悕銆佸緢鏈夋晥鐨勬柟娉曘備笉榪囷紝鍙沖乏娉曞垯鍏跺疄騫朵笉鏄?/span>C/C++鏍囧噯閲岄潰鐨勫唴瀹癸紝瀹冩槸浠?/span>C/C++鏍囧噯鐨勫0鏄庤瀹氫腑褰掔撼鍑烘潵鐨勬柟娉曘?/span>C/C++鏍囧噯鐨勫0鏄庤鍒欙紝鏄敤鏉ヨВ鍐沖浣曞垱寤哄0鏄庣殑錛岃屽彸宸︽硶鍒欐槸鐢ㄦ潵瑙e喅濡備綍杈╄瘑涓涓0鏄庣殑錛屼粠宓屽鐨勮搴︾湅錛屼袱鑰呭彲浠ヨ鏄竴涓浉鍙嶇殑榪囩▼銆傚彸宸︽硶鍒欑殑鑻辨枃鍘熸枃鏄繖鏍瘋鐨勶細(xì)
The right-left rule: Start reading the declaration from the innermost parentheses, go right, and then go left. When you encounter parentheses, the direction should be reversed. Once everything in the parentheses has been parsed, jump out of it. Continue till the whole declaration has been parsed.
榪欐鑻辨枃鐨勭炕璇戝涓嬶細(xì)
鍙沖乏娉曞垯錛氶鍏堜粠鏈閲岄潰鐨勫渾鎷彿鐪嬭搗錛岀劧鍚庡線鍙崇湅錛屽啀寰宸︾湅銆傛瘡褰撻亣鍒板渾鎷彿鏃訛紝灝卞簲璇ユ帀杞槄璇繪柟鍚戙備竴鏃﹁В鏋愬畬鍦嗘嫭鍙烽噷闈㈡墍鏈夌殑涓滆タ錛屽氨璺沖嚭鍦嗘嫭鍙楓傞噸澶嶈繖涓繃紼嬬洿鍒版暣涓0鏄庤В鏋愬畬姣曘?/span>
絎旇呰瀵硅繖涓硶鍒欒繘琛屼竴涓皬灝忕殑淇錛屽簲璇ユ槸浠庢湭瀹氫箟鐨勬爣璇嗙寮濮嬮槄璇伙紝鑰屼笉鏄粠鎷彿璇昏搗錛屼箣鎵浠ユ槸鏈畾涔夌殑鏍囪瘑絎︼紝鏄洜涓轟竴涓0鏄庨噷闈㈠彲鑳芥湁澶氫釜鏍囪瘑絎︼紝浣嗘湭瀹氫箟鐨勬爣璇嗙鍙細(xì)鏈変竴涓?/span>
鐜板湪閫氳繃涓浜涗緥瀛愭潵璁ㄨ鍙沖乏娉曞垯鐨勫簲鐢紝鍏堜粠鏈綆鍗曠殑寮濮嬶紝閫愭鍔犳繁錛?/span>
int (*func)(int *p);
棣栧厛鎵懼埌閭d釜鏈畾涔夌殑鏍囪瘑絎︼紝灝辨槸func錛屽畠鐨勫闈㈡湁涓瀵瑰渾鎷彿錛岃屼笖宸﹁竟鏄竴涓?/span>*鍙鳳紝榪欒鏄?/span>func鏄竴涓寚閽堬紝鐒跺悗璺沖嚭榪欎釜鍦嗘嫭鍙鳳紝鍏堢湅鍙寵竟錛屼篃鏄竴涓渾鎷彿錛岃繖璇存槑(*func)鏄竴涓嚱鏁幫紝鑰?/span>func鏄竴涓寚鍚戣繖綾誨嚱鏁扮殑鎸囬拡錛屽氨鏄竴涓嚱鏁版寚閽堬紝榪欑被鍑芥暟鍏鋒湁int*綾誨瀷鐨勫艦鍙傦紝榪斿洖鍊肩被鍨嬫槸int銆?/span>
int (*func)(int *p, int (*f)(int*));
func琚竴瀵規(guī)嫭鍙峰寘鍚紝涓斿乏杈規(guī)湁涓涓?/span>*鍙鳳紝璇存槑func鏄竴涓寚閽堬紝璺沖嚭鎷彿錛屽彸杈逛篃鏈変釜鎷彿錛岄偅涔?/span>func鏄竴涓寚鍚戝嚱鏁扮殑鎸囬拡錛岃繖綾誨嚱鏁板叿鏈?/span>int *鍜?/span>int (*)(int*)榪欐牱鐨勫艦鍙傦紝榪斿洖鍊間負(fù)int綾誨瀷銆傚啀鏉ョ湅涓鐪?/span>func鐨勫艦鍙?/span>int (*f)(int*)錛岀被浼煎墠闈㈢殑瑙i噴錛?/span>f涔熸槸涓涓嚱鏁版寚閽堬紝鎸囧悜鐨勫嚱鏁板叿鏈?/span>int*綾誨瀷鐨勫艦鍙傦紝榪斿洖鍊間負(fù)int銆?/span>
int (*func[5])(int *p);
func鍙寵竟鏄竴涓?/span>[]榪愮畻絎︼紝璇存槑func鏄竴涓叿鏈?/span>5涓厓绱犵殑鏁扮粍錛?/span>func鐨勫乏杈規(guī)湁涓涓?/span>*錛岃鏄?/span>func鐨勫厓绱犳槸鎸囬拡錛岃娉ㄦ剰榪欓噷鐨?/span>*涓嶆槸淇グfunc鐨勶紝鑰屾槸淇グfunc[5]鐨勶紝鍘熷洜鏄?/span>[]榪愮畻絎︿紭鍏堢駭姣?/span>*楂橈紝func鍏堣窡[]緇撳悎錛屽洜姝?/span>*淇グ鐨勬槸func[5]銆傝煩鍑鴻繖涓嫭鍙鳳紝鐪嬪彸杈癸紝涔熸槸涓瀵瑰渾鎷彿錛岃鏄?/span>func鏁扮粍鐨勫厓绱犳槸鍑芥暟綾誨瀷鐨勬寚閽堬紝瀹冩墍鎸囧悜鐨勫嚱鏁板叿鏈?/span>int*綾誨瀷鐨勫艦鍙傦紝榪斿洖鍊肩被鍨嬩負(fù)int銆?/span>
int (*(*func)[5])(int *p);
func琚竴涓渾鎷彿鍖呭惈錛屽乏杈瑰張鏈変竴涓?/span>*錛岄偅涔?/span>func鏄竴涓寚閽堬紝璺沖嚭鎷彿錛屽彸杈規(guī)槸涓涓?/span>[]榪愮畻絎﹀彿錛岃鏄?/span>func鏄竴涓寚鍚戞暟緇勭殑鎸囬拡錛岀幇鍦ㄥ線宸︾湅錛屽乏杈規(guī)湁涓涓?/span>*鍙鳳紝璇存槑榪欎釜鏁扮粍鐨勫厓绱犳槸鎸囬拡錛屽啀璺沖嚭鎷彿錛屽彸杈瑰張鏈変竴涓嫭鍙鳳紝璇存槑榪欎釜鏁扮粍鐨勫厓绱犳槸鎸囧悜鍑芥暟鐨勬寚閽堛傛葷粨涓涓嬶紝灝辨槸錛?/span>func鏄竴涓寚鍚戞暟緇勭殑鎸囬拡錛岃繖涓暟緇勭殑鍏冪礌鏄嚱鏁版寚閽堬紝榪欎簺鎸囬拡鎸囧悜鍏鋒湁int*褰㈠弬錛岃繑鍥炲間負(fù)int綾誨瀷鐨勫嚱鏁般?/span>
int (*(*func)(int *p))[5];
func鏄竴涓嚱鏁版寚閽堬紝榪欑被鍑芥暟鍏鋒湁int*綾誨瀷鐨勫艦鍙傦紝榪斿洖鍊兼槸鎸囧悜鏁扮粍鐨勬寚閽堬紝鎵鎸囧悜鐨勬暟緇勭殑鍏冪礌鏄叿鏈?/span>5涓?/span>int鍏冪礌鐨勬暟緇勩?/span>
瑕佹敞鎰忔湁浜涘鏉傛寚閽堝0鏄庢槸闈炴硶鐨勶紝渚嬪錛?/span>
int func(void) [5];
func鏄竴涓繑鍥炲間負(fù)鍏鋒湁5涓?/span>int鍏冪礌鐨勬暟緇勭殑鍑芥暟銆備絾C璇█鐨勫嚱鏁拌繑鍥炲間笉鑳戒負(fù)鏁扮粍錛岃繖鏄洜涓哄鏋滃厑璁稿嚱鏁拌繑鍥炲間負(fù)鏁扮粍錛岄偅涔堟帴鏀惰繖涓暟緇勭殑鍐呭鐨勪笢瑗匡紝涔熷繀欏繪槸涓涓暟緇勶紝浣?/span>C/C++璇█鐨勬暟緇勫悕鏄竴涓笉鍙慨鏀圭殑宸﹀鹼紝瀹冧笉鑳界洿鎺ヨ鍙︿竴涓暟緇勭殑鍐呭淇敼錛屽洜姝ゅ嚱鏁拌繑鍥炲間笉鑳戒負(fù)鏁扮粍銆?/span>
int func[5](void);
func鏄竴涓叿鏈?/span>5涓厓绱犵殑鏁扮粍錛岃繖涓暟緇勭殑鍏冪礌閮芥槸鍑芥暟銆傝繖涔熸槸闈炴硶鐨勶紝鍥犱負(fù)鏁扮粍鐨勫厓绱犲繀欏繪槸瀵硅薄錛屼絾鍑芥暟涓嶆槸瀵硅薄錛屼笉鑳戒綔涓烘暟緇勭殑鍏冪礌銆?/span>
瀹為檯緙栫▼褰撲腑錛岄渶瑕佸0鏄庝竴涓鏉傛寚閽堟椂錛屽鏋滄妸鏁翠釜澹版槑鍐欐垚涓婇潰鎵紺鴻繖浜涘艦寮忥紝灝嗗鍙鎬у甫鏉ヤ竴瀹氱殑鎹熷錛屽簲璇ョ敤typedef鏉ュ澹版槑閫愬眰鍒嗚В錛屽寮哄彲璇?/span>鎬с?/span>
typedef鏄竴縐嶅0鏄庯紝浣嗗畠澹版槑鐨勪笉鏄彉閲忥紝涔熸病鏈夊垱寤烘柊綾誨瀷錛岃屾槸鏌愮綾誨瀷鐨勫埆鍚嶃?span style="margin: 0px; padding: 0px;">typedef鏈夊緢澶х殑鐢ㄩ旓紝瀵逛竴涓鏉傚0鏄庤繘琛屽垎瑙d互澧炲己鍙鎬ф槸鍏朵綔鐢ㄤ箣涓銆?/span>渚嬪瀵逛簬澹版槑錛?/span>
int (*(*func)(int *p))[5];
鍙互榪欐牱鍒嗚В錛?/span>
typedef int (*PARA)[5];
typedef PARA (*func)(int *);
榪欐牱灝卞鏄撶湅寰楀浜嗐?/span>
typedef鐨勫彟涓涓綔鐢紝鏄綔涓哄熀浜庡璞$紪紼嬬殑楂樺眰鎶借薄鎵嬫銆傚湪ADT涓紝瀹冨彲浠ョ敤鏉ュ湪C/C++鍜岀幇瀹炰笘鐣岀殑鐗╀歡闂村緩绔嬪叧鑱旓紝灝嗚繖浜涚墿浠舵娊璞℃垚C/C++鐨勭被鍨嬬郴緇熴傚湪璁捐ADT鐨勬椂鍊欙紝鎴戜滑甯稿父澹版槑鏌愪釜鎸囬拡鐨勫埆鍚嶏紝渚嬪錛?/span>
typedef struct node * list;
浠?/span>ADT鐨勮搴︾湅錛岃繖涓0鏄庢槸鍐嶈嚜鐒朵笉榪囩殑浜嬫儏錛屽彲浠ョ敤list鏉ュ畾涔変竴涓垪琛ㄣ備絾浠?/span>C/C++璇硶鐨勮搴︽潵鐪嬶紝瀹冨叾瀹炴槸涓嶇鍚?/span>C/C++澹版槑璇硶鐨勯昏緫鐨勶紝瀹冩毚鍔涘湴灝嗘寚閽堝0鏄庣浠庢寚閽堝0鏄庡櫒涓垎紱誨嚭鏉ワ紝榪欎細(xì)閫犳垚涓浜涘紓浜庝漢浠槄璇諱範(fàn)鎯殑鐜拌薄錛岃冭檻涓嬮潰浠g爜錛?/span>
const struct node *p1;
typedef struct node *list;
const list p2;
p1綾誨瀷鏄?/span>const struct node*錛岄偅涔?/span>p2鍛紵濡傛灉浣犱互涓哄氨鏄妸list綆鍗?#8220;浠e叆”p2錛岀劧鍚庡緱鍑?/span>p2綾誨瀷涔熸槸const struct node*鐨勭粨鏋滐紝灝卞ぇ閿欑壒閿欎簡銆?/span>p2鐨勭被鍨嬪叾瀹炴槸struct node * const p2錛岄偅涓?/span>const闄愬畾鐨勬槸p2錛屼笉鏄?/span>node銆傞犳垚榪欎竴濂囧紓鐜拌薄鐨勫師鍥犳槸鎸囬拡澹版槑鍣ㄨ鍒嗗壊錛屾爣鍑嗕腑瑙勫畾錛?/span>
6.7.5.1 Pointer declarators
Semantics
If in the declaration ‘‘T D1’’, D1 has the form
* type-qualifier-listopt D
and the type specified for ident in the declaration ‘‘T D’’ is
‘‘derived-declarator-type-list T’’
then the type specified for ident is
‘‘derived-declarator-type-list type-qualifier-list pointer to T’’
For each type qualifier in the list, ident is a so-qualified pointer.
鎸囬拡鐨勫0鏄庡櫒鐢辨寚閽堝0鏄庣*銆佸彲閫夌殑綾誨瀷闄愬畾璇?/span>type-qualifier-listopt鍜屾爣璇嗙D緇勬垚錛岃繖涓夎呭湪閫昏緫涓婃槸涓涓暣浣擄紝鏋勬垚涓涓畬鏁寸殑鎸囬拡澹版槑鍣ㄣ傝繖涔熸槸澶氫釜鍙橀噺鍚屽垪瀹氫箟鏃舵寚閽堝0鏄庣蹇呴』绱ц窡鏍囪瘑絎︾殑鍘熷洜錛屼緥濡傦細(xì)
int *p, q, *k;
p鍜?/span>k閮芥槸鎸囬拡錛屼絾q涓嶆槸錛岃繖鏄洜涓?/span>*p銆?/span>*k鏄竴涓暣浣撴寚閽堝0鏄庡櫒錛屼互琛ㄧず澹版槑鐨勬槸涓涓寚閽堛傜紪璇戝櫒浼?xì)鎶婃寚閽堝0鏄幗W﹀乏杈圭殑綾誨瀷鍖呮嫭鍏墮檺瀹氳瘝浣滀負(fù)鎸囬拡鎸囧悜鐨勫疄浣撶殑綾誨瀷錛屽彸杈圭殑闄愬畾璇嶉檺瀹氳澹版槑鐨勬爣璇嗙銆備絾鐜板湪typedef struct node *list紜敓鐢熸妸*浠庢暣涓寚閽堝0鏄庡櫒涓垎紱誨嚭鏉ワ紝緙栬瘧鍣ㄦ壘涓嶅埌*錛屼細(xì)璁や負(fù)const list p2涓殑const鏄檺瀹?/span>p2鐨勶紝姝e洜濡傛錛?/span>p2鐨勭被鍨嬫槸node * const鑰屼笉鏄?/span>const node*銆?/span>
铏界劧typedef struct node* list涓嶇鍚堝0鏄庤娉曠殑閫昏緫錛屼絾鍩轟簬typedef鍦?/span>ADT涓殑閲嶈浣滅敤浠ュ強(qiáng)淇℃伅闅愯棌鐨勮姹傦紝鎴戜滑搴旇璁╃敤鎴瘋繖鏍蜂嬌鐢?/span>list A錛岃屼笉鏄?/span>list *A錛屽洜姝ゅ湪ADT鐨勮璁′腑浠嶅簲浣跨敤涓婅堪typedef璇硶錛屼絾闇瑕佹敞鎰忓叾甯︽潵鐨勪笉鍒╁獎鍝嶃?/span>
浠庡疄鐜拌楗拌呮ā寮忎腑鎬濊僀++鎸囬拡鍜屽紩鐢ㄧ殑閫夋嫨
鏈榪戝湪鐪嬭璁℃ā寮忕殑鍐呭錛屽伓鐒墮棿鎵嬬棐灝卞啓浜嗕竴涓?#8220;瑁呴グ鑰?#8221;妯″紡鐨勪竴涓疄渚嬨傝瀹炰緥鏉ユ簮浜?/span>椋庨洩娑熸吉鐨勫崥瀹紝鎴戝瀹冨仛浜嗙畝鍖栥備綔涓轟竴涓粡鍏哥殑璁捐妯″紡錛屾湰韜茍娌℃湁澶瑕佽鐨勫唴瀹廣備絾鏄湪鎴戝皾璇曚嬌鐢?/span>C++鍘誨疄鐜拌繖涓ā寮忕殑瀹炰緥鐨勬椂鍊欙紝鍑虹幇浜嗕竴浜涚湅浼兼棤鍏崇揣瑕佷絾鏄嵈寮曚漢娣辨濈殑闂銆?/span>
棣栧厛錛屾垜鎯崇畝鍗曚粙緇嶄竴涓嬭繖涓疄渚嬬殑鍚箟銆傚疄渚嬬殑鐩殑鏄笇鏈涢氳繃瑁呴グ鍣ㄧ被瀵瑰凡鏈夌殑铔嬬硶綾昏繘琛岃楗拌ˉ鍏咃紝浜庢槸鎸夌収瑁呴グ鑰呮ā寮忕殑璁捐緇撴瀯錛屾湁綾諱技鍥?/span>1鐨勮璁$粨鏋勩?/span>
鍥?/span>1 瑁呴グ鑰呮ā寮?/span>
铔嬬硶綾誨拰瑁呴グ鍣ㄧ被閮界戶鎵夸簬涓涓叕鍏辯殑鍩虹被錛岃鍩虹被澹版槑浜嗕竴浜涘叕鍏辨帴鍙c傝繖閲岀畝鍗曠殑浣跨敤getName鏉ヨ繑鍥炲綋鍓嶈泲緋曠殑鍚嶇О錛岃岃楗板櫒綾誨彲浠ュ璇ヨ泲緋曠殑鍚嶇О榪涜淇敼琛ュ厖銆傚叿浣撶殑铔嬬硶綾婚兘鏈夎嚜宸辯殑鍚嶇О錛屾瘮濡?/span>CheeseCake榪斿洖鐨勬槸“濂舵補(bǔ)铔嬬硶”銆傚鏋滀嬌鐢ㄤ簡瑁呴グ鍣ㄧ被瀵硅綾昏繘琛岃楗扮殑璇濓紝榪斿洖鐨勫悕瀛楀氨鍙戠敓浜嗙殑鍙樺寲錛屾瘮濡?#8220;瑁呴グ浜嗚姳鐨?/strong>濂舵補(bǔ)铔嬬硶”錛岃繖姝f槸瑁呴グ鍣ㄧ被鐨勫姛鑳姐傚疄鐜拌繖涓姛鑳界殑鍏抽敭鍦ㄤ簬瑁呴グ鍣ㄥ叕鍏卞熀綾?/span>Decorator錛屽畠鍖呭惈浜嗕竴涓?/span>Cake綾誨瀷鐨勬垚鍛?/span>cake銆傚湪瀹氫箟瑁呴グ鍣ㄧ殑鏃跺欐垜浠彲浠ヤ紶閫掔粰瑁呴グ鍣ㄤ竴涓凡緇忓緩绔嬪ソ鐨勮泲緋曞璞★紝姣斿CheeseCake瀵硅薄銆傜敱浜?/span>CheeseCake鏄?/span>Cake鐨勫瓙綾伙紝鍥犳璇ュ璞″彲浠ヨcake鎴愬憳璁板綍涓嬫潵銆傜敱浜庡叿浣撶殑瑁呴グ鍣ㄧ戶鎵夸簬瑁呴グ鍣ㄥ熀綾?/span>Decorator錛屽洜姝や繚鎶や箻鍛?/span>cake鍙互琚湅鍒幫紝鍙堝洜涓鴻楗板櫒鏈韓涔熸槸緇ф壙涓?/span>Cake鐨勶紝鍥犳涔熸嫢鏈?/span>getName鐨勬帴鍙o紝榪欐牱鍦ㄨ楗板櫒綾誨唴鐢?/span>getName璋冪敤cake鐨?/span>getName鎺ュ彛騫舵坊鍔犻澶栫殑鎿嶄綔灝辮兘瀹屾垚瑁呴グ鐨勭洰鐨勩傚彟澶栵紝瑁呴グ鍣ㄦ湰韜篃鏄?/span>Cake鐨勫瓙綾伙紝鍥犳瑁呴グ鍚庣殑瑁呴グ鍣ㄧ被瀵硅薄鍚屾椂涔熸槸涓涓叿浣撶殑铔嬬硶瀵硅薄錛屽畠鍙互琚啀嬈¤楗幫紒榪欐牱瑁呴グ鍣ㄧ被鍙嶆槧鍦ㄦ垜浠剳嫻烽噷鐨勬儏澧冨氨鏄竴涓師鏈殑铔嬬硶瀵硅薄澶栬竟鍖呰9浜嗕竴灞傚眰瑁呴グ鍣ㄥ璞°?/span>
浠ヤ笂鐨勮鏄庡鏋滆繕涓嶅娓呮鐨勮瘽錛屼笅杈瑰睍紺哄叿浣撶殑瀹炵幇浠g爜銆傝繖閲屽氨闇瑕佽冭檻cake鎴愬憳鐨勭被鍨嬮棶棰橈紝涓鑸嬌鐢ㄦ寚閽堢被鍨嬪彲鑳芥洿絎﹀悎C++鐨勭紪紼嬩範(fàn)鎯傚洜涓轟嬌鐢ㄥ璞′笉浠呮秷鑰楃┖闂達(dá)紝榪樺湪姣忔鏋勯犲璞$殑鏃跺欒繘琛屽璞$殑澶嶅埗錛岃繖閮戒笉鏄垜浠効鎰忕湅鍒扮殑銆傚綋鐒訛紝浣跨敤寮曠敤鎴栬鏇村悎鐞嗭紝鍥犱負(fù)鎸夌収騫沖父鐨勭粡楠岋紝寰堝浣跨敤C++鎸囬拡鐨勫湴鏂歸兘鍙互鐢ㄥ紩鐢ㄤ唬鏇匡紝鏈変漢鐢氳嚦寤鴻澶氫嬌鐢ㄥ紩鐢ㄥ皯浣跨敤鎸囬拡錛堝綋鐒舵垜涔熸壙璁?/span>C++寮曠敤涔熸湁寰堝濂藉~錛?/span>銆備笉榪囷紝褰撲綘璇誨畬鏈枃鎴栬浣犲氨涓嶅ぇ榪欎箞璁や負(fù)浜嗐傞鍏堬紝鎴戜滑鐢?/span>Cake*pCake瀹炵幇榪欎釜瑁呴グ鍣ㄧ被鍐呯殑鎴愬憳錛屽厛鍏蜂綋浜嗚В涓涓嬭繖涓唬鐮佺殑鍏蜂綋鍐呭銆?/span>
浠庝唬鐮佷腑涓嶉毦鐪嬪嚭紼嬪簭鐨勮緭鍑虹粨鏋勫簲璇ユ槸“瑁呴グ榪囪姳鐨勮楗拌繃鑺辯殑濂舵補(bǔ)铔嬬硶”錛屼簨瀹炰篃鐨勭‘濡傛錛佷粠瑁呴グ鍣ㄧ殑浣跨敤鏍煎紡鏉ョ湅FlowerDecorator(&FlowerDecorator(&CheeseCake()))鍊掍篃涓嶈嚦浜庡崄鍒嗛夯鐑︺備絾鏄垰鎵嶈璁鴻繃錛屽鏋滆兘浣跨敤寮曠敤浠f浛浼?xì)璁镐細(xì)鏇?#8220;鑸掓湇”錛岃嚦灝戜笉鐢ㄤ紶閫掑弬鏁頒箣鍓嶈繕瑕佷嬌鐢?/span>&鑾峰彇涓涓嬪湴鍧浜?/span>~
鏃㈢劧濡傛錛屾垜浠妸鎴愬憳淇敼涓哄紩鐢ㄦ牸寮忕殑錛?/span>
淇敼鍚庣殑浠g爜鐪嬭搗鏉ョ殑紜洿“欏虹溂浜?#8221;銆傚洜涓鴻皟鐢ㄧ殑鏃跺欐垜浠笉鐢ㄥ啀鍐欓偅涓湅鐫鍒壄鐨勫彇鍦板潃榪愮畻絎︿簡錛岀劧鍚庢垜浠弧鎬嬈e枩鐨勬墽琛屼簡紼嬪簭錛岃緭鍑虹粨鏋滀負(fù)錛?#8220;瑁呴グ榪囪姳鐨勫ザ娌硅泲緋?#8221;錛佷綘鎴戠殑絎竴鍙嶅簲鍏垚鏄寰楀繕浜嗗淇グ涓嬈′簡錛屼絾鏄垜浠鐪熺殑媯鏌ヤ唬鐮侊紝鍙戠幇鐨勭‘涓鍒囬兘鏄鍚堥昏緫鐨?#8230;…
涓婅竟鍋氫簡榪欎箞澶氶摵鍨氨鏄負(fù)浜嗗紩鍑鴻繖涓鎬殑闂錛屾垜鍏跺疄涔熻璇ラ棶棰樺洶鎯戜簡寰堜箙銆傜◢鏈夌紪紼嬬粡楠岀殑浜洪兘浼?xì)璺燀t皟璇曡繖浜涙瀯閫犲嚱鏁扮殑鎵ц榪囩▼錛岀粨鏋滃彂鐜?/span>FlowerDecorator鍙鎵ц浜嗕竴嬈★紝鍥犳灝戣緭鍑轟竴嬈?#8220;瑁呴グ榪囪姳鐨?#8221;涓嶈凍涓哄銆備絾鏄綘鎴戣偗瀹氬ソ濂囦負(fù)浠涔堜細(xì)灝戣緭鍑轟竴嬈″憿錛?/span>
鍐嶆鍐嶆鐨勬鏌ヤ唬鐮併佽皟璇曘佽窡韙紝鎴栬浣犱細(xì)鍍忓彂鐜版柊澶ч檰涓鏍峰彂鐜頒簡涓涓殣钘忕殑闂錛氱浜屾鏋勯?/span>FlowerDecorator鏃惰皟鐢ㄧ殑鏄鍒舵瀯閫犲嚱鏁幫紝鑰屼笉鏄畾涔夊ソ鐨勬瀯閫犲嚱鏁幫紙铏界劧瀛愮被FlowerDecorator鏄?/span>Cake鐨勫瓙綾伙紝浣嗘槸緙栬瘧鍣ㄤ細(xì)鑷姩鏈浣?jīng)_尮閰嶅嚱鏁板弬鏁扮被鍨嬶級錛佺敱浜庡鍒舵瀯閫犲嚱鏁板煎師妯″師鏍風(fēng)殑鎷瘋礉鍑轟竴涓璞★紝鎵浠ュ彧鑳藉畬鎴愪竴嬈¤楗板櫒瑁呴グ銆傞潪甯稿畬緹庣殑瑙i噴錛佸洜姝ゆ垜浠彲浠ヨ嚜宸遍噸鍐欏鍒舵瀯閫犲嚱鏁版潵瀹屾垚鎴戜滑鐨勮楗板姛鑳斤紝榪欓噷鍏堝拷鐣ュ師鏈殑瀵硅薄澶嶅埗鍔熻兘浜嗐傜紪璇戝櫒涓烘垜浠敓鎴愮殑澶嶅埗鏋勯犲嚱鏁板簲璇ユ槸錛?/span>
鑰屾垜浠簲璇ュ皢鍙傛暟鐪嬩綔涓涓?/span>Cake瀵硅薄榪涜瑁呴グ錛屽洜姝や慨鏀逛負(fù)錛?/span>
鍚屾牱錛岀敱浜庢瀯閫犲嚱鏁板垵濮嬪寲浜嗗熀綾伙紝鎵浠ュ熀綾葷殑澶嶅埗鏋勯犱篃闇瑕侀噸鍐欙細(xì)
鍗充嬌浼犻掔殑鍙傛暟鏄?/span>FlowerDecorator瀵硅薄鍜?/span>Cake涓?/span>Decorator涓嶆槸涓涓被鍨嬶紝浣嗘槸緙栬瘧鍣ㄦ垨璁?dāng)R粯璁ょ殑鍖歸厤緇ф壙灞傛鏈榪戠殑綾誨瀷錛佺劧鍚庢垜浠寜鐓ц繖鏍瘋姹傞噸鍐欎簡浠g爜錛屾墽琛屼簡紼嬪簭錛屽湪鏈熷緟緇撴灉鐨勯偅涓鍒葷湅鍒扮殑鏄?#8220;瑁呴グ榪囪姳鐨勫ザ娌硅泲緋?#8221;……鎴栬姝ゆ椂鐨勪綘閮戒細(xì)鎰熷埌鐏板績錛屼絾鏄綘榪樻槸渚濈劧鐨勫潥寮虹殑鎸変笅浜?/span>F5鍗曟璺熻釜錛岀粨鏋滀綘鍙戠幇鎷瘋礉鏋勯犲嚱鏁板茍娌℃湁琚皟鐢紒闅鵑亾浠ヤ笂鐨勫亣璁鵑兘閿欎簡鍚楋紵鎴戝彲浠ョ‘瀹氱殑鍛婅瘔璇昏咃紝鎴戜滑浠ヤ笂鐨勫亣璁鵑兘鏄紜殑銆?/span>
鏈緇堟垜涔熸槸娌℃湁鍔炴硶錛屽幓StackOverFlow涓婃眰鍔╋紝緇煎悎鍥炵瓟鑰呯殑璁ㄨ錛屾垜緇堜簬鎶婇棶棰樼殑鍘熷洜閿佸畾浜?#8212;—緙栬瘧鍣ㄤ紭鍖栵紒鎴戣寰楃敤涓涓渶綆鍗曠殑渚嬪瓙鏉ヨ鏄庤繖涓棶棰樺啀鍚堥備笉榪囦簡錛?/span>
榪欎釜綆鍗曠殑渚嬪瓙緇撴灉鎴栬澶у閮藉緢鏄庣櫧錛屼絾鏄綘浜茶嚜嫻嬭瘯涓涓嬪氨鍙兘瑕佹鐤戣嚜宸辯殑鍒ゆ柇鑳藉姏浜嗭紝紼嬪簭杈撳嚭錛?/span>

鏄笉鏄湁鐐逛笘鐣岃琚瑕嗙殑鎰熻錛熼渶瑕佸0鏄庝竴涓嬶紝榪欎釜鏄?/span>Visual Studio 2010涓嬬殑嫻嬭瘯緇撴灉錛屽洜涓鴻繖涓▼搴忕殑杈撳嚭鐨勭‘鍜岀紪璇戝櫒鐩稿叧錛佷負(fù)浜嗙‘璁ゆ垜鐢?/span>gcc-4.4.3嫻嬭瘯浜嗚孌典唬鐮侊紝杈撳嚭緇撴灉涓猴細(xì)
inux.jpg)
鐪嬫潵錛岃繕鏄?/span>gcc浼樺寲鐨勬瘮杈冨交搴曘傚洜姝ゆ垜浠彲浠ュ緱鍑虹粨璁猴紝綾諱技榪欑鏃犲悕瀵硅薄鐨勬瀯閫狅紙鏈夊悕鐨勬槸鎸夌収瑙勭煩鏉ョ殑錛夛紝璋冪敤澶氬皯嬈℃瀯閫犲嚱鏁拌鐪嬬紪璇戝櫒鐨?#8220;鑴炬皵”浜嗐傚埌榪欓噷錛屼笉鐭ラ亾浣犲寮曠敤鍙傛暟鐨勬劅瑙夊浣曪紵
璁ㄨ鍒拌繖錛屾垨璁告湁浜鴻鍜屾湰鏉ヨ璁ㄨ鐨勮瘽棰樼寰楀お榪滀簡銆傚叾瀹炲茍涓嶆槸錛屼經(jīng)瀹惰錛?#8220;浠婃棩涔嬫灉鐨嗘潵鑷槰鏃ヤ箣鍥?#8221;錛屼竴鍒囩殑涓鍒囬兘鏄敱浜庢垜浠嬌鐢ㄤ簡鏈互涓烘鏃犳?zhèn)侩姎勫紩鐢ㄥD嚧鐨勶紒濡傛灉浣跨敤鎸囬拡灝變笉鍙兘鍙戠敓鍜屾嫹璐濇瀯閫犲嚱鏁板啿紿佺殑闂錛屼篃涓嶄細(xì)瀵艱嚧緙栬瘧鍣ㄤ紭鍖栫殑闂錛佸洖瑙嗘湰鏂囧垰寮濮嬩婦鐨勪緥瀛愬拰璇ユ枃鐨勪富棰橈紝鎴栬鎴戜滑搴旇娓呮鏈夋椂鍊欑殑紜濂藉ソ鍖哄垎涓涓嬫寚閽堝拰寮曠敤鐨勫樊鍒簡錛屽綋鐒舵湰鏂囦篃鏄粠涓涓疄璺電殑渚嬪瓙涓幓鍙戠幇鍜屾寲鎺樿繖涓鐐廣?br />
鍘熷洜鍒嗘瀽錛?br style="margin: 0px; padding: 0px; " />涓鍙ヨ瘽-----濡傛灉浠諱綍STL綾諱嬌鐢ㄤ簡闈欐佸彉閲忥紙鏃犺鏄洿鎺ヨ繕鏄棿鎺ヤ嬌鐢級錛岄偅涔堝氨涓嶈鍐嶅啓鍑鴻法鎵ц鍗曞厓璁塊棶瀹冪殑浠g爜銆?nbsp;闄ら潪浣犺兘澶熺‘瀹氫袱涓姩鎬佸簱浣跨敤鐨勯兘鏄悓鏍風(fēng)殑STL瀹炵幇錛屾瘮濡傞兘浣跨敤VC鍚屼竴鐗堟湰鐨凷TL錛岀紪璇戦夐」涔熶竴鏍楓傚己鐑堝緩璁紝涓嶈鍦ㄥ姩鎬佸簱鎺ュ彛涓紶閫扴TL瀹瑰櫒錛侊紒
STL涓嶄竴瀹氫笉鑳藉湪DLL闂翠紶閫掞紝浣嗕綘蹇呴』褰誨簳鎼炴噦瀹冪殑鍐呴儴瀹炵幇錛屽茍鎳傚緱涓轟綍浼?xì)鍑洪棶棰樸?br style="margin: 0px; padding: 0px; " />寰蔣鐨勮В閲婏細(xì)
http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b172396
寰蔣緇欑殑瑙e喅鍔炴硶錛?br style="margin: 0px; padding: 0px; " />http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b168958
1銆佸井杞殑瑙i噴錛?br style="margin: 0px; padding: 0px; " />澶ч儴鍒咰++鏍囧噯搴撻噷鎻愪緵鐨勭被鐩存帴鎴栭棿鎺ュ湴浣跨敤浜嗛潤鎬佸彉閲忋傜敱浜庤繖浜涚被鏄氳繃妯℃澘鎵╁睍鑰屾潵鐨勶紝鍥犳姣忎釜鍙墽琛屾槧鍍忥紙閫氬父鏄?dll鎴?exe鏂囦歡錛夊氨浼?xì)瀛樺湪涓浠藉彧灞炰簬鑷繁鐨勩佺粰瀹氱被鐨勯潤鎬佹暟鎹垚鍛樸傚綋涓涓渶瑕佽闂繖浜涢潤鎬佹垚鍛樼殑綾繪柟娉曟墽琛屾椂錛屽畠浣跨敤鐨勬槸“榪欎釜鏂規(guī)硶鐨勪唬鐮佸綋鍓嶆墍鍦ㄧ殑閭d喚鍙墽琛屾槧鍍?#8221;閲岀殑闈欐佹垚鍛樺彉閲忋傜敱浜庝袱浠藉彲鎵ц鏄犲儚鍚勮嚜鐨勯潤鎬佹暟鎹垚鍛樺茍鏈悓姝ワ紝榪欎釜琛屼負(fù)灝卞彲鑳藉鑷磋闂繚渚嬶紝鎴栬呮暟鎹湅璧鋒潵浼間箮涓㈠け鎴栬鐮村潖浜嗐?br style="margin: 0px; padding: 0px; " />
鍙兘涓嶅お濂芥噦錛屾垜涓句釜渚嬪瓙錛氬亣濡傜被A<T>鏈変釜闈欐佸彉閲弇_s錛岄偅涔堝綋1.exe浣跨敤浜?.dll涓彁渚涚殑鏌愪釜A<int>瀵硅薄鏃訛紝鐢變簬妯℃澘鎵╁睍鏈哄埗錛?.exe鍜?.dll涓細(xì)鍒嗗埆瀛樺湪鑷繁鐨勪竴浠界被闈欐佸彉閲廇<int>.m_s銆?br style="margin: 0px; padding: 0px; " />榪欐牱錛屽亣濡?.exe涓粠2.dll涓彇寰椾簡涓涓殑綾籄<int>鐨勫疄渚嬪璞錛岄偅涔堝綋鍦?.exe涓洿鎺ヨ闂產(chǎn).m_s鏃訛紝鍏跺疄璁塊棶鐨勬槸 1.exe涓殑瀵瑰簲鎷瘋礉錛堟紜儏鍐靛簲璇ユ槸璁塊棶浜?.dll涓殑a.m_s錛夈傝繖鏍峰氨鍙兘瀵艱嚧闈炴硶璁塊棶銆佸簲褰撴敼鍙樼殑鏁版嵁娌℃湁鏀瑰彉銆佷笉搴旀敼鍙樼殑鏁版嵁琚敊璇湴鏇存敼絳夊紓甯告儏褰€?br style="margin: 0px; padding: 0px; " />
鍘熸枃錛?br style="margin: 0px; padding: 0px; " />Most classes in the Standard C++ Libraries use static data members directly or indirectly. Since these classes are generated through template instantiation, each executable image (usually with DLL or EXE file name extensions) will contain its own copy of the static data member for a given class. When a method of the class that requires the static data member is executed, it uses the static data member in the executable image in which the method code resides. Since the static data members in the executable images are not in sync, this action could result in an access violation or data may appear to be lost or corrupted.
1銆佷繚璇佽祫婧愮殑鍒嗛厤/鍒犻櫎鎿嶄綔瀵圭瓑騫跺浜庡悓涓涓墽琛屽崟鍏冿紱
姣斿錛屽彲浠ユ妸榪欎簺鎿嶄綔錛堝寘鎷瀯閫?鏋愭瀯鍑芥暟銆佹煇浜涘鍣ㄨ嚜鍔ㄦ墿瀹箋榪欎釜闇瑕佺壒鍒敞鎰弣鏃剁殑鍐呭瓨鍐嶅垎閰嶇瓑錛夐殣钘忓埌鎺ュ彛鍑芥暟閲岄潰銆傛崲鍙ヨ瘽璇達(dá)細(xì)灝介噺涓嶈鐩存帴浠巇ll涓緭鍑簊tl瀵硅薄錛涘鏋滀竴瀹氳杈撳嚭錛岀粰瀹冨姞涓婁竴灞傚寘瑁咃紝鐒跺悗杈撳嚭榪欎釜鍖呰鎺ュ彛鑰屼笉鏄師濮嬫帴鍙c?br style="margin: 0px; padding: 0px; " />
2銆佷繚璇佹墍鏈夌殑鎵ц鍗曞厓浣跨敤鍚屾牱鐗堟湰鐨凷TL榪愯搴撱?br style="margin: 0px; padding: 0px; " /> 姣斿錛屽叏閮ㄤ嬌鐢╮elease搴撴垨debug搴擄紝鍚﹀垯涓や釜鎵ц鍗曞厓鎵╁睍鍑烘潵鐨凷TL綾葷殑鍐呭瓨甯冨眬灝卞彲鑳戒細(xì)涓嶄竴鏍楓?br style="margin: 0px; padding: 0px; " />
鍙璁頒綇鍏抽敭灝辨槸錛?span style="margin: 0px; padding: 0px; ">濡傛灉浠諱綍STL綾諱嬌鐢ㄤ簡闈欐佸彉閲忥紙鏃犺鏄洿鎺ヨ繕鏄棿鎺ヤ嬌鐢級錛岄偅涔堝氨涓嶈鍐嶅啓鍑鴻法鎵ц鍗曞厓璁塊棶瀹冪殑浠g爜銆?br style="margin: 0px; padding: 0px; " />
瑙e喅鏂規(guī)硶錛?br style="margin: 0px; padding: 0px; " />1. 涓涓彲浠ヨ冭檻鐨勬柟妗?br style="margin: 0px; padding: 0px; " />姣斿鏈変袱涓姩鎬佸簱L1鍜孡2錛孡2闇瑕佷慨鏀筁1涓殑涓涓猰ap錛岄偅涔堟垜鍦↙1涓緗涓嬫帴鍙?br style="margin: 0px; padding: 0px; " />int modify_map(int key, int new_value);
濡傛灉闇瑕佹寚瀹?#8220;鏌愪竴涓猰ap”錛屽垯鍙互鑰冭檻瀹炵幇涓縐嶇被浼間簬鍙ユ焺鐨勬柟寮忥紝姣斿鍙互浼犻掍竴涓狣WORD
涓嶈繃榪欎釜DWORD鏀劇殑鏄竴涓湴鍧
閭d箞modify_map灝卞彲浠ヨ繖鏍峰疄鐜幫細(xì)
int modify_map(DWORD map_handle, int key, int new_value)
{
std::map<int, int>& themap = *(std::map<int, int>*)map_handle;
themap[key] = new_value;
}
map_handle鐨勫間篃棣栧厛鐢盠1“鍛婅瘔”L2:
DWORD get_map_handle();
L2鍙互榪欐牱璋冪敤:
DWORD h = get_map_handle();
modify_map(h, 1, 2);
2. 鍔犲叆涓涓澶栫殑灞傦紝灝卞彲浠ヨВ鍐抽棶棰樸傛墍浠ワ紝浣犻渶瑕佸皢浣犵殑Map鍖呰鍦╠ll鍐呴儴錛岃屼笉鏄瀹冨嚭鐜板湪鎺ュ彛褰撲腑銆傚姩鎬佸簱鐨勬帴鍙h秺綆鍗曡秺濂斤紝涓嶅ソ鍘諱紶澶繃澶嶆潅鐨勪笢涓滄槸鑷崇悊鍚嶈█錛氾級
鍦ㄥ姩鎬佽繛鎺ュ簱寮鍙戜腑瑕佺壒鍒敞鎰忓唴瀛樼殑鍒嗛厤涓庨噴鏀鵑棶棰橈紝紼嶄笉娉ㄦ剰錛屾瀬鍙兘閫犳垚鍐呭瓨娉勬紡錛屼粠鑰岃闂嚭閿欍備緥濡傚湪鏌怐LL涓瓨鍦ㄨ繖鏍蜂竴孌典唬鐮侊細(xì) 浠婂ぉ鍐欑▼搴忕殑鏃跺欒緇欎竴涓ā鍧楃殑dll浼犻掍竴涓弬鏁幫紝鐢變簬鍙傛暟鏁伴噺鏄彲鍙樼殑錛屽洜姝よ璁℃垚浜唙ector<string>綾誨瀷錛屼絾璋冭瘯榪囩▼涓彂鐜板湪exe涓殑鍙傛暟浼犻掑埌dll涓殑鍑芥暟鍚庯紝vector鍙樻垚絀虹殑錛屾敼鎴愪紶寮曠敤綾誨瀷鍚庯紝vector绔熺劧鍙樺緱寰堝ぇ錛屽茍涓旀槸鏃犳剰涔夌殑鍙傛暟銆?/p> 瀵逛簬榪欎釜闂錛屼袱縐嶅姙娉曪細(xì) 1.浼犻抳ector鎸囬拡 2.浼犻抍onst vector<TYPE>銆?/p> 絀跺叾鍘熷洜錛?/p> 鏄洜涓簐ector鍦╡xe鍜宒ll涔嬮棿浼犻掔殑鏃跺欙紝鐢變簬鍦╠ll鍐呭彲鑳藉vector鎻掑叆鏁版嵁錛岃岃繖孌靛唴瀛樻槸鍦╠ll閲岄潰鍒嗛厤鐨勶紝exe鏃犳硶鐭ラ亾濡備綍閲婃斁鍐呭瓨錛屼粠鑰屽鑷撮棶棰樸傝屾敼鎴恈onst綾誨瀷鍚庯紝緙栬瘧鍣ㄤ究鐭ラ亾dll閲屼笉浼?xì)鏀瑰彉vector錛屼粠鑰屼笉浼?xì)鍑洪敊銆?/p> 鎴栬呭彲浠ヨ榪欐槸"cross-DLL problem."錛圱his problem crops up when an object is created using new in one dynamically linked library (DLL) but is deleted in a different DLL錛夌殑涓縐嶅惂銆?/p> 瀵逛簬STL錛屽湪DLL涓嬌鐢ㄧ殑鏃跺欙紝寰寰瀛樺湪榪欎簺闂錛屽湪緗戠粶涓婃悳闆嗕簡涓嬶紝榪欎簺閮芥槸瑕佸鉤鏃朵嬌鐢⊿TL鐨勬椂鍊欐敞鎰忕殑銆?/p> *************************************************************************************************************** 寮曠敤http://www.hellocpp.net/Articles/Article/714.aspx 褰搕emplate 閬亣鍒癲ynamic link 鏃跺? 寰堝鏃跺欏嵈鏄竴鍦烘伓姊? 2> 3> 妯℃澘+鍔ㄦ侀摼鎺ュ簱鐨勪嬌鐢ㄩ棶棰樿繕寰堝. 瑕佸崈涓囩暀蹇冭繖涓櫡闃遍亶鍦扮殑涓滆タ鍟?/p> *************************************************************************************************************************** 寰蔣鍏充簬榪欑被闂鐨勮В閲婏細(xì) You may experience an access violation when you access an STL object through a pointer or reference in a different DLL or EXE http://support.microsoft.com/default.aspx?scid=KB;en-us;q172396 How to export an instantiation of a Standard Template Library (STL) class and a class that contains a data member that is an STL object http://support.microsoft.com/default.aspx?scid=KB;en-us;q168958 鎬葷粨錛?/p> 瀛楃涓插弬鏁扮敤char*錛孷ector鐢╟har**錛?/p>
extent "C" __declspec(dllexport)
void ExtractFileName( const std::string& path //!< Input path and filename.
, std::string& fname //!< Extracted filename with extension.
)
{
std::string::size_type startPos = path.find_last_of('\\');
fname.assign(path.begin() startPos 1, path.end() );
}
鍦―LL涓嬌鐢⊿TL瀵硅薄std::string錛屽茍涓斿湪鍏朵腑鏀瑰彉std::string鐨勫唴瀹癸紝鍗沖彂鐢熶簡鍐呭瓨鐨勯噸鍒嗛厤闂,鑻ュ湪EXE涓皟鐢ㄨ鍑芥暟浼?xì)鍑虹幇鍐呭瓨璁块棶闂銆?span style="margin: 0px; padding: 0px; color: #ff3333; ">涓昏鏄細(xì)鍥犱負(fù)DLL鍜孍XE鐨勫唴瀛樺垎閰嶆柟寮忎笉鍚岋紝DLL涓殑鍒嗛厤鐨勫唴瀛樹笉鑳藉湪EXE涓紜噴鏀炬帀銆?br style="margin: 0px; padding: 0px; " />
瑙e喅榪欎竴闂鐨勯斿緞濡備笅錛?br style="margin: 0px; padding: 0px; " />涓鑸儏鍐典笅錛氭瀯寤篋LL蹇呴』閬靛驚璋佸垎閰嶅氨鐢辮皝閲婃斁鐨?/span>鍘熷垯錛屼緥濡侰OM鐨勮В鍐蟲柟妗堬紙鍒╃敤寮曠敤璁℃暟錛夛紝瀵硅薄鐨勫垱寤猴紙QueryInterface錛変笌閲婃斁鍧囧湪COM緇勪歡鍐呴儴瀹屾垚銆傚湪綰疌 鐜涓嬶紝鍙互寰堝鏄撶殑瀹炵幇綾諱技鏂規(guī)銆?/p>
鍦ㄥ簲鐢⊿TL鐨勬儏鍐典笅錛屽緢闅句嬌鐢ㄤ笂榪版柟妗堟潵瑙e喅錛屽洜姝ゅ繀欏誨彟杈熻箠寰勶紝閫斿緞鏈変簩錛?br style="margin: 0px; padding: 0px; " />1銆佽嚜宸卞啓鍐呭瓨鍒嗛厤鍣ㄦ浛浠TL涓殑榛樿鍒嗛厤鍣ㄣ?br style="margin: 0px; padding: 0px; " />2銆佷嬌鐢⊿TLport鏇夸唬緋葷粺鐨勬爣鍑嗗簱銆?br style="margin: 0px; padding: 0px; " />
鍏跺疄錛屼笂榪伴棶棰樺湪VC7鍙?qiáng)浠ュ悗鐗堟湰涓Q屽凡寰楀埌瑙e喅錛屾敞鎰廌LL宸ョ▼鍜岃皟鐢ㄧ殑宸ョ▼涓瀹氳浣跨敤澶氱嚎紼婦LL搴擄紝灝變笉浼?xì)鍙戠敓鍐呭瓨璁块棶闂銆?/p>涓涓緢濂囨殑闂錛欴LL涓嬌鐢╯td::string浣滀負(fù)鍙傛暟緇撴灉鍑洪敊
榪欐鏃墮棿,鍦ㄥ伐紼嬩腑灝嗕竴浜涘姛鑳藉皝瑁呮垚鍔ㄦ佸簱,闇瑕佷嬌鐢ㄥ姩鎬佸簱鎺ュ彛鐨勬椂鍊?浣跨敤浜?span style="margin: 0px; padding: 0px; ">STL鐨勪竴浜涚被鍨嬩綔涓哄弬鏁?
姣旀柟string,vector,list.浣嗘槸鍦ㄤ嬌鐢ㄦ帴鍙g殑鏃跺?
褰撴垜鍦ㄤ嬌鐢ㄨ繖涓簱鐨勬椂鍊?榪欐牱鍐欎唬鐮?
涓鐐逛竴鐐瑰彇鎺夎繖涓嚱鏁扮殑浠g爜.鏈鍚庡氨鍓╀笅
str="qadasdasdasdsafsafas";
榪樻槸鍑洪敊璇?
濡傛灉鏀規(guī)垚寰堢煭鐨勫瓧絎︿覆,灝變笉浼?xì)鍑洪敊璇?
鍦ㄨ繖涓椂鍊?鍙兘灝濊瘯璁や負(fù)鏄瓧絎︿覆鐨勭┖闂村お灝?br style="margin: 0px; padding: 0px; " />
鏈緇堟垜淇敼鎴愯繖鏍?閿欒娑堝け浜?甯屾湜閿欒鐪熺殑鏄繖涓紩璧風(fēng)殑
鐜板湪鏉ヨ璇翠竴閮ㄥ垎鎴戝凡緇忕鍒拌繃鐨勯棶棰? 闂涓昏闆嗕腑鍦ㄥ唴瀛樺垎閰嶄笂.
1>
鎷縎TL鏉ヨ, 鑷繁鍐欐ā鏉跨殑鏃跺?寰堥毦鍏嶅氨鐢ㄥ埌stl. stl鐨勪唬鐮侀兘鍦ㄥご鏂囦歡閲? 閭d箞琛ㄧず鐫鍐呭瓨鍒嗛厤鐨勪唬鐮?鍙湁鍖呭惈浜嗗畠鐨刢pp 緙栬瘧鐨勬椂鍊欐墠浼?xì)琚啗_畾鏄嬌鐢ㄤ粈涔堟牱鐨勫唴瀛樺垎閰嶄唬鐮? 鑰冭檻涓涓? 褰撲綘澹版槑浜嗕竴涓獀ector<> . 騫舵妸榪欎釜vector<>浜ょ粰涓涓?dll閲岀殑浠g爜鏉ョ敤. 鐢ㄥ畬鍚? 鍦ㄤ綘鐨勭▼搴忛噷琚噴鏀句簡. 閭d箞濡傛灉浣?鍦╠ll閲屽線vector閲宨nsert浜嗕竴浜涗笢瑗? 閭d箞榪欎釜鏃跺檌nsert 鍙戠敓鐨勫唴瀛樺垎閰嶇殑浠g爜鏄睘浜巇ll鐨? 浣犱笉鐭ラ亾榪欎釜dll鐨勫唴瀛樺垎閰嶆槸浠涔? 鏄垎閰嶅湪鍝噷鐨? 鑰岃繖涓椂鍊?閲婃斁閭d績鐨勫姩浣滃嵈涓嶅湪dll閲?....鍚屾椂. 浣犵敋鑷蟲棤娉曚繚璇佺紪璇慸ll鐨勯偅涓浼欎嬌鐢ㄧ殑stl鐗堟湰鍜屼綘鏄畬鍏ㄤ竴鏍風(fēng)殑..>
濡傛璇存潵, 紼嬪簭crash鎺夋槸澶╃粡鍦頒箟鐨?...
瀵圭瓥: 鍗冧竾鍒埆鎶婁綘鐨剆tl 瀹瑰櫒,妯℃澘瀹瑰櫒鍦?dll 闂翠紶鏉ヤ紶鍘?. 璁頒綇string涔熸槸....
浣犲湪dll鐨勬煇涓被閲屽0鏄庝簡涓涓獀ector涔嬬被鐨勫鍣? 鑰屾病鏈夋樉寮忕殑鍐欒繖涓被鐨勬瀯閫犲拰鏋愭瀯鍑芥暟. 閭d箞闂鍙堟潵浜?
浣犺繖涓被鑲畾鏈夋搷浣滆繖vector鐨勫嚱鏁? 閭d箞榪欎簺鍑芥暟浼?xì)璁﹙ecoter<>鐢熸垚浠g爜. 榪欎簺浠g爜鍦ㄨ繖涓猟ll閲岄兘鏄竴鑷寸殑. 浣嗘槸鍒繕浜?浣犳病鏈夊啓鏋愭瀯鍑芥暟...... 濡傛灉榪欎釜鏃跺? 鍒漢鍦ㄥ闈㈠0鏄庝簡涓涓繖鏍風(fēng)殑綾?鐒跺悗璋冪敤榪欎釜綾葷殑鍑芥暟鎿嶄綔浜嗚繖涓獀ector( 褰撶劧浣跨敤鑰呭茍涓嶇煡閬撲粈涔堟椂鍊欐搷浣滀簡vector) . 瀹冪敤瀹屼簡榪欎釜綾諱互鍚? 綾昏閲婃斁鎺変簡. 緙栬瘧鍣ㄥ緢璐熻矗鐨勪負(fù)瀹冪敓鎴愪簡涓浠芥瀽鏋勫嚱鏁扮殑浠g爜...... 鍚ソ浜?榪欎喚浠g爜騫朵笉鏄湪 dll閲?... . 浜嬫儏浜庢槸鍙堝拰1>閲岀殑涓鏍蜂簡.... crash ......(鍙兘榪樹細(xì)浼撮殢鐫榪瘋尗.....)
瀵圭瓥: 璁板緱dll閲屾瘡涓被,鍝曞紡鏋勯犳瀽鏋勫嚱鏁板紡絀虹殑. 涔熻鍐欏埌cpp閲屽幓. 浠涔堥兘涓嶅啓涔熷紡寰堢碂緋曠殑.....鍚屾椂,鏇磋鎶婁換浣曞拰鍐呭瓨鎿嶄綔鏈夊叧鐨勫嚱鏁板啓鍒?.cpp 閲?..
浠ヤ笂涓や釜闂浼間箮閮芥槸姣旇緝瀹規(guī)槗鐨?----鍙鎶婁唬鐮侀兘鍐欏埌cpp閲屽幓, 涓嶈鐢╯tl瀹瑰櫒浼犳潵浼犲幓灝卞彲浠ヤ簡.
閭d箞絎笁涓棶棰樺氨瑕侀夯鐑︾殑澶?
濡傛灉浣犺嚜宸卞啓浜嗕竴涓ā鏉? 榪欎釜妯℃澘鐢ㄤ簡stl 瀹瑰櫒..........
榪欎釜鏃跺欎綘璇ユ庝箞鍔炲憿?
銆鏄劇劧浣犳棤娉曟妸鍜屽唴瀛樺垎閰嶇浉鍏崇殑鍑芥暟閮藉啓鍒?cpp閲屽幓 . template鐨勪唬鐮侀兘蹇呴』鏀懼埌header file閲?....
瀵圭瓥: 瑙e喅榪欎釜闂鐨勫熀鏈仛娉曟槸鍋氫竴涓猻tl 鍐呭瓨鍒嗛厤鍣?, 寮哄埗鎶婅繖涓ā鏉塊噷鍜屽唴瀛樺垎閰嶇浉鍏崇殑鏀懼埌涓涓?cpp閲屽幓.榪欎釜鏃跺欑紪璇戣繖涓猚pp灝變細(xì)鎶婂唴瀛樺垎閰嶄唬鐮佸浐瀹氬湪涓涓湴鏂? 瑕佷箞鏄痙ll. 瑕佷箞鏄痚xe閲?..
]]> 青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品