锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品午夜电影,欧美成人蜜桃,欧美国产欧美亚洲国产日韩mv天天看完整 http://www.shnenglu.com/CrazyDev/articles/115699.htmlCrazyDevCrazyDevTue, 18 May 2010 09:20:00 GMThttp://www.shnenglu.com/CrazyDev/articles/115699.htmlhttp://www.shnenglu.com/CrazyDev/comments/115699.htmlhttp://www.shnenglu.com/CrazyDev/articles/115699.html#Feedback0http://www.shnenglu.com/CrazyDev/comments/commentRss/115699.htmlhttp://www.shnenglu.com/CrazyDev/services/trackbacks/115699.htmlstatic_cast銆?strong>dynamic_cast銆?strong>reinterpret_cast銆佸拰const_cast銆備笅闈㈠瀹冧滑涓涓榪涜浠嬬粛銆?br>
static_cast

鐢ㄦ硶錛?strong>static_cast < type-id > ( expression )

璇ヨ繍綆楃鎶奺xpression杞崲涓簍ype-id綾誨瀷錛屼絾娌℃湁榪愯鏃剁被鍨嬫鏌ユ潵淇濊瘉杞崲鐨勫畨鍏ㄦс傚畠涓昏鏈夊涓嬪嚑縐嶇敤娉曪細
  • 鐢ㄤ簬綾誨眰嬈$粨鏋勪腑鍩虹被鍜屽瓙綾諱箣闂存寚閽堟垨寮曠敤鐨勮漿鎹€傝繘琛屼笂琛岃漿鎹紙鎶婂瓙綾葷殑鎸囬拡鎴栧紩鐢ㄨ漿鎹㈡垚鍩虹被琛ㄧず錛夋槸瀹夊叏鐨勶紱榪涜涓嬭杞崲錛堟妸鍩虹被鎸囬拡鎴栧紩鐢ㄨ漿鎹㈡垚瀛愮被琛ㄧず錛夋椂錛岀敱浜庢病鏈夊姩鎬佺被鍨嬫鏌ワ紝鎵浠ユ槸涓嶅畨鍏ㄧ殑銆?
  • 鐢ㄤ簬鍩烘湰鏁版嵁綾誨瀷涔嬮棿鐨勮漿鎹紝濡傛妸int杞崲鎴恈har錛屾妸int杞崲鎴恊num銆傝繖縐嶈漿鎹㈢殑瀹夊叏鎬т篃瑕佸紑鍙戜漢鍛樻潵淇濊瘉銆?
  • 鎶婄┖鎸囬拡杞崲鎴愮洰鏍囩被鍨嬬殑絀烘寚閽堛?
  • 鎶婁換浣曠被鍨嬬殑琛ㄨ揪寮忚漿鎹㈡垚void綾誨瀷銆?/li>
娉ㄦ剰錛歴tatic_cast涓嶈兘杞崲鎺塭xpression鐨刢onst銆乿olitale銆佹垨鑰卂_unaligned灞炴с?br>
dynamic_cast

鐢ㄦ硶錛?strong>dynamic_cast < type-id > ( expression )

璇ヨ繍綆楃鎶奺xpression杞崲鎴恡ype-id綾誨瀷鐨勫璞°俆ype-id蹇呴』鏄被鐨勬寚閽堛佺被鐨勫紩鐢ㄦ垨鑰卾oid *錛涘鏋渢ype-id鏄被鎸囬拡綾誨瀷錛岄偅涔坋xpression涔熷繀欏繪槸涓涓寚閽堬紝濡傛灉type-id鏄竴涓紩鐢紝閭d箞expression涔熷繀欏繪槸涓涓紩鐢ㄣ?br>
dynamic_cast涓昏鐢ㄤ簬綾誨眰嬈¢棿鐨勪笂琛岃漿鎹㈠拰涓嬭杞崲錛岃繕鍙互鐢ㄤ簬綾諱箣闂寸殑浜ゅ弶杞崲銆?br>
鍦ㄧ被灞傛闂磋繘琛屼笂琛岃漿鎹㈡椂錛宒ynamic_cast鍜宻tatic_cast鐨勬晥鏋滄槸涓鏍風殑錛涘湪榪涜涓嬭杞崲鏃訛紝dynamic_cast鍏鋒湁綾誨瀷媯鏌ョ殑鍔熻兘錛屾瘮static_cast鏇村畨鍏ㄣ?br>
 class B{

public:

 int m_iNum;

 virtual void foo();

};

class D:public B{

 public:

 char *m_szName[100];

};

 

void func(B *pb){

 D *pd1 = static_cast<D *>(pb);

 D *pd2 = dynamic_cast<D *>(pb);

}

鍦ㄤ笂闈㈢殑浠g爜孌典腑錛屽鏋減b鎸囧悜涓涓狣綾誨瀷鐨勫璞★紝pd1鍜宲d2鏄竴鏍風殑錛屽茍涓斿榪欎袱涓寚閽堟墽琛孌綾誨瀷鐨勪換浣曟搷浣滈兘鏄畨鍏ㄧ殑錛涗絾鏄紝濡傛灉pb鎸囧悜鐨勬槸涓涓狟綾誨瀷鐨勫璞★紝閭d箞pd1灝嗘槸涓涓寚鍚戣瀵硅薄鐨勬寚閽堬紝瀵瑰畠榪涜D綾誨瀷鐨勬搷浣滃皢鏄笉瀹夊叏鐨勶紙濡傝闂甿_szName錛夛紝鑰宲d2灝嗘槸涓涓┖鎸囬拡銆傚彟澶栬娉ㄦ剰錛欱瑕佹湁铏氬嚱鏁幫紝鍚﹀垯浼氱紪璇戝嚭閿欙紱static_cast鍒欐病鏈夎繖涓檺鍒躲傝繖鏄敱浜庤繍琛屾椂綾誨瀷媯鏌ラ渶瑕佽繍琛屾椂綾誨瀷淇℃伅錛岃岃繖涓俊鎭瓨鍌ㄥ湪綾葷殑铏氬嚱鏁拌〃錛堝叧浜庤櫄鍑芥暟琛ㄧ殑姒傚康錛岃緇嗗彲瑙?lt;Inside c++ object model>錛変腑錛屽彧鏈夊畾涔変簡铏氬嚱鏁扮殑綾繪墠鏈夎櫄鍑芥暟琛紝娌℃湁瀹氫箟铏氬嚱鏁扮殑綾繪槸娌℃湁铏氬嚱鏁拌〃鐨勩?br>
鍙﹀錛?strong>dynamic_cast榪樻敮鎸佷氦鍙夎漿鎹紙cross cast錛夈傚涓嬩唬鐮佹墍紺恒?br>
class A{

public:

 int m_iNum;

 virtual void f(){}

};

 

class B:public A{

};

 

class D:public A{

};

 

void foo(){

 B *pb = new B;

 pb->m_iNum = 100;

 D *pd1 = static_cast<D *>(pb); //copile error

 D *pd2 = dynamic_cast<D *>(pb); //pd2 is NULL

 delete pb;

}

鍦ㄥ嚱鏁癴oo涓紝浣跨敤static_cast榪涜杞崲鏄笉琚厑璁哥殑錛屽皢鍦ㄧ紪璇戞椂鍑洪敊錛涜屼嬌鐢?dynamic_cast鐨勮漿鎹㈠垯鏄厑璁哥殑錛岀粨鏋滄槸絀烘寚閽堛?br>
reinpreter_cast

鐢ㄦ硶錛?strong>reinpreter_cast<type-id> (expression)

type-id蹇呴』鏄竴涓寚閽堛佸紩鐢ㄣ佺畻鏈被鍨嬨佸嚱鏁版寚閽堟垨鑰呮垚鍛樻寚閽堛傚畠鍙互鎶婁竴涓寚閽堣漿鎹㈡垚涓涓暣鏁幫紝涔熷彲浠ユ妸涓涓暣鏁拌漿鎹㈡垚涓涓寚閽堬紙鍏堟妸涓涓寚閽堣漿鎹㈡垚涓涓暣鏁幫紝鍦ㄦ妸璇ユ暣鏁拌漿鎹㈡垚鍘熺被鍨嬬殑鎸囬拡錛岃繕鍙互寰楀埌鍘熷厛鐨勬寚閽堝鹼級銆?br>
璇ヨ繍綆楃鐨勭敤娉曟瘮杈冨銆?br>
const_cast

鐢ㄦ硶錛?strong>const_cast<type_id> (expression)

璇ヨ繍綆楃鐢ㄦ潵淇敼綾誨瀷鐨刢onst鎴杤olatile灞炴с傞櫎浜哻onst 鎴杤olatile淇グ涔嬪錛?type_id鍜宔xpression鐨勭被鍨嬫槸涓鏍風殑銆?br>
甯擱噺鎸囬拡琚漿鍖栨垚闈炲父閲忔寚閽堬紝騫朵笖浠嶇劧鎸囧悜鍘熸潵鐨勫璞★紱甯擱噺寮曠敤琚漿鎹㈡垚闈炲父閲忓紩鐢紝騫朵笖浠嶇劧鎸囧悜鍘熸潵鐨勫璞★紱甯擱噺瀵硅薄琚漿鎹㈡垚闈炲父閲忓璞°?br>
Voiatile鍜宑onst綾昏瘯銆備婦濡備笅涓渚嬶細
class B{

 public:

 int m_iNum;

}

void foo(){

const B b1;

b1.m_iNum = 100; //comile error

B b2 = const_cast<B>(b1);

b2. m_iNum = 200; //fine
 }

涓婇潰鐨勪唬鐮佺紪璇戞椂浼氭姤閿欙紝鍥犱負b1鏄竴涓父閲忓璞★紝涓嶈兘瀵瑰畠榪涜鏀瑰彉錛涗嬌鐢╟onst_cast鎶婂畠杞崲鎴愪竴涓父閲忓璞★紝灝卞彲浠ュ瀹冪殑鏁版嵁鎴愬憳浠繪剰鏀瑰彉銆傛敞鎰忥細b1鍜宐2鏄袱涓笉鍚岀殑瀵硅薄銆?

CrazyDev 2010-05-18 17:20 鍙戣〃璇勮
]]>
Bjarne Stroustrup鐨凢AQ錛欳++鐨勯鏍間笌鎶宸?/title><link>http://www.shnenglu.com/CrazyDev/articles/115698.html</link><dc:creator>CrazyDev</dc:creator><author>CrazyDev</author><pubDate>Tue, 18 May 2010 09:12:00 GMT</pubDate><guid>http://www.shnenglu.com/CrazyDev/articles/115698.html</guid><wfw:comment>http://www.shnenglu.com/CrazyDev/comments/115698.html</wfw:comment><comments>http://www.shnenglu.com/CrazyDev/articles/115698.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/CrazyDev/comments/commentRss/115698.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/CrazyDev/services/trackbacks/115698.html</trackback:ping><description><![CDATA[緲昏瘧錛氬乏杞諱警<br><br>錛堣瘧娉細鏈枃鐨勭炕璇戠浉褰撹壈鑻︺侭jarne Stroustrup涓嶆劎鏄垱绔婥++璇█鐨勪竴浠eぇ甯堬紝涓嶄絾鎬濇兂鍗氬ぇ綺炬繁錛岃屼笖鍦ㄩ仯璇嶉犲彞涓婏紝涔熼潪甯哥簿寰繁濂ャ傛湁寰堝鍦版柟錛岃瘧鑰呭弽澶嶆枱閰岋紝閮戒笉鑳藉彇寰楃悊鎯崇殑鏁堟灉錛屽彧鑳藉敖鍔涜屼負銆?br><br>Html鏍煎紡鐨勬枃妗h璇戣呬富欏碉細<a title=http://www.wushuang.net target=_blank>http://www.wushuang.net</a><br><br>濡傛灉浣犲榪欎釜緲昏瘧紼挎湁浠諱綍鎰忚鍜屽緩璁紝璇峰彂淇$粰璇戣咃細onekey@163.com銆?br><br>鍘熸枃鐨勫湴鍧涓猴細<a title=http://www.research.att.com/~bs/bs_faq2.html錛?href="http://www.research.att.com/~bs/bs_faq2.html錛? target=_blank>http://www.research.att.com/~bs/bs_faq2.html錛?/a><br><br>錛圔jarne Stroustrup鍗氬+錛?950騫村嚭鐢熶簬涓歸害錛屽厛鍚庢瘯涓氫簬涓歸害闃塊瞾鏂ぇ瀛﹀拰鑻卞浗鍓戞將澶у錛孉T&T澶ц妯$▼搴忚璁$爺絀墮儴闂ㄨ礋璐d漢錛孉T&T 璐濆皵瀹為獙瀹ゅ拰ACM鎴愬憳銆?979騫達紝B. S寮濮嬪紑鍙戜竴縐嶈璦錛屽綋鏃剁О涓?C with Class"錛屽悗鏉ユ紨鍖栦負C++銆?998騫達紝ANSI/ISO C++鏍囧噯寤虹珛錛屽悓騫達紝B. S鎺ㄥ嚭鍏剁粡鍏歌憲浣淭he C++ Programming Language鐨勭涓夌増銆傦級<br><br>榪欐槸涓浜涗漢浠粡甯稿悜鎴戦棶璧風殑鏈夊叧C++鐨勯鏍間笌鎶宸х殑闂銆傚鏋滀綘鑳芥彁鍑烘洿濂界殑闂錛屾垨鑰呭榪欎簺絳旀鏈夋墍寤鴻錛岃鍔″繀鍙慐mail緇欐垜(<a href="mailto:bs@research.att.com">bs@research.att.com</a>)銆傝璁頒綇錛屾垜涓嶈兘鎶婂叏閮ㄧ殑鏃墮棿閮借姳鍦ㄦ洿鏂版垜鐨勪富欏典笂闈€?br><br>鏇村鐨勯棶棰樿鍙傝鎴戠殑general FAQ銆?br><br>鍏充簬鏈鍜屾蹇碉紝璇峰弬瑙佹垜鐨凜++鏈琛紙C++ glossary.錛夈?br><br>璇鋒敞鎰忥紝榪欎粎浠呮槸涓涓父瑙侀棶棰樹笌瑙g瓟鐨勫垪琛ㄣ傚畠涓嶈兘浠f浛涓鏈紭縐鏁欑涔︿腑閭d簺緇忚繃綺懼績鎸戦夌殑鑼冧緥涓庤В閲娿傚畠涔熶笉鑳借薄涓鏈弬鑰冩墜鍐屾垨璇█鏍囧噯閭f牱錛屾彁渚涜緇嗗拰鍑嗙‘鐨勮鏄庛傛湁鍏矯++鐨勮璁$殑闂錛岃鍙傝銆奀++璇█鐨勮璁″拰婕斿彉銆嬶紙The Design and Evolution of C++錛夈傚叧浜嶤++璇█涓庢爣鍑嗗簱鐨勪嬌鐢紝璇峰弬瑙併奀++紼嬪簭璁捐璇█銆嬶紙The C++ Programming Language錛夈?br><br><br>鐩綍錛?br><br>鎴戝浣曞啓榪欎釜闈炲父綆鍗曠殑紼嬪簭錛?br><br>涓轟粈涔堢紪璇戣鑺辮繖涔堥暱鐨勬椂闂達紵<br><br>涓轟粈涔堜竴涓┖綾葷殑澶у皬涓嶄負0錛?br><br>鎴戝繀欏誨湪綾誨0鏄庡璧嬩簣鏁版嵁鍚楋紵<br><br>涓轟粈涔堟垚鍛樺嚱鏁伴粯璁や笉鏄痸irtual鐨勶紵<br><br>涓轟粈涔堟瀽鏋勫嚱鏁伴粯璁や笉鏄痸irtual鐨勶紵<br><br>涓轟粈涔堜笉鑳芥湁铏氭嫙鏋勯犲嚱鏁幫紵<br><br>涓轟粈涔堥噸杞藉湪緇ф壙綾諱腑涓嶅伐浣滐紵<br><br>鎴戣兘澶熷湪鏋勯犲嚱鏁頒腑璋冪敤涓涓櫄鎷熷嚱鏁板悧錛?br><br>鏈夋病鏈?#8220;鎸囧畾浣嶇疆鍒犻櫎”(placement delete)錛?br><br>鎴戣兘闃叉鍒漢緇ф壙鎴戣嚜宸辯殑綾誨悧錛?br><br>涓轟粈涔堜笉鑳戒負妯℃澘鍙傛暟瀹氫箟綰︽潫錛坈onstraints錛夛紵<br><br>鏃㈢劧宸茬粡鏈変簡浼樼鐨剄sort()鍑芥暟錛屼負浠涔堣繕闇瑕佷竴涓猻ort()錛?br><br>浠涔堟槸鍑芥暟瀵硅薄錛坒unction object錛夛紵<br><br>鎴戝簲璇ュ浣曞浠樺唴瀛樻硠婕忥紵<br><br>鎴戜負浠涔堝湪鎹曡幏涓涓紓甯鎬箣鍚庡氨涓嶈兘緇х畫錛?br><br>涓轟粈涔圕++涓病鏈夌浉褰撲簬realloc()鐨勫嚱鏁幫紵<br><br>濡備綍浣跨敤寮傚父錛?br><br>鎬庢牱浠庤緭鍏ヤ腑璇誨彇涓涓瓧絎︿覆錛?br><br>涓轟粈涔圕++涓嶆彁渚?#8220;finally”鐨勬瀯閫狅紵<br><br>浠涔堟槸鑷姩鎸囬拡錛坅uto_ptr錛夛紝涓轟粈涔堟病鏈夎嚜鍔ㄦ暟緇勶紙auto_array錛夛紵<br><br>鍙互娣峰悎浣跨敤C椋庢牸涓嶤++椋庢牸鐨勫唴瀛樺垎媧句笌閲嶆柊鍒嗛厤鍚楋紵<br><br>鎴戜負浠涔堝繀欏諱嬌鐢ㄤ竴涓犲瀷鏉ヨ漿鎹?void錛?br><br>鎴戝浣曞畾涔変竴涓被鍐呴儴錛坕n-class錛夌殑甯擱噺錛?br><br>涓轟粈涔坉elete涓嶄細灝嗘搷浣滄暟緗?錛?br><br>鎴戣兘澶熷啓“void main()”鍚楋紵<br><br>涓轟粈涔堟垜涓嶈兘閲嶈澆鐐圭鍙鳳紝::錛宻izeof錛岀瓑絳夛紵<br><br>鎬庢牱灝嗕竴涓暣鍨嬪艱漿鎹負涓涓瓧絎︿覆錛?br><br>“int* p”姝g‘榪樻槸“int *p”姝g‘錛?br><br>瀵逛簬鎴戠殑浠g爜錛屽摢涓縐嶅竷灞椋庢牸錛坙ayout style錛夋槸鏈濂界殑錛?br><br>鎴戝簲璇ュ皢“const”鏀懼湪綾誨瀷涔嬪墠榪樻槸涔嬪悗錛?br><br>浣跨敤瀹忔湁浠涔堥棶棰橈紵<br><br>鎴戝浣曞啓榪欎釜闈炲父綆鍗曠殑紼嬪簭錛?br><br><br>鐗瑰埆鏄湪涓涓鏈熺殑寮濮嬶紝鎴戝父甯告敹鍒拌澶氬叧浜庣紪鍐欎竴涓潪甯哥畝鍗曠殑紼嬪簭鐨勮闂傝繖涓棶棰樻湁涓涓緢鍏蜂唬琛ㄦх殑瑙e喅鏂規硶錛岄偅灝辨槸錛堝湪浣犵殑紼嬪簭涓級璇誨叆鍑犱釜鏁板瓧錛屽瀹冧滑鍋氫竴浜涘鐞嗭紝鍐嶆妸緇撴灉杈撳嚭銆備笅闈㈡槸涓涓繖鏍峰仛鐨勪緥瀛愶細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>#include<iostream><br><br>#include<vector><br><br>#include<algorithm><br><br>usingnamespace std;<br><br>intmain()<br><br>{<br>vector<double>v;<br><br>doubled;<br><br>while(cin>>d)v.push_back(d); // 璇誨叆鍏冪礌<br><br>if(!cin.eof()) { // 媯鏌ヨ緭鍏ユ槸鍚﹀嚭閿?br><br>cerr<< "format error\n";<br><br>return1; // 榪斿洖涓涓敊璇?br><br>}<br><br>cout<< "read " << v.size() << " elements\n";<br><br>reverse(v.begin(),v.end());<br><br>cout<< "elements in reverse order:\n";<br><br>for(int i = 0; i<v.size(); ++i) cout << v[i] << '\n';<br><br>return0; // 鎴愬姛榪斿洖<br>}</div> <br>瀵硅繖孌電▼搴忕殑瑙傚療錛?br>榪欐槸涓孌墊爣鍑嗙殑ISO C++紼嬪簭錛屼嬌鐢ㄤ簡鏍囧噯搴?standard library)銆傛爣鍑嗗簱宸ュ叿鍦ㄥ懡鍚嶇┖闂磗td涓0鏄庯紝灝佽鍦ㄦ病鏈?h鍚庣紑鐨勫ご鏂囦歡涓?br><br>濡傛灉浣犺鍦╓indows涓嬬紪璇戝畠錛屼綘闇瑕佸皢瀹冪紪璇戞垚涓涓?#8220;鎺у埗鍙扮▼搴?#8221;錛坈onsoleapplication錛夈傝寰楀皢婧愭枃浠跺姞涓?cpp鍚庣紑錛屽惁鍒欑紪璇戝櫒鍙兘浼氫互涓哄畠鏄竴孌礐浠g爜鑰屼笉鏄疌++銆?br><br>鏄殑錛宮ain()鍑芥暟榪斿洖涓涓猧nt鍊箋?br><br>璇誨埌涓涓爣鍑嗙殑鍚戦噺(vector)涓紝鍙互閬垮厤鍦ㄩ殢鎰忕‘瀹氬ぇ灝忕殑緙撳啿涓孩鍑虹殑閿欒銆傝鍒頒竴涓暟緇?array)涓紝鑰屼笉浜х敓“綆鍗曢敊璇?#8221;(silly error)錛岃繖宸茬粡瓚呭嚭浜嗕竴涓柊鎵嬬殑鑳藉姏鈥斺斿鏋滀綘鍋氬埌浜嗭紝閭d綘宸茬粡涓嶆槸涓涓柊鎵嬩簡銆傚鏋滀綘瀵規琛ㄧず鎬鐤戯紝鎴戝緩璁綘闃呰鎴戠殑鏂囩珷“灝嗘爣鍑咰++浣滀負涓縐嶆柊鐨勮璦鏉ュ涔?#8221;("Learning Standard C++as a New Language")錛屼綘鍙互鍦ㄦ湰浜鴻憲浣滃垪琛?my publications list)涓笅杞藉埌瀹冦?br><br>!cin.eof()鏄嫻佺殑鏍煎紡鐨勬鏌ャ備簨瀹炰笂錛屽畠媯鏌ュ驚鐜槸鍚︾粓緇撲簬鍙戠幇涓涓猠nd-of-file(濡傛灉涓嶆槸榪欐牱錛岄偅涔堟剰鍛崇潃杈撳叆娌℃湁鎸夌収緇欏畾鐨勬牸寮?銆傛洿澶氱殑璇存槑錛岃鍙傝浣犵殑C++鏁欑涔︿腑鐨?#8220;嫻佺姸鎬?#8221;(stream state)閮ㄥ垎銆?br><br>vector鐭ラ亾瀹冭嚜宸辯殑澶у皬錛屽洜姝ゆ垜涓嶉渶瑕佽綆楀厓绱犵殑鏁伴噺銆?br><br>榪欐紼嬪簭娌℃湁鍖呭惈鏄懼紡鐨勫唴瀛樼鐞嗐俈ector緇存姢涓涓唴瀛樹腑鐨勬爤錛屼互瀛樻斁瀹冪殑鍏冪礌銆傚綋涓涓獀ector闇瑕佹洿澶氱殑鍐呭瓨鏃訛紝瀹冧細鍒嗛厤涓浜涳紱褰撳畠涓嶅啀鐢熷瓨鏃訛紝瀹冧細閲婃斁鍐呭瓨銆備簬鏄紝浣跨敤鑰呬笉闇瑕佸啀鍏沖績vector涓厓绱犵殑鍐呭瓨鍒嗛厤鍜岄噴鏀鵑棶棰樸?br><br>紼嬪簭鍦ㄩ亣鍒拌緭鍏ヤ竴涓?#8220;end-of-file”鏃剁粨鏉熴傚鏋滀綘鍦║NIX騫沖彴涓嬭繍琛屽畠錛?#8220;end-of-file”絳変簬閿洏涓婄殑Ctrl+D銆傚鏋滀綘鍦╓indows騫沖彴涓嬶紝閭d箞鐢變簬涓涓狟UG瀹冩棤娉曡鯨鍒?#8220;end-of-file”瀛楃錛屼綘鍙兘鍊懼悜浜庝嬌鐢ㄤ笅闈㈣繖涓◢紼嶅鏉備簺鐨勭増鏈紝瀹冧嬌鐢ㄤ竴涓瘝“end”鏉ヨ〃紺鴻緭鍏ュ凡緇忕粨鏉熴?br></div> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>#include<iostream><br><br>#include<vector><br><br>#include<algorithm><br><br>#include<string><br><br>usingnamespace std;<br><br>intmain()<br><br>{<br>vector<double>v;<br><br>doubled;<br><br>while(cin>>d)v.push_back(d); // 璇誨叆涓涓厓绱?br><br>if(!cin.eof()) { // 媯鏌ヨ緭鍏ユ槸鍚﹀け璐?br><br>cin.clear(); //娓呴櫎閿欒鐘舵?br><br>strings;<br><br>cin>> s; // 鏌ユ壘緇撴潫瀛楃<br><br>if(s != "end") {<br><br>cerr<< "format error\n";<br><br>return1; // 榪斿洖閿欒<br><br>}<br><br>}<br><br>cout<< "read " << v.size() << " elements\n";<br><br>reverse(v.begin(),v.end());<br><br>cout<< "elements in reverse order:\n";<br><br>for(int i = 0; i<v.size(); ++i) cout << v[i] << '\n';<br><br>return0; // 鎴愬姛榪斿洖<br>}<br><br>鏇村鐨勫叧浜庝嬌鐢ㄦ爣鍑嗗簱灝嗕簨鎯呯畝鍖栫殑渚嬪瓙錛岃鍙傝銆奀++紼嬪簭璁捐璇█銆嬩腑鐨?#8220;婕父鏍囧噯搴?#8221;("Tour of the StandardLibrary")涓绔犮?br>涓轟粈涔堢紪璇戣鑺辮繖涔堥暱鐨勬椂闂達紵<br><br>浣犵殑緙栬瘧鍣ㄥ彲鑳芥湁闂銆備篃璁稿畠澶佷簡錛屼篃璁鎬綘瀹夎瀹冪殑鏃跺欏嚭浜嗛敊錛屼篃璁鎬綘鐢ㄧ殑璁$畻鏈哄凡緇忔槸涓彜钁c傚湪璇稿姝ょ被鐨勯棶棰樹笂錛屾垜鏃犳硶甯姪浣犮?br><br>浣嗘槸錛岃繖涔熸槸寰堝彲鑳界殑錛氫綘瑕佺紪璇戠殑紼嬪簭璁捐寰楅潪甯哥碂緋曪紝浠ヨ嚦浜庣紪璇戝櫒涓嶅緱涓嶆鏌ユ暟浠ョ櫨璁$殑澶存枃浠跺拰鏁頒竾琛屼唬鐮併傜悊璁轟笂鏉ヨ錛岃繖鏄彲浠ラ伩鍏嶇殑銆傚鏋滆繖鏄綘璐拱鐨勫簱鐨勮璁¢棶棰橈紝浣犲瀹冩棤璁″彲鏂斤紙闄や簡鎹竴涓洿濂界殑搴擄級錛屼絾浣犲彲浠ュ皢浣犺嚜宸辯殑浠g爜緇勭粐寰楁洿濂戒竴浜涳紝浠ユ眰寰楀皢淇敼浠g爜鍚庣殑閲嶆柊緙栬瘧宸ヤ綔闄嶅埌鏈灝戙傝繖鏍風殑璁捐浼氭洿濂斤紝鏇存湁鍙淮鎶ゆэ紝鍥犱負瀹冧滑灞曠ず浜嗘洿濂界殑姒傚康涓婄殑鍒嗙銆?br><br>鐪嬬湅榪欎釜鍏稿瀷鐨勯潰鍚戝璞$殑紼嬪簭渚嬪瓙錛?/div> </div> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>classShape {<br><br>public: //浣跨敤Shapes鐨勭敤鎴風殑鎺ュ彛<br><br>virtualvoid draw() const;<br><br>virtualvoid rotate(int degrees);<br><br>//...<br><br>protected: //common data (for implementers of Shapes)<br><br>Pointcenter;<br><br>Colorcol;<br><br>//...<br><br>};<br><br>classCircle : public Shape {<br><br>public: <br><br>voiddraw() const;<br><br>voidrotate(int) { }<br><br>//...<br><br>protected:<br><br>intradius;<br><br>//...<br><br>};<br><br>classTriangle : public Shape {<br><br>public: <br><br>voiddraw() const;<br><br>voidrotate(int);<br><br>//...<br><br>protected:<br><br>Pointa, b, c;<br><br>//...<br><br>}; </div> <br>璁捐鎬濇兂鏄紝鐢ㄦ埛閫氳繃Shape鐨刾ublic鎺ュ彛鏉ユ搷綰靛畠浠紝鑰屾淳鐢熺被錛堜緥濡侰ircle鍜孴riangle錛夌殑瀹炵幇閮ㄥ垎鍒欏叡浜敱protected鎴愬憳琛ㄧ幇鐨勯偅閮ㄥ垎瀹炵幇錛坕mplementation錛夈?br><br>榪欎笉鏄竴浠跺鏄撶殑浜嬫儏錛氱‘瀹氬摢浜涘疄鐜伴儴鍒嗘槸瀵規墍鏈夌殑媧劇敓綾婚兘鏈夌敤鐨勶紝騫跺皢涔嬪叡浜嚭鏉ャ傚洜姝わ紝涓巔ublic鎺ュ彛鐩告瘮錛宲rotected鎴愬憳寰寰瑕佸仛澶氬緱澶氱殑鏀瑰姩銆備婦渚嬫潵璇達紝铏界劧鐞嗚涓?#8220;涓績”(center)瀵規墍鏈夌殑鍥懼艦閮芥槸涓涓湁鏁堢殑姒傚康錛屼絾褰撲綘瑕佺淮鎶や竴涓笁瑙掑艦鐨?#8220;涓績”鐨勬椂鍊欙紝鏄竴浠墮潪甯擱夯鐑︾殑浜嬫儏鈥斺斿浜庝笁瑙掑艦錛屽綋涓斾粎褰撳畠紜疄琚渶瑕佺殑鏃跺欙紝璁$畻榪欎釜涓績鎵嶆槸鏈夋剰涔夌殑銆?br><br>protected鎴愬憳寰堝彲鑳借渚濊禆浜庡疄鐜伴儴鍒嗙殑緇嗚妭錛岃孲hape鐨勭敤鎴鳳紙璇戞敞錛歶ser姝ゅ璇戜負鐢ㄦ埛錛屾寚浣跨敤Shape綾葷殑浠g爜錛屼笅鍚岋級鍗翠笉瑙佸緱蹇呴』渚濊禆瀹冧滑銆備婦渚嬫潵璇達紝寰堝錛堝ぇ澶氭暟錛燂級浣跨敤Shape鐨勪唬鐮佸湪閫昏緫涓婃槸涓?#8220;棰滆壊”鏃犲叧鐨勶紝浣嗘槸鐢變簬Shape涓?#8220;棰滆壊”榪欎釜瀹氫箟鐨勫瓨鍦紝鍗村彲鑳介渶瑕佷竴鍫嗗鏉傜殑澶存枃浠訛紝鏉ョ粨鍚堟搷浣滅郴緇熺殑棰滆壊姒傚康銆?br><br>褰損rotected閮ㄥ垎鍙戠敓浜嗘敼鍙樻椂錛屼嬌鐢⊿hape鐨勪唬鐮佸繀欏婚噸鏂扮紪璇戔斺斿嵆浣垮彧鏈夋淳鐢熺被鐨勫疄鐜伴儴鍒嗘墠鑳藉璁塊棶protected鎴愬憳銆?br><br>浜庢槸錛屽熀綾諱腑鐨?#8220;瀹炵幇鐩稿叧鐨勪俊鎭?#8221;(informationhelpful to implementers)瀵圭敤鎴鋒潵璇村彉鎴愪簡璞℃帴鍙d竴鏍鋒晱鎰熺殑涓滆タ錛屽畠鐨勫瓨鍦ㄥ鑷翠簡瀹炵幇閮ㄥ垎鐨勪笉紼沖畾錛岀敤鎴蜂唬鐮佺殑鏃犺皳鐨勯噸緙栬瘧錛堝綋瀹炵幇閮ㄥ垎鍙戠敓鏀瑰彉鏃訛級錛屼互鍙婂皢澶存枃浠舵棤鑺傚埗鍦板寘鍚繘鐢ㄦ埛浠g爜涓紙鍥犱負“瀹炵幇鐩稿叧鐨勪俊鎭?#8221;闇瑕佸畠浠級銆傛湁鏃惰繖琚О涓?#8220;鑴嗗急鐨勫熀綾婚棶棰?#8221;(brittle baseclass problem)銆?br><br>涓涓緢鏄庢樉鐨勮В鍐蟲柟妗堝氨鏄紝蹇界暐鍩虹被涓偅浜涜薄鎺ュ彛涓鏍瘋浣跨敤鐨?#8220;瀹炵幇鐩稿叧鐨勪俊鎭?#8221;銆傛崲鍙ヨ瘽璇達紝浣跨敤鎺ュ彛錛岀函綺圭殑鎺ュ彛銆備篃灝辨槸璇達紝鐢ㄦ娊璞″熀綾葷殑鏂瑰紡鏉ヨ〃紺烘帴鍙o細</div> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>classShape {<br><br>public: //浣跨敤Shapes鐨勭敤鎴風殑鎺ュ彛<br><br>virtualvoid draw() const = 0;<br><br>virtualvoid rotate(int degrees) = 0;<br><br>virtualPoint center() const = 0;<br><br>//...<br><br>//娌℃湁鏁版嵁<br><br>};<br><br><br>classCircle : public Shape {<br><br>public: <br><br>voiddraw() const;<br><br>voidrotate(int) { }<br><br>Pointcenter() const { return center; }<br><br>//...<br><br>protected:<br><br>Pointcent;<br><br>Colorcol;<br><br>intradius;<br><br>//...<br><br>};<br><br><br>classTriangle : public Shape {<br><br>public: <br><br>voiddraw() const;<br><br>voidrotate(int);<br><br>Pointcenter() const;<br><br>//...<br><br>protected:<br><br>Colorcol;<br><br>Pointa, b, c;<br><br>//...<br><br>}; </div> <br>鐜板湪錛岀敤鎴蜂唬鐮佷笌媧劇敓綾葷殑瀹炵幇閮ㄥ垎鐨勫彉鍖栦箣闂寸殑鍏崇郴琚殧紱諱簡銆傛垜鏇劇粡瑙佽繃榪欑鎶鏈嬌寰楃紪璇戠殑鏃墮棿鍑忓皯浜嗗嚑涓暟閲忕駭銆?br><br><br>浣嗘槸錛屽鏋滅‘瀹炲瓨鍦ㄧ潃瀵規墍鏈夋淳鐢熺被錛堟垨浠呬粎瀵規煇浜涙淳鐢熺被錛夐兘鏈夌敤鐨勫叕鍏變俊鎭椂鎬庝箞鍔炲憿錛熷彲浠ョ畝鍗曟妸榪欎簺淇℃伅灝佽鎴愮被錛岀劧鍚庝粠瀹冩淳鐢熷嚭瀹炵幇閮ㄥ垎鐨勭被錛?br><br></div> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>classShape {<br><br>public: //浣跨敤Shapes鐨勭敤鎴風殑鎺ュ彛<br><br>virtualvoid draw() const = 0;<br><br>virtualvoid rotate(int degrees) = 0;<br><br>virtualPoint center() const = 0;<br><br>//...<br><br><br>//no data<br><br>};<br><br>structCommon {<br><br>Colorcol;<br><br>//...<br><br>};<br><br><br>classCircle : public Shape, protected Common {<br><br>public: <br><br>voiddraw() const;<br><br>voidrotate(int) { }<br><br>Pointcenter() const { return center; }<br><br>//...<br><br>protected:<br><br>Pointcent;<br><br>intradius;<br><br>};<br><br><br><br>classTriangle : public Shape, protected Common {<br><br>public: <br><br>voiddraw() const;<br><br>voidrotate(int);<br><br>Pointcenter() const;<br><br>//...<br><br>protected:<br><br>Pointa, b, c;<br><br>}; </div> </div> <br><br>涓轟粈涔堜竴涓┖綾葷殑澶у皬涓嶄負0錛?br><br><br><br>瑕佹竻妤氾紝涓や釜涓嶅悓鐨勫璞$殑鍦板潃涔熸槸涓嶅悓鐨勩傚熀浜庡悓鏍風殑鐞嗙敱錛宯ew鎬繪槸榪斿洖鎸囧悜涓嶅悓瀵硅薄鐨勬寚閽堛?br><br>鐪嬬湅錛?br><br><br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>classEmpty { };<br><br><br><br>voidf()<br><br>{<br><br>Emptya, b;<br><br>if(&a == &b) cout << "impossible: report error to compilersupplier";<br><br><br><br>Empty*p1 = new Empty;<br><br>Empty*p2 = new Empty;<br><br>if(p1 == p2) cout << "impossible: report error to compilersupplier";<br><br>} </div> </div> <br><br>鏈変竴鏉℃湁瓚g殑瑙勫垯錛氫竴涓┖鐨勫熀綾誨茍涓嶄竴瀹氭湁鍒嗛殧瀛楄妭銆? <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>structX : Empty {<br><br>inta;<br><br>//...<br><br>};<br><br><br><br>voidf(X* p)<br><br>{<br><br>void*p1 = p;<br><br>void*p2 = &p->a;<br><br>if(p1 == p2) cout << "nice: good optimizer";<br><br>}</div> </div> <br><br>榪欑浼樺寲鏄厑璁哥殑錛屽彲浠ヨ騫挎硾浣跨敤銆傚畠鍏佽紼嬪簭鍛樹嬌鐢ㄧ┖綾諱互琛ㄧ幇涓浜涚畝鍗曠殑姒傚康銆傜幇鍦ㄦ湁浜涚紪璇戝櫒鎻愪緵榪欑“絀哄熀綾諱紭鍖?#8221;(empty base classoptimization)銆?br><br><br><br>鎴戝繀欏誨湪綾誨0鏄庡璧嬩簣鏁版嵁鍚楋紵<br><br><br><br>涓嶅繀欏匯傚鏋滀竴涓帴鍙d笉闇瑕佹暟鎹椂錛屾棤欏誨湪浣滀負鎺ュ彛瀹氫箟鐨勭被涓祴浜堟暟鎹備唬涔嬩互鍦ㄦ淳鐢熺被涓粰鍑哄畠浠傚弬瑙?#8220;涓轟粈涔堢紪璇戣鑺辮繖涔堥暱鐨勬椂闂達紵”銆?br><br><br><br>鏈夋椂鍊欙紝浣犲繀欏誨湪涓涓被涓祴浜堟暟鎹傝冭檻涓涓嬪鏁扮被鐨勬儏鍐碉細<br><br><br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>template<classScalar> class complex {<br><br>public:<br><br>complex(): re(0), im(0) { }<br><br>complex(Scalarr) : re(r), im(0) { }<br><br>complex(Scalarr, Scalar i) : re(r), im(i) { }<br><br>//...<br><br><br><br>complex&operator+=(const complex& a)<br><br>{re+=a.re; im+=a.im; return *this; }<br><br>//...<br><br>private:<br><br>Scalarre, im;<br><br>};</div> </div> <br><br>璁捐榪欑綾誨瀷鐨勭洰鐨勬槸灝嗗畠褰撳仛涓涓唴寤猴紙built-in錛夌被鍨嬩竴鏍瘋浣跨敤銆傚湪澹版槑澶勮祴鍊兼槸蹇呴』鐨勶紝浠ヤ繚璇佸涓嬪彲鑳斤細寤虹珛鐪熸鐨勬湰鍦板璞★紙genuinely localobjects錛?姣斿閭d簺鍦ㄦ爤涓屼笉鏄湪鍫嗕腑鍒嗛厤鐨勫璞?錛屾垨鑰呬嬌鏌愪簺綆鍗曟搷浣滆閫傚綋鍦癷nline鍖栥傚浜庨偅浜涙敮鎸佸唴寤虹殑澶嶅悎綾誨瀷鐨勮璦鏉ヨ錛岃鑾峰緱瀹冧滑鎻愪緵鐨勬晥鐜囷紝鐪熸鐨勬湰鍦板璞″拰inline鍖栭兘鏄繀瑕佺殑銆?br><br><br><br>涓轟粈涔堟垚鍛樺嚱鏁伴粯璁や笉鏄痸irtual鐨勶紵<br><br><br><br>鍥犱負寰堝綾誨茍涓嶆槸琚璁′綔涓哄熀綾葷殑銆備緥濡傚鏁扮被銆?br><br><br><br>鑰屼笖錛屼竴涓寘鍚櫄鎷熷嚱鏁扮殑綾葷殑瀵硅薄錛岃鍗犵敤鏇村鐨勭┖闂翠互瀹炵幇铏氭嫙鍑芥暟璋冪敤鏈哄埗鈥斺斿線寰鏄瘡涓璞″崰鐢ㄤ竴涓瓧(word)銆傝繖涓澶栫殑瀛楁槸闈炲父鍙鐨勶紝鑰屼笖鍦ㄦ秹鍙婂拰鍏跺畠璇█鐨勬暟鎹殑鍏煎鎬ф椂錛屽彲鑳藉鑷撮夯鐑?渚嬪C鎴朏ortran璇█)銆?br><br><br><br>瑕佷簡瑙f洿澶氱殑璁捐鍘熺悊錛岃鍙傝銆奀++璇█鐨勮璁″拰婕斿彉銆嬶紙The Design and Evolution of C++錛夈?br><br><br><br>涓轟粈涔堟瀽鏋勫嚱鏁伴粯璁や笉鏄痸irtual鐨勶紵<br><br><br><br>鍥犱負寰堝綾誨茍涓嶆槸琚璁′綔涓哄熀綾葷殑銆傚彧鏈夌被鍦ㄨ涓轟笂鏄畠鐨勬淳鐢熺被鐨勬帴鍙f椂(榪欎簺媧劇敓綾誨線寰鍦ㄥ爢涓垎閰嶏紝閫氳繃鎸囬拡鎴栧紩鐢ㄦ潵璁塊棶)錛岃櫄鎷熷嚱鏁版墠鏈夋剰涔夈?br><br><br><br>閭d箞浠涔堟椂鍊欐墠搴旇灝嗘瀽鏋勫嚱鏁板畾涔変負铏氭嫙鍛紵褰撶被鑷沖皯鎷ユ湁涓涓櫄鎷熷嚱鏁版椂銆傛嫢鏈夎櫄鎷熷嚱鏁版剰鍛崇潃涓涓被鏄淳鐢熺被鐨勬帴鍙o紝鍦ㄨ繖縐嶆儏鍐典笅錛屼竴涓淳鐢熺被鐨勫璞″彲鑳介氳繃涓涓熀綾繪寚閽堟潵閿姣併備緥濡傦細<br><br><br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>classBase {<br><br>//...<br><br>virtual~Base();<br><br>};<br><br><br><br>classDerived : public Base {<br><br>//...<br><br>~Derived();<br><br>};<br><br><br><br>voidf()<br><br>{<br><br>Base*p = new Derived;<br><br>deletep; // 铏氭嫙鏋愭瀯鍑芥暟淇濊瘉~Derived鍑芥暟琚皟鐢?br><br>}</div> </div> <br><br>濡傛灉鍩虹被鐨勬瀽鏋勫嚱鏁頒笉鏄櫄鎷熺殑錛岄偅涔堟淳鐢熺被鐨勬瀽鏋勫嚱鏁板皢涓嶄細琚皟鐢ㄢ斺旇繖鍙兘浜х敓緋熺硶鐨勭粨鏋滐紝渚嬪媧劇敓綾葷殑璧勬簮涓嶄細琚噴鏀俱?br><br><br><br>涓轟粈涔堜笉鑳芥湁铏氭嫙鏋勯犲嚱鏁幫紵<br><br><br><br>铏氭嫙璋冪敤鏄竴縐嶈兘澶熷湪緇欏畾淇℃伅涓嶅畬鍏?given partialinformation)鐨勬儏鍐典笅宸ヤ綔鐨勬満鍒躲傜壒鍒湴錛岃櫄鎷熷厑璁告垜浠皟鐢ㄦ煇涓嚱鏁幫紝瀵逛簬榪欎釜鍑芥暟錛屼粎浠呯煡閬撳畠鐨勬帴鍙o紝鑰屼笉鐭ラ亾鍏蜂綋鐨勫璞$被鍨嬨備絾鏄寤虹珛涓涓璞★紝浣犲繀欏繪嫢鏈夊畬鍏ㄧ殑淇℃伅銆傜壒鍒湴錛屼綘闇瑕佺煡閬撹寤虹珛鐨勫璞$殑鍏蜂綋綾誨瀷銆傚洜姝わ紝瀵規瀯閫犲嚱鏁扮殑璋冪敤涓嶅彲鑳芥槸铏氭嫙鐨勩?br><br><br><br>褰撹姹傚緩绔嬩竴涓璞℃椂錛屼竴縐嶉棿鎺ョ殑鎶鏈父甯歌褰撲綔“铏氭嫙鏋勯犲嚱鏁?#8221;鏉ヤ嬌鐢ㄣ傛湁鍏充緥瀛愶紝璇峰弬瑙併奀++紼嬪簭璁捐璇█銆嬬涓夌増15.6.2.鑺傘?br><br><br><br>涓嬮潰榪欎釜渚嬪瓙灞曠ず涓縐嶆満鍒訛細濡備綍浣跨敤涓涓娊璞$被鏉ュ緩绔嬩竴涓傚綋綾誨瀷鐨勫璞°?br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>structF { // 瀵硅薄寤虹珛鍑芥暟鐨勬帴鍙?br><br>virtualA* make_an_A() const = 0;<br><br>virtualB* make_a_B() const = 0;<br><br>};<br><br><br><br>voiduser(const F& fac)<br><br>{<br><br>A*p = fac.make_an_A(); // 灝咥浣滀負鍚堥傜殑綾誨瀷<br><br>B*q = fac.make_a_B(); // 灝咮浣滀負鍚堥傜殑綾誨瀷<br><br>//...<br><br>}<br><br><br><br>structFX : F {<br><br>A*make_an_A() const { return new AX(); } // AX鏄疉鐨勬淳鐢?br><br>B*make_a_B() const { return new BX(); } // AX鏄疊鐨勬淳鐢?br><br>};<br><br><br><br>structFY : F {<br><br>A*make_an_A() const { return new AY(); } // AY鏄疉鐨勬淳鐢?br><br>B*make_a_B() const { return new BY(); } // BY鏄疊鐨勬淳鐢?br><br><br><br>};<br><br><br><br>intmain()<br><br>{<br><br>user(FX()); //姝ょ敤鎴峰緩绔婣X涓嶣X<br><br>user(FY()); //姝ょ敤鎴峰緩绔婣Y涓嶣Y<br><br>//...<br><br>}</div> </div> <br><br>榪欐槸鎵璋撶殑“宸ュ巶妯″紡”(the factory pattern)鐨勪竴涓彉褰€傚叧閿湪浜庯紝user鍑芥暟涓嶢X鎴朅Y榪欐牱鐨勭被鐨勪俊鎭瀹屽叏鍒嗙寮鏉ヤ簡銆?br><br><br><br>涓轟粈涔堥噸杞藉湪緇ф壙綾諱腑涓嶅伐浣滐紵<br><br><br><br>榪欎釜闂錛堥潪甯稿父瑙侊級寰寰鍑虹幇浜庤繖鏍風殑渚嬪瓙涓細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>#include<iostream><br><br>usingnamespace std;<br><br><br><br>classB {<br><br>public:<br><br>intf(int i) { cout << "f(int): "; return i+1; }<br><br>//...<br><br>};<br><br><br><br>classD : public B {<br><br>public:<br><br>doublef(double d) { cout << "f(double): "; return d+1.3; }<br><br>//...<br><br>};<br><br><br><br>intmain()<br><br>{<br><br>D*pd = new D;<br><br><br><br>cout<< pd->f(2) << '\n';<br><br>cout<< pd->f(2.3) << '\n';<br><br>}</div> </div> <br><br>瀹冭緭鍑虹殑緇撴灉鏄細<br><br><br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>f(double):3.3<br><br>f(double):3.6</div> </div> <br><br>鑰屼笉鏄薄鏈変簺浜虹寽鎯崇殑閭f牱錛?br><br><br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>f(int):3<br><br>f(double):3.6</div> </div> <br><br>鎹㈠彞璇濊錛屽湪B鍜孌涔嬮棿騫舵病鏈夊彂鐢熼噸杞界殑瑙f瀽銆傜紪璇戝櫒鍦―鐨勫尯鍩熷唴瀵繪壘錛屾壘鍒頒簡涓涓嚱鏁癲ouble f(double)錛屽茍鎵ц浜嗗畠銆傚畠姘歌繙涓嶄細娑夊強錛堣灝佽鐨勶級B鐨勫尯鍩熴傚湪C++涓紝娌℃湁璺ㄨ秺鍖哄煙鐨勯噸杞解斺斿浜庤繖鏉¤鍒欙紝緇ф壙綾諱篃涓嶄緥澶栥傛洿澶氱殑緇嗚妭錛屽弬瑙併奀++璇█鐨勮璁″拰婕斿彉銆嬪拰銆奀++紼嬪簭璁捐璇█銆嬨?br><br><br><br>浣嗘槸錛屽鏋滄垜闇瑕佸湪鍩虹被鍜岀戶鎵跨被涔嬮棿寤虹珛涓緇勯噸杞界殑f()鍑芥暟鍛紵寰堢畝鍗曪紝浣跨敤using澹版槑錛?br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>classD : public B {<br><br>public:<br><br>usingB::f; // make every f from B available<br><br>doublef(double d) { cout << "f(double): "; return d+1.3; }<br><br>//...<br><br>};</div> </div> <br><br>榪涜榪欎釜淇敼涔嬪悗錛岃緭鍑虹粨鏋滃皢鏄細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>f(int):3<br><br>f(double):3.6</div> </div> <br><br>榪欐牱錛屽湪B鐨刦()鍜孌鐨刦()涔嬮棿錛岄噸杞界‘瀹炲疄鐜頒簡錛屽茍涓旈夋嫨浜嗕竴涓渶鍚堥傜殑f()榪涜璋冪敤銆?br><br><br><br>鎴戣兘澶熷湪鏋勯犲嚱鏁頒腑璋冪敤涓涓櫄鎷熷嚱鏁板悧錛?br><br><br><br>鍙互錛屼絾鏄灝忓績銆傚畠鍙兘涓嶈薄浣犳湡鏈涚殑閭f牱宸ヤ綔銆傚湪鏋勯犲嚱鏁頒腑錛岃櫄鎷熻皟鐢ㄦ満鍒朵笉璧蜂綔鐢紝鍥犱負緇ф壙綾葷殑閲嶈澆榪樻病鏈夊彂鐢熴傚璞″厛浠庡熀綾昏鍒涘緩錛?#8220;鍩虹被鍏堜簬緇ф壙綾?base beforederived)”銆?br><br><br><br>鐪嬬湅榪欎釜錛?br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>#include<string><br><br>#include<iostream><br><br>usingnamespace std;<br><br><br><br>classB {<br><br>public:<br><br>B(conststring& ss) { cout << "B constructor\n"; f(ss); }<br><br>virtualvoid f(const string&) { cout << "B::f\n";}<br><br>};<br><br><br><br>classD : public B {<br><br>public:<br><br>D(conststring & ss) :B(ss) { cout << "D constructor\n";}<br><br>voidf(const string& ss) { cout << "D::f\n"; s = ss; }<br><br>private:<br><br>strings;<br><br>};<br><br><br><br>intmain()<br><br>{<br><br>Dd("Hello");<br><br>}</div> </div> <br><br>紼嬪簭緙栬瘧浠ュ悗浼氳緭鍑猴細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>Bconstructor<br><br>B::f<br><br>Dconstructor</div> </div> <br><br>娉ㄦ剰涓嶆槸D::f銆傝鎯充竴涓嬶紝濡傛灉鍑轟簬涓嶅悓鐨勮鍒欙紝B::B()鍙互璋冪敤D::f()鐨勮瘽錛屼細浜х敓浠涔堟牱鐨勫悗鏋滐細鍥犱負鏋勯犲嚱鏁癉::D()榪樻病鏈夎繍琛岋紝D::f()灝嗕細璇曞浘灝嗕竴涓繕娌℃湁鍒濆鍖栫殑瀛楃涓瞫璧嬩簣瀹冪殑鍙傛暟銆傜粨鏋滃緢鍙兘鏄鑷寸珛鍗沖穿婧冦?br><br><br><br>鏋愭瀯鍑芥暟鍦?#8220;緇ф壙綾誨厛浜庡熀綾?#8221;鐨勬満鍒朵笅榪愯錛屽洜姝よ櫄鎷熸満鍒剁殑琛屼負鍜屾瀯閫犲嚱鏁頒竴鏍鳳細鍙湁鏈湴瀹氫箟(local definitions)琚嬌鐢ㄢ斺斾笉浼氳皟鐢ㄨ櫄鎷熷嚱鏁幫紝浠ュ厤瑙﹀強瀵硅薄涓殑錛堢幇鍦ㄥ凡緇忚閿姣佺殑錛夌戶鎵跨被鐨勯儴鍒嗐?br><br><br><br>鏇村鐨勭粏鑺傦紝鍙傝銆奀++璇█鐨勮璁″拰婕斿彉銆?3.2.4.2鍜屻奀++紼嬪簭璁捐璇█銆?5.4.3銆?br><br><br><br>鏈変漢鏆楃ず錛岃繖鍙槸涓鏉″疄鐜版椂鐨勪漢涓哄埗閫犵殑瑙勫垯銆備笉鏄繖鏍風殑銆備簨瀹炰笂錛岃瀹炵幇榪欑涓嶅畨鍏ㄧ殑鏂規硶鍊掓槸闈炲父瀹規槗鐨勶細鍦ㄦ瀯閫犲嚱鏁頒腑鐩存帴璋冪敤铏氭嫙鍑芥暟錛屽氨璞¤皟鐢ㄥ叾瀹冨嚱鏁頒竴鏍楓備絾鏄紝榪欐牱灝辨剰鍛崇潃錛屼換浣曡櫄鎷熷嚱鏁伴兘鏃犳硶緙栧啓浜嗭紝鍥犱負瀹冧滑闇瑕佷緷闈犲熀綾葷殑鍥哄畾鐨勫垱寤?invariantsestablished by base classes)銆傝繖灝嗕細瀵艱嚧涓鐗囨販涔便?br><br><br><br>鏈夋病鏈?#8220;鎸囧畾浣嶇疆鍒犻櫎”(placement delete)錛?br><br><br><br>娌℃湁錛屼笉榪囧鏋滀綘闇瑕佺殑璇濓紝鍙互鑷繁鍐欎竴涓?br><br><br><br>鐪嬬湅榪欎釜鎸囧畾浣嶇疆鍒涘緩(placement new)錛屽畠灝嗗璞℃斁榪涗簡涓緋誨垪Arena涓紱<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>class Arena {<br><br>public:<br><br>void* allocate(size_t);<br><br>void deallocate(void*);<br><br>// ...<br><br>};<br><br><br><br>void* operator new(size_t sz, Arena& a)<br><br>{<br><br>return a.allocate(sz);<br><br>}<br><br><br><br>Arena a1(some arguments);<br><br>Arena a2(some arguments);<br><br></div> </div> 榪欐牱瀹炵幇浜嗕箣鍚庯紝鎴戜滑灝卞彲浠ヨ繖涔堝啓錛?br><br><br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>X* p1 = new(a1) X;<br><br>Y* p2 = new(a1) Y;<br><br>Z* p3 = new(a2) Z;<br><br>// ...<br><br></div> </div> 浣嗘槸錛屼互鍚庢庢牱姝g‘鍦伴攢姣佽繖浜涘璞″憿錛熸病鏈夊搴斾簬榪欑“placement new”鐨勫唴寤虹殑“placement delete”錛屽師鍥犳槸錛屾病鏈変竴縐嶉氱敤鐨勬柟娉曞彲浠ヤ繚璇佸畠琚紜湴浣跨敤銆傚湪C++鐨勭被鍨嬬郴緇熶腑錛屾病鏈変粈涔堜笢瑗垮彲浠ヨ鎴戜滑紜錛宲1涓瀹氭寚鍚戜竴涓敱Arena綾誨瀷鐨刟1鍒嗘淳鐨勫璞°俻1鍙兘鎸囧悜浠諱綍涓滆タ鍒嗘淳鐨勪換浣曚竴鍧楀湴鏂廣?br><br><br><br>鐒惰岋紝鏈夋椂鍊欑▼搴忓憳鏄煡閬撶殑錛屾墍浠ヨ繖鏄竴縐嶆柟娉曪細<br><br><br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>template<class T> void destroy(T* p, Arena& a)<br><br>{<br><br>if (p) {<br><br>p->~T(); // explicit destructor call<br><br>a.deallocate(p);<br><br>}<br><br>}</div> </div> <br><br>鐜板湪鎴戜滑鍙互榪欎箞鍐欙細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>destroy(p1,a1);<br><br>destroy(p2,a2);<br><br>destroy(p3,a3);</div> </div> <br><br>濡傛灉Arena緇存姢浜嗗畠淇濆瓨鐫鐨勫璞$殑綰跨儲錛屼綘鐢氳嚦鍙互鑷繁鍐欎竴涓瀽鏋勫嚱鏁幫紝浠ラ伩鍏嶅畠鍙戠敓閿欒銆?br><br><br><br>榪欎篃鏄彲鑳界殑錛氬畾涔変竴瀵圭浉浜掑尮閰嶇殑鎿嶄綔絎ew()鍜宒elete()錛屼互緇存姢銆奀++紼嬪簭璁捐璇█銆?5.6涓殑綾葷戶鎵夸綋緋匯傚弬瑙併奀++璇█鐨勮璁″拰婕斿彉銆?0.4鍜屻奀++紼嬪簭璁捐璇█銆?9.4.5銆?br><br><br><br>鎴戣兘闃叉鍒漢緇ф壙鎴戣嚜宸辯殑綾誨悧錛?br><br><br><br>鍙互錛屼絾浣犱負浠涔堣閭d箞鍋氬憿錛熻繖鏄袱涓父瑙佺殑鍥炵瓟錛?br><br><br><br>鏁堢巼錛氶伩鍏嶆垜鐨勫嚱鏁拌铏氭嫙璋冪敤<br><br>瀹夊叏錛氫繚璇佹垜鐨勭被涓嶈鐢ㄤ綔涓涓熀綾伙紙渚嬪錛屼繚璇佹垜鑳藉澶嶅埗瀵硅薄鑰屼笉鐢ㄦ媴蹇冨嚭浜嬶級<br><br><br><br>鏍規嵁鎴戠殑緇忛獙錛屾晥鐜囧師鍥犲線寰鏄笉蹇呰鐨勬媴蹇冦傚湪C++涓紝铏氭嫙鍑芥暟璋冪敤鏄姝や箣蹇紝浠ヨ嚧浜庡畠浠湪涓涓寘鍚櫄鎷熷嚱鏁扮殑綾諱腑琚疄闄呬嬌鐢ㄦ椂錛岀浉姣旀櫘閫氱殑鍑芥暟璋冪敤錛屾牴鏈笉浼氫駭鐢熷煎緱鑰冭檻鐨勮繍琛屾湡寮鏀傛敞鎰忥紝浠呬粎閫氳繃鎸囬拡鎴栧紩鐢ㄦ椂錛屾墠浼氫嬌鐢ㄨ櫄鎷熻皟鐢ㄦ満鍒躲傚綋鐩存帴閫氳繃瀵硅薄鍚嶅瓧璋冪敤涓涓嚱鏁版椂錛岃櫄鎷熷嚱鏁拌皟鐢ㄧ殑寮鏀彲浠ヨ寰堝鏄撳湴浼樺寲鎺夈?br><br><br><br>濡傛灉紜疄鏈夌湡姝g殑闇瑕侊紝瑕佸皢涓涓被灝侀棴璧鋒潵浠ラ槻姝㈣櫄鎷熻皟鐢紝閭d箞鍙兘棣栧厛搴旇闂棶涓轟粈涔堝畠浠槸铏氭嫙鐨勩傛垜鐪嬭榪囦竴浜涗緥瀛愶紝閭d簺鎬ц兘琛ㄧ幇涓嶄匠鐨勫嚱鏁拌璁劇疆涓鴻櫄鎷燂紝娌℃湁鍏朵粬鍘熷洜錛屼粎浠呮槸鍥犱負“鎴戜滑涔犳儻榪欎箞騫?#8221;銆?br><br><br><br>榪欎釜闂鐨勫彟涓涓儴鍒嗭紝鐢變簬閫昏緫涓婄殑鍘熷洜濡備綍闃叉綾昏緇ф壙錛屾湁涓涓В鍐蟲柟妗堛備笉騫哥殑鏄紝榪欎釜鏂規騫朵笉瀹岀編銆傚畠寤虹珛鍦ㄨ繖鏍蜂竴涓簨瀹炵殑鍩虹涔嬩笂錛岄偅灝辨槸錛氬ぇ澶氭暟鐨勭戶鎵跨被蹇呴』寤虹珛涓涓櫄鎷熺殑鍩虹被銆傝繖鏄竴涓緥瀛愶細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>classUsable;<br><br><br><br>classUsable_lock {<br><br>friendclass Usable;<br><br>private:<br><br>Usable_lock(){}<br><br>Usable_lock(constUsable_lock&) {}<br><br>};<br><br><br><br>classUsable : public virtual Usable_lock {<br><br>//...<br><br>public:<br><br>Usable();<br><br>Usable(char*);<br><br>//...<br><br>};<br><br><br><br>Usablea;<br><br><br><br>classDD : public Usable { };<br><br><br><br>DDdd; // 閿欒: DD::DD() 涓嶈兘璁塊棶<br><br>// Usable_lock::Usable_lock()鏄竴涓鏈夋垚鍛?br><br></div> </div> (鏉ヨ嚜銆奀++璇█鐨勮璁″拰婕斿彉銆?1.4.3)<br><br><br><br>涓轟粈涔堜笉鑳戒負妯℃澘鍙傛暟瀹氫箟綰︽潫錛坈onstraints錛夛紵<br><br><br><br>鍙互鐨勶紝鑰屼笖鏂規硶闈炲父綆鍗曞拰閫氱敤銆?br><br><br><br>鐪嬬湅榪欎釜錛?br><br><br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>template<class Container><br><br>void draw_all(Container& c)<br><br>{<br><br>for_each(c.begin(),c.end(),mem_fun(&Shape::draw));<br><br>}</div> </div> <br><br>濡傛灉鍑虹幇綾誨瀷閿欒錛屽彲鑳芥槸鍙戠敓鍦ㄧ浉褰撳鏉傜殑for_each()璋冪敤鏃躲備緥濡傦紝濡傛灉瀹瑰櫒鐨勫厓绱犵被鍨嬫槸int錛屾垜浠皢寰楀埌涓涓拰for_each()鐩稿叧鐨勫惈涔夋ā緋婄殑閿欒(鍥犱負涓嶈兘澶熷瀵逛竴涓猧nt鍊艱皟鐢⊿hape::draw鐨勬柟娉?銆?br><br><br><br>涓轟簡鎻愬墠鎹曟崏榪欎釜閿欒錛屾垜榪欐牱鍐欙細<br><br><br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>template<class Container><br><br>void draw_all(Container& c)<br><br>{<br><br>Shape* p = c.front(); // accept only containers of Shape*s<br><br><br><br>for_each(c.begin(),c.end(),mem_fun(&Shape::draw));<br><br>}</div> </div> <br><br>瀵逛簬鐜板湪鐨勫ぇ澶氭暟緙栬瘧鍣紝涓棿鍙橀噺p鐨勫垵濮嬪寲灝嗕細瑙﹀彂涓涓槗浜庝簡瑙g殑閿欒銆傝繖涓獚闂ㄥ湪寰堝璇█涓兘鏄氱敤鐨勶紝鑰屼笖鍦ㄦ墍鏈夌殑鏍囧噯鍒涘緩涓兘蹇呴』榪欐牱鍋氥傚湪鎴愬搧鐨勪唬鐮佷腑錛屾垜涔熻鍙互榪欐牱鍐欙細<br><br><br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>template<classContainer><br><br>void draw_all(Container& c)<br><br>{<br><br>typedef typename Container::value_type T;<br><br>Can_copy<T,Shape*>(); // accept containers of only Shape*s<br><br><br><br>for_each(c.begin(),c.end(),mem_fun(&Shape::draw));<br><br>}</div> </div> <br><br>榪欐牱灝卞緢娓呮浜嗭紝鎴戝湪寤虹珛涓涓柇璦(assertion)銆侰an_copy妯℃澘鍙互榪欐牱瀹氫箟錛?br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>template<classT1, class T2> struct Can_copy {<br><br>staticvoid constraints(T1 a, T2 b) { T2 c = a; b = a; }<br><br>Can_copy(){ void(*p)(T1,T2) = constraints; }<br><br>};</div> </div> <br><br>Can_copy(鍦ㄨ繍琛屾椂)媯鏌1鏄惁鍙互琚祴鍊肩粰T2銆侰an_copy<T,Shape*>媯鏌鏄惁鏄疭hape*綾誨瀷錛屾垨鑰呮槸涓涓寚鍚戠敱Shape綾誨叕鍏辯戶鎵胯屾潵鐨勭被鐨勫璞$殑鎸囬拡錛屾垨鑰呮槸琚敤鎴瘋漿鎹㈠埌Shape*綾誨瀷鐨勬煇涓被鍨嬨傛敞鎰忚繖涓畾涔夎綺劇畝鍒頒簡鏈灝忥細<br><br><br><br>涓琛屽懡鍚嶈媯鏌ョ殑綰︽潫錛屽拰瑕佹鏌ョ殑綾誨瀷<br><br>涓琛屽垪鍑烘寚瀹氱殑瑕佹鏌ョ殑綰︽潫(constraints()鍑芥暟)<br><br>涓琛屾彁渚涜Е鍙戞鏌ョ殑鏂規硶(閫氳繃鏋勯犲嚱鏁?<br><br><br><br>娉ㄦ剰榪欎釜瀹氫箟鏈夌浉褰撳悎鐞嗙殑鎬ц川錛?br><br><br><br>浣犲彲浠ヨ〃杈句竴涓害鏉燂紝鑰屼笉鐢ㄥ0鏄庢垨澶嶅埗鍙橀噺錛屽洜姝ょ害鏉熺殑緙栧啓鑰呭彲浠ョ敤涓嶇潃鍘昏鎯沖彉閲忓浣曡鍒濆鍖栵紝瀵硅薄鏄惁鑳藉琚鍒訛紝琚攢姣侊紝浠ュ強璇稿姝ょ被鐨勪簨鎯呫?褰撶劧錛岀害鏉熻媯鏌ヨ繖浜涘睘鎬х殑鎯呭喌鏃朵緥澶栥?<br><br>浣跨敤鐜板湪鐨勭紪璇戝櫒錛屼笉闇瑕佷負綰︽潫浜х敓浠g爜<br><br>瀹氫箟鍜屼嬌鐢ㄧ害鏉燂紝涓嶉渶瑕佷嬌鐢ㄥ畯<br><br>褰撶害鏉熷け璐ユ椂錛岀紪璇戝櫒浼氱粰鍑哄彲鎺ュ彈鐨勯敊璇俊鎭紝鍖呮嫭“constraints”榪欎釜璇嶏紙緇欑敤鎴蜂竴涓嚎绱級錛岀害鏉熺殑鍚嶅瓧錛屼互鍙婂鑷寸害鏉熷け璐ョ殑璇︾粏閿欒錛堜緥濡?#8220;鏃犳硶鐢╠ouble*鍒濆鍖朣hape*”錛夈?br><br><br><br>閭d箞錛屽湪C++璇█涓紝鏈夋病鏈夌被浼間簬Can_copy鈥斺旀垨鑰呮洿濂解斺旂殑涓滆タ鍛紵鍦ㄣ奀++璇█鐨勮璁″拰婕斿彉銆嬩腑錛屽浜庡湪C++涓疄鐜拌繖縐嶉氱敤綰︽潫鐨勫洶闅捐繘琛屼簡鍒嗘瀽銆備粠閭d互鏉ワ紝鍑虹幇浜嗗緢澶氭柟娉曪紝鏉ヨ綰︽潫綾誨彉寰楁洿鍔犲鏄撶紪鍐欙紝鍚屾椂浠嶇劧鑳借Е鍙戣壇濂界殑閿欒淇℃伅銆備緥濡傦紝鎴戜俊浠繪垜鍦–an_copy涓嬌鐢ㄧ殑鍑芥暟鎸囬拡鐨勬柟寮忥紝瀹冩簮鑷狝lex Stepanov鍜孞eremy Siek銆傛垜騫朵笉璁や負Can_copy()宸茬粡鍙互鏍囧噯鍖栦簡鈥斺斿畠闇瑕佹洿澶氱殑浣跨敤銆傚悓鏍鳳紝鍦–++紺懼尯涓紝鍚勭涓嶅悓鐨勭害鏉熸柟寮忚浣跨敤錛涘埌搴曟槸鍝竴縐嶇害鏉熸ā鏉垮湪騫挎硾鐨勪嬌鐢ㄤ腑琚瘉鏄庢槸鏈鏈夋晥鐨勶紝榪樻病鏈夎揪鎴愪竴鑷寸殑鎰忚銆?br><br><br><br>浣嗘槸錛岃繖縐嶆柟寮忛潪甯告櫘閬嶏紝姣旇璦鎻愪緵鐨勪笓闂ㄧ敤浜庣害鏉熸鏌ョ殑鏈哄埗鏇村姞鏅亶銆傛棤璁哄浣曪紝褰撴垜浠紪鍐欎竴涓ā鏉挎椂錛屾垜浠嫢鏈変簡C++鎻愪緵鐨勬渶涓板瘜鐨勮〃杈懼姏閲忋傜湅鐪嬭繖涓細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>template<classT, class B> struct Derived_from {<br><br>staticvoid constraints(T* p) { B* pb = p; }<br><br>Derived_from(){ void(*p)(T*) = constraints; }<br><br>};</div> </div> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>template<classT1, class T2> struct Can_copy {<br><br>staticvoid constraints(T1 a, T2 b) { T2 c = a; b = a; }<br><br>Can_copy(){ void(*p)(T1,T2) = constraints; }<br><br>};</div> </div> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>template<classT1, class T2 = T1> struct Can_compare {<br><br>staticvoid constraints(T1 a, T2 b) { a==b; a!=b; a<b; }<br><br>Can_compare(){ void(*p)(T1,T2) = constraints; }<br><br>};</div> </div> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>template<classT1, class T2, class T3 = T1> struct Can_multiply {<br><br>staticvoid constraints(T1 a, T2 b, T3 c) { c = a*b; }<br><br>Can_multiply(){ void(*p)(T1,T2,T3) = constraints; }<br><br>};</div> </div> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>structB { };<br><br>structD : B { };<br><br>structDD : D { };<br><br>structX { };<br><br><br><br>intmain()<br><br>{<br><br>Derived_from<D,B>();<br><br>Derived_from<DD,B>();<br><br>Derived_from<X,B>();<br><br>Derived_from<int,B>();<br><br>Derived_from<X,int>();<br><br><br><br>Can_compare<int,float>();<br><br>Can_compare<X,B>();<br><br>Can_multiply<int,float>();<br><br>Can_multiply<int,float,double>();<br><br>Can_multiply<B,X>();<br><br><br><br>Can_copy<D*,B*>();<br><br>Can_copy<D,B*>();<br><br>Can_copy<int,B*>();<br><br>}</div> </div> <br><br>//鍏稿瀷鐨?#8220;鍏冪礌蹇呴』緇ф壙鑷狹ybase*”綰︽潫:<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>template<classT> class Container : Derived_from<T,Mybase> {<br><br>//...<br><br>};</div> </div> <br><br>浜嬪疄涓婏紝Derived_from騫朵笉媯鏌ユ潵婧愶紙derivation錛夛紝鑰屼粎浠呮鏌ヨ漿鎹紙conversion錛夛紝涓嶈繃榪欏線寰鏄竴涓洿濂界殑綰︽潫銆備負綰︽潫鎯充竴涓ソ鍚嶅瓧鏄緢闅劇殑銆?br><br><br><br>鏃㈢劧宸茬粡鏈変簡浼樼鐨剄sort()鍑芥暟錛屼負浠涔堣繕闇瑕佷竴涓猻ort()錛?br><br><br><br>瀵逛簬鍒濆鑰呮潵璇達紝<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>qsort(array,asize,sizeof(elem),elem_compare);</div> </div> <br><br>鐪嬩笂鍘誨お鍙ゆ簡錛岃屼笖姣旇繖涓洿闅劇悊瑙o細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>sort(vec.begin(),vec.end());</div> </div> <br><br>瀵逛簬涓撳鏉ヨ錛屽湪鍏冪礌涓庢瘮杈冩柟寮忥紙comparisoncriteria錛夐兘鐩稿悓鐨勬儏鍐典笅錛宻ort()姣攓sort()鏇村揩錛岃繖鏄緢閲嶈鐨勩傝屼笖錛宷sort()鏄氱敤鐨勶紝鎵浠ュ畠鍙互鐢ㄤ簬涓嶅悓瀹瑰櫒綾誨瀷銆佸厓绱犵被鍨嬨佹瘮杈冩柟寮忕殑浠繪剰鏈夋剰涔夌殑緇勫悎銆備婦渚嬫潵璇達細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>structRecord {<br><br>stringname;<br><br>//...<br><br>};<br><br><br><br>structname_compare { // 浣跨敤"name"浣滀負閿瘮杈僐ecord<br><br>booloperator()(const Record& a, const Record& b) const<br><br>{return a.name<b.name; }<br><br>};<br><br><br><br>voidf(vector<Record>& vs)<br><br>{<br><br>sort(vs.begin(),vs.end(), name_compare());<br><br>//...<br><br>} </div> </div> <br><br>鑰屼笖錛屽緢澶氫漢嬈h祻sort()鏄洜涓哄畠鏄被鍨嬪畨鍏ㄧ殑錛屼嬌鐢ㄥ畠涓嶉渶瑕佽繘琛岄犲瀷錛坈ast錛夛紝娌℃湁浜哄繀欏誨幓涓哄熀鏈被鍨嬪啓涓涓猚ompare()鍑芥暟銆?br><br><br><br>鏇村鐨勭粏鑺傦紝鍙傝鎴戠殑鏂囩珷銆婂皢鏍囧噯C++浣滀負涓縐嶆柊鐨勮璦鏉ュ涔犮嬶紙Learning C++ as a Newlanguage錛夛紝鍙互浠庢垜鐨勬枃绔犲垪琛ㄤ腑鎵懼埌銆?br><br><br><br>sort()鑳滆繃qsort()鐨勪富瑕佸師鍥犳槸錛屾瘮杈冩搷浣滃湪鍐呰仈錛坕nlines錛変笂鍋氬緱鏇村ソ銆?br><br><br><br>浠涔堟槸鍑芥暟瀵硅薄錛坒unction object錛夛紵<br><br><br><br>欏懼悕鎬濅箟錛屽氨鏄湪鏌愮鏂瑰紡涓婅〃鐜板緱璞′竴涓嚱鏁扮殑瀵硅薄銆傚吀鍨嬪湴錛屽畠鏄寚涓涓被鐨勫疄渚嬶紝榪欎釜綾誨畾涔変簡搴旂敤鎿嶄綔絎perator()銆?br><br><br><br>鍑芥暟瀵硅薄鏄瘮鍑芥暟鏇村姞閫氱敤鐨勬蹇碉紝鍥犱負鍑芥暟瀵硅薄鍙互瀹氫箟璺ㄨ秺澶氭璋冪敤鐨勫彲鎸佷箙鐨勯儴鍒嗭紙綾諱技闈欐佸眬閮ㄥ彉閲忥級錛屽悓鏃跺張鑳藉浠庡璞$殑澶栭潰榪涜鍒濆鍖栧拰媯鏌ワ紙鍜岄潤鎬佸眬閮ㄥ彉閲忎笉鍚岋級銆備緥濡傦細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>classSum {<br><br>intval;<br><br>public:<br><br>Sum(inti) :val(i) { }<br><br>operatorint() const { return val; } // 鍙栧緱鍊?br><br><br><br>intoperator()(int i) { return val+=i; } // 搴旂敤<br><br>};<br><br><br><br>voidf(vector v)<br><br>{<br><br>Sums = 0; // initial value 0<br><br>s= for_each(v.begin(), v.end(), s); // 姹傛墍鏈夊厓绱犵殑鍜?br><br>cout<< "the sum is " << s << "\n";<br><br><br><br>//鎴栬呯敋鑷籌細<br><br>cout<< "the sum is " << for_each(v.begin(), v.end(), Sum(0))<< "\n";<br><br>}</div> </div> <br><br>娉ㄦ剰涓涓嫢鏈夊簲鐢ㄦ搷浣滅鐨勫嚱鏁板璞″彲浠ヨ瀹岀編鍦板唴鑱斿寲錛坕nline錛夛紝鍥犱負瀹冩病鏈夋秹鍙婂埌浠諱綍鎸囬拡錛屽悗鑰呭彲鑳藉鑷存嫆緇濅紭鍖栥備笌涔嬪艦鎴愬姣旂殑鏄紝鐜版湁鐨勪紭鍖栧櫒鍑犱箮涓嶈兘錛堟垨鑰呭畬鍏ㄤ笉鑳斤紵錛夊皢涓涓氳繃鍑芥暟鎸囬拡鐨勮皟鐢ㄥ唴鑱斿寲銆?br><br><br><br>鍦ㄦ爣鍑嗗簱涓紝鍑芥暟瀵硅薄琚箍娉涘湴浣跨敤浠ヨ幏寰楀脊鎬с?br><br><br><br>鎴戝簲璇ュ浣曞浠樺唴瀛樻硠婕忥紵<br><br><br><br>鍐欏嚭閭d簺涓嶄細瀵艱嚧浠諱綍鍐呭瓨娉勬紡鐨勪唬鐮併傚緢鏄庢樉錛屽綋浣犵殑浠g爜涓埌澶勫厖婊′簡new 鎿嶄綔銆乨elete鎿嶄綔鍜屾寚閽堣繍綆楃殑璇濓紝浣犲皢浼氬湪鏌愪釜鍦版柟鎼炴檿浜嗗ご錛屽鑷村唴瀛樻硠婕忥紝鎸囬拡寮曠敤閿欒錛屼互鍙婅濡傛綾葷殑闂銆傝繖鍜屼綘濡備綍灝忓績鍦板寰呭唴瀛樺垎閰嶅伐浣滃叾瀹炲畬鍏ㄦ病鏈夊叧緋伙細浠g爜鐨勫鏉傛ф渶緇堟繪槸浼氳秴榪囦綘鑳藉浠樺嚭鐨勬椂闂村拰鍔姏銆備簬鏄殢鍚庝駭鐢熶簡涓浜涙垚鍔熺殑鎶宸э紝瀹冧滑渚濊禆浜庡皢鍐呭瓨鍒嗛厤錛坅llocations錛変笌閲嶆柊鍒嗛厤錛坉eallocation錛夊伐浣滈殣钘忓湪鏄撲簬綆$悊鐨勭被鍨嬩箣鍚庛傛爣鍑嗗鍣紙standardcontainers錛夋槸涓涓紭縐鐨勪緥瀛愩傚畠浠笉鏄氳繃浣犺屾槸鑷繁涓哄厓绱犵鐞嗗唴瀛橈紝浠庤岄伩鍏嶄簡浜х敓緋熺硶鐨勭粨鏋溿傛兂璞′竴涓嬶紝娌℃湁string鍜寁ector鐨勫府鍔╋紝鍐欏嚭榪欎釜錛?br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>#include<vector><br><br>#include<string><br><br>#include<iostream><br><br>#include<algorithm><br><br>usingnamespace std;<br><br><br><br>intmain() // small program messing around with strings<br><br>{<br><br>cout<< "enter some whitespace-separated words:\n";<br><br>vector<string>v;<br><br>strings;<br><br>while(cin>>s) v.push_back(s);<br><br><br><br>sort(v.begin(),v.end());<br><br><br><br>stringcat;<br><br>typedefvector<string>::const_iterator Iter;<br><br>for(Iter p = v.begin(); p!=v.end(); ++p) cat += *p+"+";<br><br>cout<< cat << '\n';<br><br>}</div> </div> <br><br>浣犳湁澶氬皯鏈轟細鍦ㄧ涓嬈″氨寰楀埌姝g‘鐨勭粨鏋滐紵浣犲張鎬庝箞鐭ラ亾浣犳病鏈夊鑷村唴瀛樻硠婕忓憿錛?br><br><br><br>娉ㄦ剰錛屾病鏈夊嚭鐜版樉寮忕殑鍐呭瓨綆$悊錛屽畯錛岄犲瀷錛屾孩鍑烘鏌ワ紝鏄懼紡鐨勯暱搴﹂檺鍒訛紝浠ュ強鎸囬拡銆傞氳繃浣跨敤鍑芥暟瀵硅薄鍜屾爣鍑嗙畻娉曪紙standard algorithm錛夛紝鎴戝彲浠ラ伩鍏嶄嬌鐢ㄦ寚閽堚斺斾緥濡備嬌鐢ㄨ凱浠e瓙錛坕terator錛夛紝涓嶈繃瀵逛簬涓涓繖涔堝皬鐨勭▼搴忔潵璇存湁鐐瑰皬棰樺ぇ浣滀簡銆?br><br><br><br>榪欎簺鎶宸у茍涓嶅畬緹庯紝瑕佺郴緇熷寲鍦頒嬌鐢ㄥ畠浠篃騫朵笉鎬繪槸閭d箞瀹規槗銆備絾鏄紝搴旂敤瀹冧滑浜х敓浜嗘儕浜虹殑宸紓錛岃屼笖閫氳繃鍑忓皯鏄懼紡鐨勫唴瀛樺垎閰嶄笌閲嶆柊鍒嗛厤鐨勬鏁幫紝浣犵敋鑷沖彲浠ヤ嬌浣欎笅鐨勪緥瀛愭洿鍔犲鏄撹璺熻釜銆傛棭鍦?981騫達紝鎴戝氨鎸囧嚭錛岄氳繃灝嗘垜蹇呴』鏄懼紡鍦拌窡韙殑瀵硅薄鐨勬暟閲忎粠鍑犱竾涓噺灝戝埌鍑犳墦錛屼負浜嗕嬌紼嬪簭姝g‘榪愯鑰屼粯鍑虹殑鍔姏浠庡彲鎬曠殑鑻﹀伐錛屽彉鎴愪簡搴斾粯涓浜涘彲綆$悊鐨勫璞★紝鐢氳嚦鏇村姞綆鍗曚簡銆?br><br><br><br>濡傛灉浣犵殑紼嬪簭榪樻病鏈夊寘鍚皢鏄懼紡鍐呭瓨綆$悊鍑忓皯鍒版渶灝忛檺搴︾殑搴擄紝閭d箞瑕佽浣犵▼搴忓畬鎴愬拰姝g‘榪愯鐨勮瘽錛屾渶蹇殑閫斿緞涔熻灝辨槸鍏堝緩绔嬩竴涓繖鏍風殑搴撱?br><br><br><br>妯℃澘鍜屾爣鍑嗗簱瀹炵幇浜嗗鍣ㄣ佽祫婧愬彞鏌勪互鍙婅濡傛綾葷殑涓滆タ錛屾洿鏃╃殑浣跨敤鐢氳嚦鍦ㄥ騫翠互鍓嶃傚紓甯哥殑浣跨敤浣夸箣鏇村姞瀹屽杽銆?br><br><br><br>濡傛灉浣犲疄鍦ㄤ笉鑳藉皢鍐呭瓨鍒嗛厤/閲嶆柊鍒嗛厤鐨勬搷浣滈殣钘忓埌浣犻渶瑕佺殑瀵硅薄涓椂錛屼綘鍙互浣跨敤璧勬簮鍙ユ焺錛坮esource handle錛夛紝浠ュ皢鍐呭瓨娉勬紡鐨勫彲鑳芥ч檷鑷蟲渶浣庛傝繖閲屾湁涓緥瀛愶細鎴戦渶瑕侀氳繃涓涓嚱鏁幫紝鍦ㄧ┖闂插唴瀛樹腑寤虹珛涓涓璞″茍榪斿洖瀹冦傝繖鏃跺欏彲鑳藉繕璁伴噴鏀捐繖涓璞°傛瘯绔燂紝鎴戜滑涓嶈兘璇達紝浠呬粎鍏蟲敞褰撹繖涓寚閽堣琚噴鏀劇殑鏃跺欙紝璋佸皢璐熻矗鍘誨仛銆備嬌鐢ㄨ祫婧愬彞鏌勶紝榪欓噷鐢ㄤ簡鏍囧噯搴撲腑鐨刟uto_ptr錛屼嬌闇瑕佷負涔嬭礋璐g殑鍦版柟鍙樺緱鏄庣‘浜嗐?br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>#include<memory><br><br>#include<iostream><br><br>usingnamespace std;<br><br><br><br>structS {<br><br>S(){ cout << "make an S\n"; }<br><br>~S(){ cout << "destroy an S\n"; }<br><br>S(constS&) { cout << "copy initialize an S\n"; }<br><br>S&operator=(const S&) { cout << "copy assign an S\n"; }<br><br>};<br><br><br><br>S*f()<br><br>{<br><br>returnnew S; // 璋佽璐熻矗閲婃斁榪欎釜S錛?br><br>};<br><br><br><br>auto_ptr<S>g()<br><br>{<br><br>returnauto_ptr<S>(new S); // 鏄懼紡浼犻掕礋璐i噴鏀捐繖涓猄<br><br>}<br><br><br><br>intmain()<br><br>{<br><br>cout<< "start main\n";<br><br>S*p = f();<br><br>cout<< "after f() before g()\n";<br><br>// S*q = g(); // 灝嗚緙栬瘧鍣ㄦ崟鎹?br><br>auto_ptr<S>q = g();<br><br>cout<< "exit main\n";<br><br>//*p浜х敓浜嗗唴瀛樻硠婕?br><br>//*q琚嚜鍔ㄩ噴鏀?br><br>}</div> </div> <br><br>鍦ㄦ洿涓鑸殑鎰忎箟涓婅冭檻璧勬簮錛岃屼笉浠呬粎鏄唴瀛樸?br><br><br><br>濡傛灉鍦ㄤ綘鐨勭幆澧冧腑涓嶈兘緋葷粺鍦板簲鐢ㄨ繖浜涙妧宸э紙渚嬪錛屼綘蹇呴』浣跨敤鍒殑鍦版柟鐨勪唬鐮侊紝鎴栬呬綘鐨勭▼搴忕殑鍙︿竴閮ㄥ垎綆鐩存槸鍘熷浜虹被錛堣瘧娉細鍘熸枃鏄疦eanderthals錛屽凹瀹夊痙鐗逛漢錛屾棫鐭沖櫒鏃朵唬騫挎硾鍒嗗竷鍦ㄦ媧茬殑鐚夸漢錛夊啓鐨勶紝濡傛絳夌瓑錛夛紝閭d箞娉ㄦ剰浣跨敤涓涓唴瀛樻硠婕忔嫻嬪櫒浣滀負寮鍙戣繃紼嬬殑涓閮ㄥ垎錛屾垨鑰呮彃鍏ヤ竴涓瀮鍦炬敹闆嗗櫒錛坓arbage collector錛夈?br><br><br><br>鎴戜負浠涔堝湪鎹曡幏涓涓紓甯鎬箣鍚庡氨涓嶈兘緇х畫錛?br><br><br><br>鎹㈠彞璇濊錛孋++涓轟粈涔堜笉鎻愪緵涓縐嶇畝鍗曠殑鏂瑰紡錛岃紼嬪簭鑳藉鍥炲埌寮傚父鎶涘嚭鐐逛箣鍚庯紝騫剁戶緇墽琛岋紵<br><br><br><br>涓昏鐨勫師鍥犳槸錛屽鏋滀粠寮傚父澶勭悊涔嬪悗緇х畫錛岄偅涔堟棤娉曢鐭ユ幏鍑虹偣涔嬪悗鐨勪唬鐮佸浣曞寰呭紓甯稿鐞嗭紝鏄惁浠呬粎緇х畫鎵ц錛屽氨璞′粈涔堜篃娌℃湁鍙戠敓涓鏍楓傚紓甯稿鐞嗚呮棤娉曠煡閬擄紝鍦ㄧ戶緇箣鍓嶏紝鏈夊叧鐨勪笂涓嬫枃鐜錛坈ontext錛夋槸鍚︽槸“姝g‘”鐨勩傝璁╄繖鏍風殑浠g爜姝g‘鎵ц錛屾姏鍑哄紓甯哥殑緙栧啓鑰呬笌鎹曡幏寮傚父鐨勭紪鍐欒呭繀欏誨褰兼鐨勪唬鐮佷笌涓婁笅鏂囩幆澧冮兘闈炲父鐔熸倝鎵嶈銆傝繖鏍蜂細浜х敓闈炲父澶嶆潅鐨勪緷璧栨э紝鍥犳鏃犺鍦ㄤ粈涔堟儏鍐典笅錛岄兘浼氬鑷翠竴緋誨垪涓ラ噸鐨勭淮鎶ら棶棰樸?br><br><br><br>褰撴垜璁捐C++鐨勫紓甯稿鐞嗘満鍒舵椂錛屾垜鏇劇粡璁ょ湡鍦拌冭檻榪囧厑璁歌繖縐嶇戶緇殑鍙兘鎬э紝鑰屼笖鍦ㄦ爣鍑嗗寲鐨勮繃紼嬩腑錛岃繖涓棶棰樿闈炲父璇︾粏鍦拌璁鴻繃銆傝鍙傝銆奀++璇█鐨勮璁″拰婕斿彉銆嬩腑鐨勫紓甯稿鐞嗙珷鑺傘?br><br><br><br>鍦ㄤ竴嬈℃柊闂葷粍鐨勮璁轟腑錛屾垜鏇劇粡浠ヤ竴縐嶇◢寰笉鍚岀殑鏂瑰紡鍥炵瓟榪囪繖涓棶棰樸?br><br><br><br>涓轟粈涔圕++涓病鏈夌浉褰撲簬realloc()鐨勫嚱鏁幫紵<br><br><br><br>濡傛灉浣犻渶瑕侊紝浣犲綋鐒跺彲浠ヤ嬌鐢╮ealloc()銆備絾鏄紝realloc()浠呬粎淇濊瘉鑳藉伐浣滀簬榪欐牱鐨勬暟緇勪箣涓婏細瀹冧滑琚玬alloc()錛堟垨鑰呯被浼肩殑鍑芥暟錛夊垎閰嶏紝鍖呭惈涓浜涙病鏈夌敤鎴峰畾涔夌殑澶嶅埗鏋勯犲嚱鏁幫紙copy constructors錛夌殑瀵硅薄銆傝屼笖錛岃璁頒綇錛屼笌閫氬父鐨勬湡鏈涚浉鍙嶏紝realloc()鏈夋椂涔熷繀欏誨鍒跺畠鐨勫弬鏁版暟緇勩?br><br><br><br>鍦–++涓紝澶勭悊鍐呭瓨閲嶆柊鍒嗛厤鐨勬洿濂界殑鏂規硶鏄紝浣跨敤鏍囧噯搴撲腑鐨勫鍣紝渚嬪vector錛屽茍璁╁畠鑷垜澧為暱銆?br><br><br><br>濡備綍浣跨敤寮傚父錛?br><br><br><br>鍙傝銆奀++紼嬪簭璁捐璇█銆嬬4绔狅紝絎?.3鑺傦紝浠ュ強闄勫綍E銆傝繖涓檮褰曢拡瀵圭殑鏄浣曞湪瑕佹眰鑻涘埢鐨勭▼搴忎腑鍐欏嚭寮傚父瀹夊叏鐨勪唬鐮佺殑鎶宸э紝鑰屼笉鏄拡瀵瑰垵瀛﹁呯殑銆備竴涓叧閿殑鎶鏈槸“璧勬簮鑾峰緱鍗沖垵濮嬪寲”錛坮esourceacquisiton is initialization錛夛紝瀹冧嬌鐢ㄤ竴浜涙湁鏋愭瀯鍑芥暟鐨勭被錛屾潵瀹炵幇寮哄埗鐨勮祫婧愮鐞嗐?br><br><br><br>鎬庢牱浠庤緭鍏ヤ腑璇誨彇涓涓瓧絎︿覆錛?br><br><br><br>浣犲彲浠ョ敤榪欑鏂瑰紡璇誨彇涓涓崟鐙殑浠ョ┖鏍肩粨鏉熺殑璇嶏細<br><br><br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>#include<iostream><br><br>#include<string><br><br>usingnamespace std;<br><br><br><br>intmain()<br><br>{<br><br>cout<< "Please enter a word:\n";<br><br><br><br>strings;<br><br>cin>>s;<br><br><br><br>cout<< "You entered " << s << '\n';<br><br>}</div> </div> <br><br>娉ㄦ剰錛岃繖閲屾病鏈夋樉寮忕殑鍐呭瓨綆$悊錛屼篃娌℃湁鍙兘瀵艱嚧婧㈠嚭鐨勫浐瀹氬ぇ灝忕殑緙撳啿鍖恒?br><br><br><br>濡傛灉浣犵‘瀹炴兂寰楀埌涓琛岃屼笉鏄竴涓崟鐙殑璇嶏紝鍙互榪欐牱鍋氾細<br><br><br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>#include<iostream><br><br>#include<string><br><br>usingnamespace std;<br><br><br><br>intmain()<br><br>{<br><br>cout<< "Please enter a line:\n";<br><br><br><br>strings;<br><br>getline(cin,s);<br><br><br><br>cout<< "You entered " << s << '\n';<br><br>}</div> </div> <br><br>鍦ㄣ奀++紼嬪簭璁捐璇█銆嬶紙鍙湪綰胯幏寰楋級鐨勭3绔狅紝鍙互鎵懼埌涓涓璇稿瀛楃涓蹭笌嫻佽繖鏍風殑鏍囧噯搴撳伐鍏風殑綆浠嬨傚浜庝嬌鐢–涓嶤++榪涜綆鍗曡緭鍏ヨ緭鍑虹殑璇︾粏姣旇緝錛屽弬瑙佹垜鐨勬枃绔犮婂皢鏍囧噯C++浣滀負涓縐嶆柊鐨勮璦鏉ュ涔犮?Learning Standard C++ as aNew Language)錛屼綘鍙互鍦ㄦ湰浜鴻憲浣滃垪琛?my publications list)涓笅杞藉埌瀹冦?br><br><br><br>涓轟粈涔圕++涓嶆彁渚?#8220;finally”鐨勬瀯閫狅紵<br><br><br><br>鍥犱負C++鎻愪緵浜嗗彟澶栦竴縐嶆柟娉曪紝瀹冨嚑涔庢繪槸鏇村ソ鐨勶細“璧勬簮鑾峰緱鍗沖垵濮嬪寲”錛坮esourceacquisiton is initialization錛夋妧鏈傚熀鏈殑鎬濊礬鏄紝閫氳繃涓涓眬閮ㄥ璞℃潵琛ㄧ幇璧勬簮錛屼簬鏄眬閮ㄥ璞$殑鏋愭瀯鍑芥暟灝嗕細閲婃斁璧勬簮銆傝繖鏍鳳紝紼嬪簭鍛樺氨涓嶄細蹇樿閲婃斁璧勬簮浜嗐備婦渚嬫潵璇達細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>classFile_handle {<br><br>FILE*p;<br><br>public:<br><br>File_handle(constchar* n, const char* a)<br><br>{p = fopen(n,a); if (p==0) throw Open_error(errno); }<br><br>File_handle(FILE*pp)<br><br>{p = pp; if (p==0) throw Open_error(errno); }<br><br><br><br>~File_handle(){ fclose(p); }<br><br><br><br>operatorFILE*() { return p; }<br><br><br><br>//...<br><br>};<br><br><br><br>voidf(const char* fn)<br><br>{<br><br>File_handlef(fn,"rw"); //鎵撳紑fn榪涜璇誨啓<br><br>//閫氳繃f浣跨敤鏂囦歡<br><br>}</div> </div> <br><br>鍦ㄤ竴涓郴緇熶腑錛岄渶瑕佷負姣忎竴涓祫婧愰兘浣跨敤涓涓?#8220;璧勬簮鍙ユ焺”綾匯傛棤璁哄浣曪紝鎴戜滑涓嶉渶瑕佷負姣忎竴涓祫婧愯幏寰楅兘鍐欏嚭“finally”璇彞銆傚湪瀹炴椂緋葷粺涓紝璧勬簮鑾峰緱瑕佽繙榪滃浜庤祫婧愮殑縐嶇被錛屽洜姝ゅ拰浣跨敤“finally”鏋勯犵浉姣旓紝“璧勬簮鑾峰緱鍗沖垵濮嬪寲”鎶鏈細浜х敓灝戝緱澶氱殑浠g爜銆?br><br><br><br>浠涔堟槸鑷姩鎸囬拡錛坅uto_ptr錛夛紝涓轟粈涔堟病鏈夎嚜鍔ㄦ暟緇勶紙auto_array錛夛紵<br><br><br><br>auto_ptr鏄竴涓潪甯哥畝鍗曠殑鍙ユ焺綾葷殑渚嬪瓙錛屽湪<memory>涓畾涔夛紝閫氳繃“璧勬簮鑾峰緱鍗沖垵濮嬪寲”鎶鏈敮鎸佸紓甯稿畨鍏ㄣ俛uto_ptr淇濆瓨鐫涓涓寚閽堬紝鑳藉璞℃寚閽堜竴鏍瘋浣跨敤錛屽茍鍦ㄧ敓瀛樻湡緇撴潫鏃墮噴鏀炬寚鍚戠殑瀵硅薄銆備婦渚嬶細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>#include<memory><br><br>usingnamespace std;<br><br><br><br>structX {<br><br>intm;<br><br>//..<br><br>};<br><br><br><br>voidf()<br><br>{<br><br>auto_ptr<X>p(new X);<br><br>X*q = new X;<br><br><br><br>p->m++; //璞′竴涓寚閽堜竴鏍蜂嬌鐢╬<br><br>q->m++;<br><br>//...<br><br><br><br>deleteq;<br><br>}</div> </div> <br><br>濡傛灉鍦?..閮ㄥ垎鎶涘嚭浜嗕竴涓紓甯革紝p鎸佹湁鐨勫璞″皢琚玜uto_ptr鐨勬瀽鏋勫嚱鏁版紜湴閲婃斁錛岃宷鎸囧悜鐨刋瀵硅薄鍒欎駭鐢熶簡鍐呭瓨娉勬紡銆傛洿澶氱殑緇嗚妭錛屽弬瑙併奀++紼嬪簭璁捐璇█銆?4.4.2鑺傘?br><br><br><br>auto_ptr鏄竴涓潪甯哥畝鍗曠殑綾匯傜壒鍒湴錛屽畠涓嶆槸涓涓紩鐢ㄨ鏁幫紙reference counted錛夌殑鎸囬拡銆傚鏋滀綘灝嗕竴涓猘uto_ptr璧嬪肩粰鍙︿竴涓紝閭d箞琚祴鍊肩殑auto_ptr灝嗘寔鏈夋寚閽堬紝鑰屽師鏉ョ殑auto_ptr灝嗘寔鏈?銆備婦渚嬶細<br><br><br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>#include<memory><br><br>#include<iostream><br><br>usingnamespace std;<br><br><br><br>structX {<br><br>intm;<br><br>//..<br><br>};<br><br><br><br>intmain()<br><br>{<br><br>auto_ptr<X>p(new X);<br><br>auto_ptr<X>q(p);<br><br>cout<< "p " << p.get() << " q " <<q.get() << "\n";<br><br>}</div> </div> <br><br>灝嗕細鎵撳嵃鍑轟竴涓寚鍚?鐨勬寚閽堝拰涓涓寚鍚戦潪0鐨勬寚閽堛備緥濡傦細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>p0x0 q 0x378d0</div> </div> <br><br>auto_ptr::get()榪斿洖閭d釜杈呭姪鐨勬寚閽堛?br><br><br><br>榪欑“杞Щ”璇箟涓嶅悓浜庨氬父鐨?#8220;澶嶅埗”璇箟錛岃繖鏄護浜烘儕璁剁殑銆傜壒鍒湴錛屾案榪滀笉瑕佷嬌鐢╝uto_ptr浣滀負涓涓爣鍑嗗鍣ㄧ殑鎴愬憳銆傛爣鍑嗗鍣ㄩ渶瑕侀氬父鐨?#8220;澶嶅埗”璇箟銆備緥濡傦細<br><br><br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>std::vector<auto_ptr<X>>v; // 閿欒</div> </div> <br><br>auto_ptr鍙寔鏈夋寚鍚戜竴涓崟鐙厓绱犵殑鎸囬拡錛岃屼笉鏄寚鍚戜竴涓暟緇勭殑鎸囬拡錛?br><br><br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>voidf(int n)<br><br>{<br><br>auto_ptr<X>p(new X[n]); //閿欒<br><br>//...<br><br>}</div> </div> <br><br>榪欐槸閿欒鐨勶紝鍥犱負鏋愭瀯鍑芥暟浼氳皟鐢╠elete鑰屼笉鏄痙elete[]鏉ラ噴鏀炬寚閽堬紝榪欐牱灝變笉浼氳皟鐢ㄤ綑涓嬬殑n-1涓猉鐨勬瀽鏋勫嚱鏁般?br><br><br><br>閭d箞鎴戜滑闇瑕佷竴涓猘uto_array鏉ユ寔鏈夋暟緇勫悧錛熶笉銆傛病鏈塧uto_array銆傚師鍥犳槸鏍規湰娌℃湁榪欑闇瑕併傛洿濂界殑瑙e喅鏂規鏄嬌鐢╲ector錛?br><br><br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>voidf(int n)<br><br>{<br><br>vector<X>v(n);<br><br>//...<br><br>}</div> </div> <br><br>褰?..閮ㄥ垎鍙戠敓寮傚父鏃訛紝v鐨勬瀽鏋勫嚱鏁頒細琚紜湴璋冪敤銆?br><br><br><br>鍙互娣峰悎浣跨敤C椋庢牸涓嶤++椋庢牸鐨勫唴瀛樺垎媧句笌閲嶆柊鍒嗛厤鍚楋紵<br><br><br><br>鍦ㄨ繖縐嶆剰涔変笂鏄彲浠ョ殑錛氫綘鍙互鍦ㄥ悓涓涓▼搴忎腑浣跨敤malloc()鍜宯ew銆?br><br><br><br>鍦ㄨ繖縐嶆剰涔変笂鏄笉琛岀殑錛氫綘涓嶈兘浣跨敤malloc()鏉ュ緩绔嬩竴涓璞★紝鍙堥氳繃delete鏉ラ噴鏀懼畠銆備綘涔熶笉鑳界敤new寤虹珛涓涓柊鐨勫璞★紝鐒跺悗閫氳繃free()鏉ラ噴鏀懼畠錛屾垨鑰呴氳繃realloc()鍦ㄦ暟緇勪腑鍐嶅緩绔嬩竴涓柊鐨勩?br><br><br><br>C++涓殑new鍜宒elete鎿嶄綔鍙互淇濊瘉姝g‘鐨勬瀯閫犲拰鏋愭瀯錛氭瀯閫犲嚱鏁板拰鏋愭瀯鍑芥暟鍦ㄩ渶瑕佸畠浠殑鏃跺欒璋冪敤銆侰椋庢牸鐨勫嚱鏁癮lloc(), calloc(), free(), 鍜宺ealloc()鍗翠笉鑳戒繚璇佽繖涓鐐廣傛澶栵紝鐢╪ew鍜宒elete鏉ヨ幏寰楀拰閲婃斁鐨勫師濮嬪唴瀛橈紝騫朵笉涓瀹氳兘淇濊瘉涓巑alloc()鍜宖ree()鍏煎銆傚鏋滆繖縐嶆販鍚堢殑椋庢牸鍦ㄤ綘鐨勭郴緇熶腑鑳藉榪愮敤錛屽彧鑳借鏄綘璧拌繍鈥斺旀殏鏃剁殑銆?br><br><br><br>濡傛灉浣犺寰楅渶瑕佷嬌鐢╮ealloc()鈥斺旀垨鑰呰鍋氭洿澶氣斺旇冭檻浣跨敤鏍囧噯搴撲腑鐨剉ector銆備緥濡傦細<br><br><br><br>//浠庤緭鍏ヤ腑灝嗚瘝璇誨彇鍒頒竴涓瓧絎︿覆vector涓?br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>vector<string>words;<br><br>strings;<br><br>while(cin>>s && s!=".") words.push_back(s);</div> </div> <br><br>vector浼氳闇瑕佽嚜鍔ㄥ闀褲?br><br><br><br>鏇村鐨勪緥瀛愪笌璁ㄨ錛屽弬瑙佹垜鐨勬枃绔犮婂皢鏍囧噯C++浣滀負涓縐嶆柊鐨勮璦鏉ュ涔犮?Learning Standard C++ as aNew Language)錛屼綘鍙互鍦ㄦ湰浜鴻憲浣滃垪琛?my publications list)涓笅杞藉埌瀹冦?br><br><br><br>鎴戜負浠涔堝繀欏諱嬌鐢ㄤ竴涓犲瀷鏉ヨ漿鎹?void錛?br><br><br><br>鍦–璇█涓紝浣犲彲浠ラ殣寮忓湴灝?void杞崲涓?T銆傝繖鏄笉瀹夊叏鐨勩傝冭檻涓涓嬶細<br><br><br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>#include<stdio.h><br><br><br><br>intmain()<br><br>{<br><br>chari = 0;<br><br>charj = 0;<br><br>char*p = &i;<br><br>void*q = p;<br><br>int*pp = q; /* 涓嶅畨鍏ㄧ殑錛屽湪C涓彲浠ワ紝C++涓嶈 */<br><br><br><br>printf("%d%d\n",i,j);<br><br>*pp= -1; /* 瑕嗙洊浜嗕粠i寮濮嬬殑鍐呭瓨 */<br><br>printf("%d%d\n",i,j);<br><br>}</div> </div> <br><br>浣跨敤涓涓茍涓嶆寚鍚慣綾誨瀷鐨凾*灝嗘槸涓鍦虹伨闅俱傚洜姝わ紝鍦–++涓紝濡傛灉浠庝竴涓獀oid*寰楀埌涓涓猅*錛屼綘蹇呴』榪涜鏄懼紡杞崲銆備婦渚嬫潵璇達紝瑕佸緱鍒頒笂鍒楃▼搴忕殑榪欎釜浠や漢鍒壄鐨勬晥鏋滐紝浣犲彲浠ヨ繖鏍峰啓錛?br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>int*pp = (int*)q;</div> </div> <br><br>鎴栬呬嬌鐢ㄤ竴涓柊鐨勭被鍨嬮犲瀷錛屼互浣胯繖縐嶆病鏈夋鏌ョ殑綾誨瀷杞崲鎿嶄綔鍙樺緱鏇村姞娓呮櫚錛?br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>int*pp = static_cast<int*>(q);</div> </div> <br><br>閫犲瀷琚渶濂藉湴閬垮厤浜嗐?br><br><br><br>鍦–璇█涓紝榪欑涓嶅畨鍏ㄧ殑杞崲鏈甯歌鐨勫簲鐢ㄤ箣涓錛屾槸灝唌alloc()鐨勭粨鏋滆祴浜堜竴涓悎閫傜殑鎸囬拡銆備緥濡傦細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>int*p = malloc(sizeof(int));</div> </div> <br><br>鍦–++涓紝浣跨敤綾誨瀷瀹夊叏鐨刵ew鎿嶄綔絎︼細<br><br><br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>int*p = new int;</div> </div> <br><br>闄勫甫鍦幫紝new鎿嶄綔絎﹁繕鎻愪緵浜嗚儨榪噈alloc()鐨勬柊鐗規э細<br><br><br><br>new涓嶄細鍋剁劧鍒嗛厤閿欒鐨勫唴瀛樻暟閲忥紱<br><br>new浼氶殣寮忓湴媯鏌ュ唴瀛樿楀敖鎯呭喌錛岃屼笖<br><br>new鎻愪緵浜嗗垵濮嬪寲銆?br><br><br><br>涓句緥錛? <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content><br><br>typedefstd::complex<double> cmplx;<br><br><br><br>/*C椋庢牸: */<br><br>cmplx*p = (cmplx*)malloc(sizeof(int)); /* 閿欒錛氱被鍨嬩笉姝g‘ */<br><br>/*蹇樿嫻嬭瘯p==0 */<br><br>if(*p == 7) { /* ... */ } /*緋熺硶錛屽繕璁頒簡鍒濆鍖?p */<br><br><br><br>//C++椋庢牸:<br><br>cmplx*q = new cmplx(1,2); // 濡傛灉鍐呭瓨鑰楀敖錛屽皢鎶涘嚭涓涓猙ad_alloc寮傚父<br><br>if(*q == 7) { /* ... */ }</div> </div> <br><br>鎴戝浣曞畾涔変竴涓被鍐呴儴錛坕n-class錛夌殑甯擱噺錛?br><br><br><br>濡傛灉浣犻渶瑕佷竴涓氳繃甯擱噺琛ㄨ揪寮忔潵瀹氫箟鐨勫父閲忥紝渚嬪鏁扮粍鐨勮寖鍥達紝浣犳湁涓ょ閫夋嫨錛? <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content><br><br>classX {<br><br>staticconst int c1 = 7;<br><br>enum{ c2 = 19 };<br><br><br><br>charv1[c1];<br><br>charv2[c2];<br><br><br><br>//...<br><br>};<br><br></div> </div> 涔嶇湅璧鋒潵錛宑1鐨勫0鏄庤鏇村姞娓呮櫚錛屼絾鏄娉ㄦ剰鐨勬槸錛屼嬌鐢ㄨ繖縐嶇被鍐呴儴鐨勫垵濮嬪寲璇硶鐨勬椂鍊欙紝甯擱噺蹇呴』鏄涓涓父閲忚〃杈懼紡鍒濆鍖栫殑鏁村瀷鎴栨灇涓劇被鍨嬶紝鑰屼笖蹇呴』鏄痵tatic鍜宑onst褰㈠紡銆傝繖鏄緢涓ラ噸鐨勯檺鍒訛細 <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content><br><br>classY {<br><br>constint c3 = 7; // 閿欒錛氫笉鏄痵tatic<br><br>staticint c4 = 7; // 閿欒錛氫笉鏄痗onst<br><br>staticconst float c5 = 7; // 閿欒錛氫笉鏄暣鍨?br><br>};</div> </div> <br><br>鎴戝懼悜浣跨敤鏋氫婦鐨勬柟寮忥紝鍥犱負瀹冩洿鍔犳柟渚匡紝鑰屼笖涓嶄細璇變嬌鎴戝幓浣跨敤涓嶈鑼冪殑綾誨唴鍒濆鍖栬娉曘?br><br><br><br>閭d箞錛屼負浠涔堜細瀛樺湪榪欑涓嶆柟渚跨殑闄愬埗鍛紵涓鑸潵璇達紝綾誨湪涓涓ご鏂囦歡涓澹版槑錛岃屽ご鏂囦歡琚寘鍚埌璁稿浜掔浉璋冪敤鐨勫崟鍏冨幓銆備絾鏄紝涓轟簡閬垮厤澶嶆潅鐨勭紪璇戝櫒瑙勫垯錛孋++瑕佹眰姣忎竴涓璞″彧鏈変竴涓崟鐙殑瀹氫箟銆傚鏋淐++鍏佽鍦ㄧ被鍐呴儴瀹氫箟涓涓拰瀵硅薄涓鏍峰崰鎹唴瀛樼殑瀹炰綋鐨勮瘽錛岃繖縐嶈鍒欏氨琚牬鍧忎簡銆傚浜嶤++鍦ㄨ繖涓璁′笂鐨勬潈琛★紝璇峰弬瑙併奀++璇█鐨勮璁″拰婕斿彉銆嬨?br><br><br><br>濡傛灉浣犱笉闇瑕佺敤甯擱噺琛ㄨ揪寮忔潵鍒濆鍖栧畠錛岄偅涔堝彲浠ヨ幏寰楁洿澶х殑寮規э細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>classZ {<br><br>staticchar* p; // 鍦ㄥ畾涔変腑鍒濆鍖?br><br>constint i; // 鍦ㄦ瀯閫犲嚱鏁頒腑鍒濆鍖?br><br>public:<br><br>Z(intii) :i(ii) { }<br><br>};<br><br><br><br>char*Z::p = "hello, there";<br><br></div> </div> 浣犲彲浠ヨ幏鍙栦竴涓猻tatic鎴愬憳鐨勫湴鍧錛屽綋涓斾粎褰撳畠鏈変竴涓被澶栭儴鐨勫畾涔夌殑鏃跺欙細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>classAE {<br><br>//...<br><br>public:<br><br>staticconst int c6 = 7;<br><br>staticconst int c7 = 31;<br><br>};<br><br><br><br>constint AE::c7; // 瀹氫箟<br><br><br><br>intf()<br><br>{<br><br>constint* p1 = &AE::c6; // 閿欒錛歝6娌℃湁宸﹀?br><br>constint* p2 = &AE::c7; // ok<br><br>//...<br><br>}</div> </div> <br><br>涓轟粈涔坉elete涓嶄細灝嗘搷浣滄暟緗?錛?br><br><br><br>鑰冭檻涓涓嬶細 <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content><br><br>deletep;<br><br>//...<br><br>deletep;<br><br></div> </div> 濡傛灉鍦?..閮ㄥ垎娌℃湁娑夊強鍒皃鐨勮瘽錛岄偅涔堢浜屼釜“delete p;”灝嗘槸涓涓弗閲嶇殑閿欒錛屽洜涓篊++鐨勫疄鐜幫紙璇戞敞錛氬師鏂囦負a C++ implementation錛屽綋鎸嘨C++榪欐牱鐨勫疄鐜頒簡C++鏍囧噯鐨勫叿浣撳伐鍏鳳級涓嶈兘鏈夋晥鍦伴槻姝㈣繖涓鐐癸紙闄ら潪閫氳繃闈炴寮忕殑棰勯槻鎵嬫錛夈傛棦鐒禿elete 0浠庡畾涔変笂鏉ヨ鏄棤瀹崇殑錛岄偅涔堜竴涓畝鍗曠殑瑙e喅鏂規灝辨槸錛屼笉綆″湪浠涔堝湴鏂規墽琛屼簡“delete p;”錛岄殢鍚庨兘鎵ц“p=0;”銆備絾鏄紝C++騫朵笉鑳戒繚璇佽繖涓鐐廣?br><br><br><br>涓涓師鍥犳槸錛宒elete鐨勬搷浣滄暟騫朵笉闇瑕佷竴涓乏鍊鹼紙lvalue錛夈傝冭檻涓涓嬶細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>deletep+1;<br><br>deletef(x);<br><br></div> </div> 鍦ㄨ繖閲岋紝琚墽琛岀殑delete騫舵病鏈夋嫢鏈変竴涓彲浠ヨ璧嬩簣0鐨勬寚閽堛傝繖浜涗緥瀛愬彲鑳藉緢灝戣錛屼絾瀹冧滑鐨勭‘鎸囧嚭浜嗭紝涓轟粈涔堜繚璇?#8220;浠諱綍鎸囧悜琚垹闄ゅ璞$殑鎸囬拡閮戒負0”鏄笉鍙兘鐨勩傜粫榪囪繖鏉?#8220;瑙勫垯”鐨勪竴涓畝鍗曠殑鏂規硶鏄紝鏈変袱涓寚閽堟寚鍚戝悓涓涓璞★細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>T*p = new T;<br><br>T*q = p;<br><br>deletep;<br><br>deleteq; // 緋熺硶錛?br><br></div> </div> C++鏄懼紡鍦板厑璁竏elete鎿嶄綔灝嗘搷浣滄暟宸﹀肩疆0錛岃屼笖鎴戞浘緇忓笇鏈汣++鐨勫疄鐜拌兘澶熷仛鍒拌繖涓鐐癸紝浣嗚繖縐嶆濇兂鐪嬫潵騫舵病鏈夊湪C++鐨勫疄鐜頒腑鍙樺緱嫻佽銆?br><br><br><br>濡傛灉浣犺涓烘寚閽堢疆0寰堥噸瑕侊紝鑰冭檻浣跨敤涓涓攢姣佺殑鍑芥暟錛?br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>template<classT> inline void destroy(T*& p) { delete p; p = 0; }</div> </div> <br><br>鑰冭檻涓涓嬶紝榪欎篃鏄負浠涔堥渶瑕佷緷闈犳爣鍑嗗簱鐨勫鍣ㄣ佸彞鏌勭瓑絳夛紝鏉ュ皢瀵筺ew鍜宒elete鐨勬樉寮忚皟鐢ㄩ檷鍒版渶浣庨檺搴︾殑鍙︿竴涓師鍥犮?br><br><br><br>娉ㄦ剰錛岄氳繃寮曠敤鏉ヤ紶閫掓寚閽堬紙浠ュ厑璁告寚閽堣緗?錛夋湁涓涓澶栫殑濂藉錛岃兘闃叉destroy()鍦ㄥ彸鍊間笂錛坮value錛夎璋冪敤錛?br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>int*f();<br><br>int*p;<br><br>//...<br><br>destroy(f()); //閿欒錛氬簲璇ヤ嬌鐢ㄤ竴涓潪甯擱噺錛坣on-const錛夌殑寮曠敤浼犻掑彸鍊?br><br>destroy(p+1); //閿欒錛氬簲璇ヤ嬌鐢ㄤ竴涓潪甯擱噺錛坣on-const錛夌殑寮曠敤浼犻掑彸鍊?br><br></div> </div> 鎴戣兘澶熷啓“void main()”鍚楋紵<br><br><br><br>榪欑瀹氫箟錛?br><br><br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>voidmain() { /* ... */ }</div> </div> <br><br>鍦–++涓粠鏈鍏佽錛屽湪C璇█涓篃鏄竴鏍楓傚弬瑙両SO C++鏍囧噯3.6.1[2]鎴栬匢SO C鏍囧噯5.1.2.2.1銆傝鑼冪殑瀹炵幇鎺ュ彈榪欑鏂瑰紡錛?br><br><br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>intmain() { /* ... */ }</div> </div> <br><br>鍜?br><br><br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>intmain(int argc, char* argv[]) { /* ... */ }</div> </div> <br><br>涓涓鑼冪殑瀹炵幇鍙兘鎻愪緵璁稿鐗堟湰鐨刴ain()錛屼絾瀹冧滑閮藉繀欏昏繑鍥瀒nt綾誨瀷銆俶ain()榪斿洖鐨刬nt鍊鹼紝鏄▼搴忚繑鍥炰竴涓肩粰璋冪敤瀹冪殑緋葷粺鐨勬柟寮忋傚湪閭d簺涓嶅叿澶囪繖縐嶆柟寮忕殑緋葷粺涓紝榪斿洖鍊艱蹇界暐浜嗭紝浣嗚繖騫朵笉浣?#8220;void main()”鍦–++鎴朇涓垚涓哄悎娉曠殑銆傚嵆浣夸綘鐨勭紪璇戝櫒鎺ュ彈浜?#8220;void main()”錛屼篃瑕侀伩鍏嶄嬌鐢ㄥ畠錛屽惁鍒欎綘灝嗗啋鐫琚獵鍜孋++紼嬪簭鍛樿涓烘棤鐭ョ殑椋庨櫓銆?br><br><br><br>鍦–++涓紝main()騫朵笉闇瑕佸寘鍚樉寮忕殑return璇彞銆傚湪榪欑鎯呭喌涓嬶紝榪斿洖鍊兼槸0錛岃〃紺烘墽琛屾垚鍔熴備緥濡傦細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>#include<iostream><br><br><br><br>intmain()<br><br>{<br><br>std::cout<< "This program returns the integer value 0\n";<br><br>}<br><br></div> </div> 娉ㄦ剰錛屾棤璁烘槸ISO C++榪樻槸C99錛岄兘涓嶅厑璁稿湪澹版槑涓紡鎺夌被鍨嬨傞偅灝辨槸璇達紝涓嶤89鍜孉RM C++褰㈡垚瀵圭収錛屽綋澹版槑涓己灝戠被鍨嬫椂錛屽茍涓嶄細淇濊瘉鏄?#8220;int”銆備簬鏄細 <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content><br><br>#include<iostream><br><br><br><br>main(){ /* ... */ }</div> </div> <br><br>鏄敊璇殑錛屽洜涓虹己灝憁ain()鐨勮繑鍥炵被鍨嬨?br><br><br><br>涓轟粈涔堟垜涓嶈兘閲嶈澆鐐圭鍙鳳紝::錛宻izeof錛岀瓑絳夛紵<br><br><br><br>澶у鏁扮殑榪愮畻絎﹁兘澶熻紼嬪簭鍛橀噸杞姐備緥澶栫殑鏄細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>.(鐐圭鍙? :: ?: sizeof</div> </div> <br><br>騫舵病鏈変粈涔堟牴鏈殑鍘熷洜瑕佺姝㈤噸杞?:銆備粎浠呮槸鍥犱負錛屾垜娌℃湁鍙戠幇鏈夊摢縐嶇壒孌婄殑鎯呭喌闇瑕侀噸杞戒竴涓笁鍏冭繍綆楃銆傛敞鎰忎竴涓噸杞戒簡 琛ㄨ揪寮?錛熻〃杈懼紡2錛氳〃杈懼紡3 鐨勫嚱鏁幫紝涓嶈兘澶熶繚璇佽〃杈懼紡2錛氳〃杈懼紡3涓彧鏈変竴涓細琚墽琛屻?br><br><br><br>Sizeof涓嶈兘澶熻閲嶈澆鏄洜涓哄唴寤虹殑鎿嶄綔錛坆uilt-in operations錛夛紝璇稿瀵逛竴涓寚鍚戞暟緇勭殑鎸囬拡榪涜澧為噺鎿嶄綔錛屽繀欏諱緷闈犲畠銆傝冭檻涓涓嬶細 <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content><br><br>Xa[10];<br><br>X*p = &a[3];<br><br>X*q = &a[3];<br><br>p++; //p鎸囧悜a[4]<br><br>//閭d箞p鐨勬暣鍨嬪煎繀欏繪瘮q鐨勬暣鍨嬪煎ぇ鍑轟竴涓猻izeof(X)</div> </div> <br><br>鎵浠ワ紝sizeof(X)涓嶈兘鐢辯▼搴忓憳鏉ヨ祴浜堜竴涓笉鍚岀殑鏂版剰涔夛紝浠ュ厤榪濆弽鍩烘湰鐨勮娉曘?br><br><br><br>鍦∟::m涓紝鏃犺N榪樻槸m閮戒笉鏄肩殑琛ㄨ揪寮忥紱N鍜宮鏄紪璇戝櫒鐭ラ亾鐨勫悕瀛楋紝::鎵ц涓涓紙緙栬瘧鏈熺殑錛夎寖鍥磋В鏋愶紝鑰屼笉鏄〃杈懼紡姹傚箋備綘鍙互鎯寵薄涓涓嬶紝鍏佽閲嶈澆x::y鐨勮瘽錛寈鍙兘鏄竴涓璞¤屼笉鏄竴涓悕瀛楃┖闂達紙namespace錛夋垨鑰呬竴涓被錛岃繖鏍峰氨浼氬鑷粹斺斾笌鍘熸潵鐨勮〃鐜扮浉鍙嶁斺斾駭鐢熸柊鐨勮娉曪紙鍏佽 琛ㄨ揪寮?::琛ㄨ揪寮?錛夈傚緢鏄庢樉錛岃繖縐嶅鏉傛т笉浼氬甫鏉ヤ換浣曞ソ澶勩?br><br><br><br>鐞嗚涓婃潵璇達紝.錛堢偣榪愮畻絎︼級鍙互閫氳繃浣跨敤鍜?>涓鏍風殑鎶鏈潵榪涜閲嶈澆銆備絾鏄紝榪欐牱鍋氫細瀵艱嚧涓涓棶棰橈紝閭e氨鏄棤娉曠‘瀹氭搷浣滅殑鏄噸杞戒簡.鐨勫璞″憿錛岃繕鏄氳繃.寮曠敤鐨勪竴涓璞°備緥濡傦細<br><br><br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>classY {<br><br>public:<br><br>voidf();<br><br>//...<br><br>};<br><br><br><br>classX { // 鍋囪浣犺兘閲嶈澆.<br><br>Y*p;<br><br>Y&operator.() { return *p; }<br><br>voidf();<br><br>//...<br><br>};<br><br><br><br>voidg(X& x)<br><br>{<br><br>x.f(); //X::f榪樻槸Y::f榪樻槸閿欒錛?br><br>}</div> </div> <br><br>榪欎釜闂鑳藉鐢ㄥ嚑縐嶄笉鍚岀殑鏂規硶瑙e喅銆傚湪鏍囧噯鍖栫殑鏃跺欙紝鍝鏂規硶鏈濂借繕娌℃湁瀹氳銆傛洿澶氱殑緇嗚妭錛岃鍙傝銆奀++璇█鐨勮璁″拰婕斿彉銆嬨?br><br><br><br>鎬庢牱灝嗕竴涓暣鍨嬪艱漿鎹負涓涓瓧絎︿覆錛?br><br><br><br>鏈綆鍗曠殑鏂規硶鏄嬌鐢ㄤ竴涓瓧絎︿覆嫻侊紙stringstream錛夛細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>#include<iostream><br><br>#include<string><br><br>#include<sstream><br><br>usingnamespace std;<br><br><br><br>stringitos(int i) // 灝唅nt杞崲鎴恠tring<br><br>{<br><br>stringstreams;<br><br>s<< i;<br><br>returns.str();<br><br>}<br><br><br><br>intmain()<br><br>{<br><br>inti = 127;<br><br>stringss = itos(i);<br><br>constchar* p = ss.c_str();<br><br><br><br>cout<< ss << " " << p << "\n";<br><br>}<br><br></div> </div> 鑷劧鍦幫紝榪欑鎶鏈兘澶熷皢浠諱綍浣跨敤<<杈撳嚭鐨勭被鍨嬭漿鎹負瀛楃涓層傚浜庡瓧絎︿覆嫻佺殑鏇村璇存槑錛屽弬瑙併奀++紼嬪簭璁捐璇█銆?1.5.3鑺傘?br><br><br><br>“int* p”姝g‘榪樻槸“int *p”姝g‘錛?br><br><br><br>浜岃呴兘鏄紜殑錛屽洜涓轟簩鑰呭湪C鍜孋++涓兘鏄湁鏁堢殑錛岃屼笖鎰忎箟瀹屽叏涓鏍楓傚氨璇█鐨勫畾涔変笌鐩稿叧鐨勭紪璇戝櫒鏉ヨ錛屾垜浠繕鍙互璇?#8220;int*p”鎴栬?#8220;int * p”銆?br><br><br><br>鍦?#8220;int* p”鍜?#8220;int *p”涔嬮棿鐨勯夋嫨涓庢紜垨閿欒鏃犲叧錛岃屽彧鍏充箮椋庢牸涓庝晶閲嶇偣銆侰渚ч噸琛ㄨ揪寮忥紱瀵瑰0鏄庡線寰姣斿彲鑳藉甫鏉ョ殑闂鑰冭檻寰楁洿澶氥傚彟涓鏂歸潰錛孋++鍒欓潪甯擱噸瑙嗙被鍨嬨?br><br><br><br>涓涓?#8220;鍏稿瀷鐨凜紼嬪簭鍛?#8221;鍐欐垚“int *p”錛屽茍涓旇В閲婅“*p琛ㄧず涓涓粈涔堟牱鐨刬nt”浠ュ己璋冭娉曪紝鑰屼笖鍙兘鎸囧嚭C錛堜笌C++錛夌殑璇硶鏉ヨ瘉鏄庤繖縐嶉鏍肩殑姝g‘鎬с傛槸鐨勶紝鍦ㄨ娉曚笂*琚粦瀹氬埌鍚嶅瓧p涓娿?br><br><br><br>涓涓?#8220;鍏稿瀷鐨凜++紼嬪簭鍛?#8221;鍐欐垚“int* p”錛屽茍涓旇В閲婅“p鏄竴涓寚鍚慽nt鐨勬寚閽堢被鍨?#8221;浠ュ己璋冪被鍨嬨傛槸鐨勶紝p鏄竴涓寚鍚慽nt鐨勬寚閽堢被鍨嬨傛垜鏄庣‘鍦板懼悜浜庤繖縐嶄晶閲嶆柟鍚戯紝鑰屼笖璁や負瀵逛簬瀛﹀ソ鏇村鐨勯珮綰++榪欐槸寰堥噸瑕佺殑銆?br><br><br><br>涓ラ噸鐨勬販涔憋紙浠呬粎錛夊彂鐢熷湪褰撲漢浠瘯鍥懼湪涓鏉″0鏄庝腑澹版槑鍑犱釜鎸囬拡鐨勬椂鍊欙細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>int*p, p1; // 涔熻鏄敊鐨勶細p1涓嶆槸涓涓猧nt*</div> </div> <br><br>鎶?鏀懼埌鍚嶅瓧榪欎竴杈癸紝鐪嬫潵涔熶笉鑳芥湁鏁堝湴鍑忓皯榪欑閿欒錛?br><br><br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>int*p, p1; // 涔熻鏄敊鐨勶紵</div> </div> <br><br>涓烘瘡涓涓悕瀛楀啓涓鏉″0鏄庢渶澶х▼搴﹀湴瑙e喅浜嗛棶棰樷斺旂壒鍒槸褰撴垜浠垵濮嬪寲鍙橀噺鐨勬椂鍊欍備漢浠嚑涔庝笉浼氳繖鏍峰啓錛? <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content><br><br>int*p = &i;<br><br>intp1 = p; // 閿欒錛歩nt鐢ㄤ竴涓猧nt*鍒濆鍖栦簡</div> </div> <br><br>濡傛灉浠栦滑鐪熺殑榪欎箞騫蹭簡錛岀紪璇戝櫒涔熶細鎸囧嚭銆?br><br><br><br>姣忓綋浜嬫儏鍙互鏈変袱縐嶆柟娉曞畬鎴愶紝鏈変漢灝變細榪鋒儜銆傛瘡褰撲簨鎯呬粎浠呮槸涓涓鏍肩殑闂錛屼簤璁哄氨浼氭病瀹屾病浜嗐備負姣忎竴涓寚閽堝啓涓鏉″0鏄庯紝鑰屼笖姘歌繙閮借鍒濆鍖栧彉閲忥紝榪欐牱錛屾販涔變箣婧愬氨娑堝け浜嗐傛洿澶氱殑鍏充簬C鐨勫0鏄庤娉曠殑璁ㄨ錛屽弬瑙併奀++璇█鐨勮璁″拰婕斿彉銆嬨?br><br><br><br>瀵逛簬鎴戠殑浠g爜錛屽摢涓縐嶅竷灞椋庢牸錛坙ayout style錛夋槸鏈濂界殑錛?br><br><br><br>榪欑椋庢牸闂灞炰簬涓漢鐨勭埍濂姐備漢浠線寰瀵瑰竷灞椋庢牸鐨勯棶棰樻寔鏈夊己鐑堢殑鎰忚錛屼笉榪囷紝涔熻涓璐ф瘮鏌愮鐗瑰畾鐨勯鏍兼洿鍔犻噸瑕併傝薄澶у鏁頒漢涓鏍鳳紝鎴戣姳浜嗗緢闀跨殑鏃墮棿錛屾潵涓烘垜鐨勫亸濂戒綔鍑轟竴涓浐瀹氱殑緇撹銆?br><br><br><br>鎴戜釜浜轟嬌鐢ㄩ氬父縐頒負“K&R”鐨勯鏍箋傚綋浣跨敤C璇█娌℃湁鐨勬瀯閫犲嚱鏁版椂錛岄渶瑕佸鍔犳柊鐨勪範鎯紝榪欐牱灝卞彉鎴愪簡涓縐嶆湁鏃惰縐頒負“Stroustrup”鐨勯鏍箋備緥濡傦細 <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content><br><br>classC : public B {<br><br>public:<br><br>//...<br><br>};<br><br><br><br>voidf(int* p, int max)<br><br>{<br><br>if(p) {<br><br>//...<br><br>}<br><br><br><br>for(int i = 0; i<max; ++i) {<br><br>//...<br><br>}<br><br>}</div> </div> <br><br>姣斿ぇ澶氭暟甯冨眬椋庢牸鏇村ソ錛岃繖縐嶉鏍間繚鐣欎簡鍨傜洿鐨勭┖鏍鹼紝鎴戝枩嬈㈠敖鍙兘鍦板湪鍚堢悊鐨勬儏鍐典笅瀵歸綈灞忓箷銆傚鍑芥暟寮澶寸殑澶ф嫭寮х殑鏀劇疆錛屾湁鍔╀簬鎴戠涓鐪煎氨鍒嗗埆鍑虹被鐨勫畾涔夊拰鍑芥暟鐨勫畾涔夈?br><br><br><br>緙╄繘鏄潪甯擱噸瑕佺殑銆?br><br><br><br>璁捐闂錛岃濡備綔涓轟富瑕佹帴鍙g殑鎶借薄鍩虹被鐨勪嬌鐢紝浣跨敤妯℃澘浠ヨ〃鐜版湁寮規х殑綾誨瀷瀹夊叏鐨勬娊璞★紝浠ュ強姝g‘鍦頒嬌鐢ㄥ紓甯鎬互琛ㄧ幇閿欒錛屾瘮甯冨眬椋庢牸鐨勯夋嫨瑕侀噸瑕佸緱澶氥?br><br><br><br>鎴戝簲璇ュ皢“const”鏀懼湪綾誨瀷涔嬪墠榪樻槸涔嬪悗錛?br><br><br><br>鎴戞妸瀹冩斁鍦ㄥ墠闈紝浣嗛偅浠呬粎鏄釜浜虹埍濂介棶棰樸?#8220;const T”鍜?#8220;T const”鎬繪槸閮借鍏佽鐨勶紝鑰屼笖鏄瓑鏁堢殑銆備緥濡傦細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>constint a = 1; // ok<br><br>intconst b = 2; // also ok<br><br></div> </div> 鎴戠寽鎯崇涓縐嶇増鏈彲鑳戒細璁╁皯鏁幫紙鏇村姞鍥哄畧璇硶瑙勮寖錛夌殑紼嬪簭鍛樻劅鍒拌糠鎯戙?br><br><br><br>涓轟粈涔堬紵褰撴垜鍙戞槑“const”錛堟渶鍒濈殑鍚嶇О鍙仛“readonly”錛屽茍涓旀湁涓涓搴旂殑“writeonly”錛夌殑鏃跺欙紝鎴戝氨鍏佽瀹冨嚭鐜板湪綾誨瀷涔嬪墠鎴栦箣鍚庯紝鍥犱負榪欐牱鍋氫笉浼氬甫鏉ヤ換浣曚笉鏄庣‘銆傛爣鍑嗕箣鍓嶇殑C鍜孋++瑙勫畾浜嗗緢灝戠殑錛堝鏋滄湁鐨勮瘽錛夌壒瀹氱殑欏哄簭瑙勮寖銆?br><br><br><br>鎴戜笉璁板緱褰撴椂鏈夎繃浠諱綍鏈夊叧欏哄簭闂鐨勬繁鍏ユ濊冩垨璁ㄨ銆傞偅鏃訛紝鏃╂湡鐨勪竴浜涗嬌鐢ㄨ呪斺旂壒鍒槸鎴戔斺斾粎浠呭枩嬈㈣繖縐嶆牱瀛愶細<br><br><br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>constint c = 10;</div> </div> <br><br>鐪嬭搗鏉ユ瘮榪欑鏇村ソ錛?br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>intconst c = 10;</div> </div> <br><br>涔熻鎴戜篃鍙椾簡榪欑褰卞搷錛氬湪鎴戞渶鏃╃殑涓浜涗嬌鐢?#8220;readonly”鐨勪緥瀛愪腑<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>readonlyint c = 10;</div> </div> <br><br>姣旇繖涓洿鍏鋒湁鍙鎬э細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>intreadonly c = 10;</div> </div> <br><br>鎴戝垱閫犵殑閭d簺鏈鏃╃殑浣跨敤“const”鐨勶紙C鎴朇++錛変唬鐮侊紝鐪嬫潵宸茬粡鍦ㄥ叏鐞冭寖鍥村唴鍙栦唬浜?#8220;readonly”銆?br><br><br><br>鎴戣寰楄繖涓娉曠殑閫夋嫨鍦ㄥ嚑涓漢鈥斺斾緥濡侱ennis Ritchie鈥斺斿綋涓璁鴻繃錛屼絾鎴戜笉璁板緱褰撴椂鎴戝懼悜浜庡摢縐嶈璦浜嗐?br><br><br><br>娉ㄦ剰鍦ㄥ浐瀹氭寚閽堬紙const pointer錛変腑錛?#8220;const”姘歌繙鍑虹幇鍦?#8220;*”涔嬪悗銆備緥濡傦細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>int*const p1 = q; // 鎸囧悜int鍙橀噺鐨勫浐瀹氭寚閽?br><br>intconst* p2 = q; //鎸囧悜int甯擱噺鐨勬寚閽?br><br>constint* p3 = q; //鎸囧悜int甯擱噺鐨勬寚閽?br><br></div> </div> 浣跨敤瀹忔湁浠涔堥棶棰橈紵<br><br><br><br>瀹忎笉閬靛驚C++涓叧浜庤寖鍥村拰綾誨瀷鐨勮鍒欍傝繖緇忓父瀵艱嚧涓浜涘井濡欑殑鎴栦笉閭d箞寰鐨勯棶棰樸傚洜姝わ紝C++鎻愪緵鏇撮傚悎鍏朵粬鐨凜++錛堣瘧娉細鍘熸枃涓簍he rest of C++錛屽綋鎸嘋++闄や簡鍏煎C浠ュ鐨勯儴鍒嗭級鐨勬浛浠e搧錛屼緥濡傚唴鑱斿嚱鏁般佹ā鏉夸笌鍚嶅瓧絀洪棿銆?br><br><br><br>鑰冭檻涓涓嬶細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>#include"someheader.h"<br><br><br><br>structS {<br><br>intalpha;<br><br>intbeta;<br><br>};</div> </div> <br><br>濡傛灉鏌愪漢錛堜笉鏄庢櫤鍦幫級鍦板啓浜嗕竴涓彨“alpha”鎴?#8220;beta”鐨勫畯錛岄偅涔堝畠灝嗕笉浼氳緙栬瘧錛屾垨鑰呰閿欒鍦扮紪璇戯紝浜х敓涓嶅彲棰勭煡鐨勭粨鏋溿備緥濡傦紝“someheader.h”鍙兘鍖呭惈錛?br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>#definealpha 'a'<br><br>#definebeta b[2]<br><br></div> </div> 灝嗗畯錛堣屼笖浠呬粎鏄畯錛夊叏閮ㄥぇ鍐欑殑涔犳儻錛屼細鏈夋墍甯姪錛屼絾鏄浜庡畯騫舵病鏈夎璦灞傛涓婄殑淇濇姢鏈哄埗銆備緥濡傦紝铏界劧鎴愬憳鐨勫悕瀛楀寘鍚湪緇撴瀯浣撶殑鍐呴儴錛屼絾榪欐棤嫻庝簬浜嬶細鍦ㄧ紪璇戝櫒鑳藉姝g‘鍦拌鯨鍒繖涓鐐逛箣鍓嶏紝瀹忓凡緇忓皢紼嬪簭浣滀負涓涓瓧絎︽祦榪涜浜嗗鐞嗐傞『渚胯涓鍙ワ紝榪欐槸C鍜孋++紼嬪簭寮鍙戠幆澧冨拰宸ュ叿鑳藉琚畝鍖栫殑涓涓富瑕佸師鍥狅細浜轟笌緙栬瘧鍣ㄧ湅鍒扮殑鏄笉鍚岀殑涓滆タ銆?br><br><br><br>涓嶅垢鐨勬槸錛屼綘涓嶈兘鍋囪鍒殑紼嬪簭鍛樻繪槸鑳藉閬垮厤榪欑浣犺涓?#8220;鐩稿綋鐧界棿”鐨勪簨鎯呫備緥濡傦紝鏈榪戞湁浜烘姤鍛婃垜錛屼粬浠亣鍒頒簡涓涓寘鍚玤oto鐨勫畯銆傛垜涔熻榪囪繖縐嶆儏鍐碉紝鑰屼笖鍚埌榪囦竴浜涒斺斿湪寰堣剢寮辯殑鏃跺欌斺旂湅璧鋒潵紜疄鏈夌悊鐨勬剰瑙併備緥濡傦細 <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content><br><br>#defineprefix get_ready(); int ret__<br><br>#defineReturn(i) ret__=i; do_something(); goto exit<br><br>#definesuffix exit: cleanup(); return ret__<br><br><br><br>voidf()<br><br>{<br><br>prefix;<br><br>//...<br><br>Return(10);<br><br>//...<br><br>Return(x++);<br><br>//...<br><br>suffix;<br><br>}<br><br></div> </div> 浣滀負涓涓淮鎶ょ殑紼嬪簭鍛橈紝灝變細浜х敓榪欑鍗拌薄錛涘皢瀹?#8220;闅愯棌”鍒頒竴涓ご鏂囦歡涓斺旇繖騫朵笉緗曡鈥斺斾嬌寰楄繖縐?#8220;欖旀硶”鏇撮毦浠ヨ杈ㄥ埆銆?br><br><br><br>涓涓父瑙佺殑寰闂鏄紝涓涓嚱鏁伴鏍肩殑瀹忓茍涓嶉伒瀹堝嚱鏁板弬鏁頒紶閫掔殑瑙勫垯銆備緥濡傦細 <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content><br><br>#definesquare(x) (x*x)<br><br><br><br>voidf(double d, int i)<br><br>{<br><br>square(d); //濂?br><br>square(i++); //緋熺硶錛氳繖琛ㄧず (i++*i++)<br><br>square(d+1); //緋熺硶錛氳繖琛ㄧず(d+1*d+1); 涔熷氨鏄?(d+d+1)<br><br>//...<br><br>}</div> </div> <br><br>“d+1”鐨勯棶棰橈紝鍙互閫氳繃鍦?#8220;璋冪敤”鏃舵垨瀹忓畾涔夋椂娣誨姞涓瀵瑰渾鎷彿鏉ヨВ鍐籌細<br><br> <div id="hvzpftn" class=quote> <div id="hvzpftn" class=quote-title><u></u></div> <div id="hvzpftn" class=quote-content>#definesquare(x) ((x)*(x)) /*榪欐牱鏇村ソ */</div> </div> <br><br>浣嗘槸錛?i++琚墽琛屼簡涓ゆ錛堝彲鑳藉茍涓嶆槸鏈夋剰瑕佽繖涔堝仛錛夌殑闂浠嶇劧瀛樺湪銆?br><br><br><br>鏄殑錛屾垜紜疄鐭ラ亾鏈変簺鐗規畩鐨勫畯騫朵笉浼氬鑷碈/C++棰勫鐞嗗畯榪欐牱鐨勯棶棰樸備絾鏄紝鎴戞棤蹇冨幓鍙戝睍C++涓殑瀹忋備綔涓烘浛浠o紝鎴戞帹鑽愪嬌鐢–++璇█涓悎閫傜殑宸ュ叿錛屼緥濡傚唴鑱斿嚱鏁幫紝妯℃澘錛屾瀯閫犲嚱鏁幫紙鐢ㄦ潵鍒濆鍖栵級錛屾瀽鏋勫嚱鏁幫紙鐢ㄦ潵娓呴櫎錛夛紝寮傚父錛堢敤鏉ラ鍑轟笂涓嬫枃鐜錛夛紝絳夌瓑銆? <img src ="http://www.shnenglu.com/CrazyDev/aggbug/115698.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/CrazyDev/" target="_blank">CrazyDev</a> 2010-05-18 17:12 <a href="http://www.shnenglu.com/CrazyDev/articles/115698.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>C++涓嶧lash鐨勪氦浜?/title><link>http://www.shnenglu.com/CrazyDev/articles/115651.html</link><dc:creator>CrazyDev</dc:creator><author>CrazyDev</author><pubDate>Tue, 18 May 2010 02:36:00 GMT</pubDate><guid>http://www.shnenglu.com/CrazyDev/articles/115651.html</guid><wfw:comment>http://www.shnenglu.com/CrazyDev/comments/115651.html</wfw:comment><comments>http://www.shnenglu.com/CrazyDev/articles/115651.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/CrazyDev/comments/commentRss/115651.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/CrazyDev/services/trackbacks/115651.html</trackback:ping><description><![CDATA[<p>鐮旂┒Flash宓屽叆娓告垙涓殑鍙鎬?......</p> <p>娓叉煋闂宸茶В鍐?<br>浜嬩歡鍝嶅簲宸茶В鍐?<br>涓嬮潰鏄疌++涓嶧lash AS鐨勪氦浜? 浠FC涓轟緥: <br>1. 鏂板緩涓涓狹FC Dialog紼嬪簭</p> <p>2. 娣誨姞涓涓狥lash鎺т歡</p> <p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/xoyojank/EntryImages/20081022/CppFlash_AddActiveX.JPG"></p> <p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/xoyojank/EntryImages/20081022/CppFlash_AddFlash.JPG"></p> <p>3. 鎶奆lash鎺т歡娣誨姞涓涓彉閲?/p> <p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/xoyojank/EntryImages/20081022/CppFlash_AddVariable.JPG"><br><br><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/xoyojank/EntryImages/20081022/CppFlash_AddflashUI.JPG"></p> <p>4. 鍦∣nInitDialog()涓坊鍔犺澆.swf鏂囦歡</p> <p> <!--startfragment --> <img src="file:///C:/DOCUME~1/Yuan/LOCALS~1/Temp/%25QT13(ZV[L4%25%7B%7D_U0%7BJ3~TV.jpg"> </p> <p>5. 鍒朵綔涓涓猣lash, 鏀句竴涓狟utton涓婂幓, 瀵煎嚭涓涓嬪氨鍙互鍦∕FC涓湅鍒頒簡</p> <p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/xoyojank/EntryImages/20081022/CppFlash_FlashButton.JPG"><br><br><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/xoyojank/EntryImages/20081022/CppFlash_MFCDialog.JPG"> </p> <p>6. flash璋冪敤C++. </p> <p>榪欎釜寰堢畝鍗? 鍦╢lash鐨勯偅涓狟utton緇勪歡鐨勫姩浣滀腑娣誨姞鑴氭湰:</p> <p><!--startfragment --> <img src="file:///C:/DOCUME~1/Yuan/LOCALS~1/Temp/E()UIB]N[%7DLL0A9$%25H205RW.jpg">  </p> <p>鐒跺悗鍦∕FC涓坊鍔犱簨浠跺搷搴?</p> <p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/xoyojank/EntryImages/20081022/CppFlash_AddEvent.JPG" width=471 height=341><br><br><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/xoyojank/EntryImages/20081022/CppFlash_AddEventMethod.JPG"></p> <p><!--startfragment --> <img src="file:///C:/DOCUME~1/Yuan/LOCALS~1/Temp/~AXX%7D%25BR2AB8CH8W$BF149L.jpg">  </p> <p>7. C++璋冪敤Flash. </p> <p>棣栧厛鍦‵lash涓敞鍐屽洖璋冨嚱鏁?</p> <p> <!--startfragment --> <img src="file:///C:/DOCUME~1/Yuan/LOCALS~1/Temp/PS~TFW1IBUFL7T5G_8AMC1N.jpg">  </p> <p>鐒跺悗鍦–++涓坊鍔犺皟鐢?</p> <p><!--startfragment --> <img src="file:///C:/DOCUME~1/Yuan/LOCALS~1/Temp/(J2OJZNHWKEMJ_CRS]%60SI@4.jpg"> <br><br>鍙﹀, 榪樺彲浠ラ氳繃GetVariable()鍜孲etVariable()鏉ヨ緗甪lash涓畾涔夌殑鍙橀噺</p> <p>8. 瀵煎嚭涓涓媐lash, 緙栬瘧涓涓婥++, 灝卞彲浠ョ湅鍒版晥鏋滀簡:</p> <p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/xoyojank/EntryImages/20081022/CppFlash_CallCpp.JPG"><br><br><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/xoyojank/EntryImages/20081022/CppFlash_CallFlash.JPG"></p> <p> </p> <p> </p> <p>鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿鑷細<a >http://blog.csdn.net/xoyojank/archive/2008/10/22/3122679.aspx</a></p> <img src ="http://www.shnenglu.com/CrazyDev/aggbug/115651.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/CrazyDev/" target="_blank">CrazyDev</a> 2010-05-18 10:36 <a href="http://www.shnenglu.com/CrazyDev/articles/115651.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>璋冭瘯娓告垙紼嬪簭鐨勫闂紙杞級http://www.shnenglu.com/CrazyDev/articles/113737.htmlCrazyDevCrazyDevTue, 27 Apr 2010 12:48:00 GMThttp://www.shnenglu.com/CrazyDev/articles/113737.htmlhttp://www.shnenglu.com/CrazyDev/comments/113737.htmlhttp://www.shnenglu.com/CrazyDev/articles/113737.html#Feedback0http://www.shnenglu.com/CrazyDev/comments/commentRss/113737.htmlhttp://www.shnenglu.com/CrazyDev/services/trackbacks/113737.htmlhttp://blog.csdn.net/fannyfish/

鐗堟潈澹版槑

  • 浣滆咃細Steve Rabin, Nintendo of America Inc.
  • 閭錛歴teve@aiwisdom.com
  • 璇戣咃細娌欓拱
  • 鏍″錛氫竾澶鉤

姒傝堪

璋冭瘯娓告垙紼嬪簭錛屽拰璋冭瘯浠諱綍鍏跺畠杞歡鐨勪唬鐮佷竴鏍鳳紝閮藉彲鑳芥槸涓欏硅壈宸ㄧ殑浠誨姟銆備竴鑸鏉ワ紝鏈夌粡楠岀殑紼嬪簭鍛樿兘榪呴熷湴璇嗗埆騫剁籂姝e摢鎬曟槸鏈闅劇殑bug錛屼絾鏄浜庢柊鎵嬭岃█錛屾敼bug鍙兘鏇村儚鏄竴浠墮毦浠ュ鐞嗙殑錛屽茍涓斿鏄撲嬌浜虹伆蹇冧撫姘旂殑浠誨姟銆傛洿緋熺殑鏄紝褰撲綘鍒濇鐫鎵嬪紑濮嬪鎵綽ug鐨勬牴婧愭椂錛屾案榪滀篃涓嶄細鐭ラ亾絀剁珶瑕佽姳璐瑰闀挎椂闂存墠鑳芥壘鍒般傛鏃朵笉蹇呮厡寮狅紝瑕佸儚涓緇冩湁绱犵殑紼嬪簭鍛橈紝闆嗕腑綺懼姏瀵繪壘bug銆備竴鏃︿綘娑堝寲浜嗘湰鏂囦粙緇嶇殑鎶宸у拰鐭ヨ瘑錛屼綘灝嗚兘澶熷嚮閫鏈“鍑剁寷”鐨刡ug錛岄噸鑾峰娓告垙鐨勬帶鍒躲?/p>

榪愮敤鏈枃鎻忚堪鐨勪簲姝ヨ皟璇曟硶錛屽洶闅劇殑璋冭瘯榪囩▼涔熷彲鑳藉彉寰楃畝鍗曚竴浜涖傝緇冩湁绱犲湴榪愮敤璇ユ柟娉曪紝灝嗙‘淇濅綘鑺辮垂鏈灝戠殑鏃墮棿鍦ㄥ鎵懼拰瀹氫綅姣忎竴涓猙ug涓娿傚湪浣犵潃鎵嬪浠樹竴浜涙湁闅懼害鐨刡ug鏃訛紝鐗㈣涓浜涗笓瀹舵妧宸т篃寰堥噸瑕侊紝鍥犳鏈枃涔熸敹闆嗕簡涓浜涙湁浠峰肩殑銆佺粡榪囨椂闂磋冮獙鐨勬妧宸с傜劧鍚庢湰鏂囪繕鍒楀嚭浜嗕竴浜涙湁闅懼害鐨勮皟璇曟儏澧冿紝瑙i噴浜嗗綋閬囧埌涓浜涚壒瀹氱殑bug妯″紡鏃跺簲褰撳仛浜涗粈涔堛傚洜涓哄ソ鐨勫伐鍏峰浜庤皟璇曚換浣曟父鎴忛兘寰堥噸瑕侊紝鏈枃榪樺皢璁ㄨ涓浜涚壒瀹氱殑宸ュ叿錛屼綘鍙皢榪欎簺宸ュ叿宓屽叆浣犵殑娓告垙涓紝浠庤屽府鍔╄皟璇曚竴浜涙父鎴忕紪紼嬫墍鐙湁鐨勮皟璇曟儏褰€傛渶鍚庤鎴戜滑鍥為【涓浜涘湪鍓嶆湡棰勯槻bug鐨勭畝鍗曟妧鏈?/p>

浜旀璋冭瘯娉?/h2>

鑰佺粌鐨勭▼搴忓憳浠叿鏈変竴縐嶈秴鑳藉姏錛岃兘澶熻繀閫熷湴銆侀┚杞誨氨鐔熷湴鎹曟崏鍒板嵆浣挎槸鏈涓嶅彲鎬濊鐨刡ug銆備粬浠繪槸紲炲鍦般佽繎涔庣洿瑙夊湴鐭ラ亾閿欒婧愯嚜浣曟柟錛岃繖涓鐐瑰疄鍦ㄤ護浜烘暚鐣忋備粬浠箣鎵浠ユ樉寰楀ぉ鎵嶏紝闄や簡鍥犱負鎷ユ湁涓板瘜鐨勭粡楠屽錛岃繕鍥犱負浠栦滑瀵逛簬鍕樻帰鍜屽噺灝戦渶鎺掓煡鐨勫彲鑳界殑鍘熷洜鐨勬柟娉曡緇冩湁绱犮佽瀺浼氳瘡閫氥備笅闈㈢粰鍑虹殑浜旀璋冭瘯娉曟棬鍦ㄩ噸鐜頒粬浠墍鐔熺粌鎺屾彙鐨勬妧鑳斤紝鍔╀綘鍦ㄨ窡韙猙ug鐨勯棶棰樹笂褰㈡垚涓縐嶆湁緋葷粺鐨勩佷笖娉ㄦ剰鍔涢泦涓殑椋庢牸銆?/p>

絎竴姝ワ細濮嬬粓濡備竴鍦伴噸鐜伴棶棰?/h3>

涓嶈鏄粈涔坆ug錛岄噸瑕佺殑鏄紝浣犲簲褰撲簡瑙e浣曡兘澶熷緇堝涓鍦伴噸鐜板畠銆?/p>

璇曞浘綰犳涓涓殢鏈哄嚭鐜扮殑bug甯鎬細浣夸漢鎰熷埌鎸觸錛岃屼笖閫氬父涓嶈繃鏄氮璐規椂闂淬備簨瀹炴槸錛屽嚑涔庢墍鏈夌殑bug閮戒細鍦ㄧ壒瀹氱殑鎯呭涓嬪彲闈犲湴閲嶇幇錛屽洜姝ゅ彂鐜拌繖涓儏鏅拰瑙勫緥灝辨垚涓轟綘鐨勩佹垨璐靛叕鍙告祴璇曢儴鍚屼粊鐨勫伐浣溿?/p>

璁╂垜浠婦涓涓亣鎯崇殑娓告垙bug涓轟緥錛屽湪嫻嬭瘯鍛樻姤鍛婇噷鍐欓亾錛?#8220;鏈夋椂鍊欙紝娓告垙浼氬湪鐜╁鏉姝繪晫浜烘椂姝繪満錛圕rash錛夈?#8221;涓嶅垢鍦幫紝鍍忚繖鏍風殑bug鎶ュ憡澶繃浜庡惈緋婏紝鑰屼笖鐢變簬榪欎釜闂鐪嬩笂鍘諱笉鏄櫨鍒嗕箣鐧句細鍑虹幇鐨勶紝澶氭暟鏃跺欑帺瀹朵粛鍙互姝e父鍦版懅姣佹晫浜恒傚洜姝ゅ綋娓告垙crash鏃訛紝蹇呯劧榪樻湁涓浜涘叾瀹冪浉鍏沖洜绱犮?/p>

瀵逛簬涓嶅鏄撻噸鐜扮殑bug錛岀悊鎯蟲儏褰㈡槸鍒涘緩涓緋誨垪“閲嶇幇姝ラ錛圧epro Steps錛?#8221;錛岃鏄庢瘡嬈″簲鎬庢牱鎵嶈兘閲嶇幇bug銆備緥濡傦紝涓嬮潰鐨勬楠ゆ瀬澶у湴鏀瑰杽浜嗕箣鍓嶇殑bug鎶ュ憡銆?/p>

閲嶇幇姝ラ錛?/p>

  1. 寮濮嬪崟浜烘父鎴忋?
  2. 閫夋嫨鍦ㄧ44鍙峰湴鍥句笂榪涜Skirmish涔熷氨鏄浜虹粌涔犳ā寮忕殑娓告垙銆?
  3. 鎵懼埌鏁屼漢钀ュ湴銆?
  4. 鍦ㄤ竴瀹氱殑璺濈寮澶栵紝浣跨敤鎶曞皠綾繪鍣紙Projectile Weapon錛夋敾鍑誨湪钀ュ湴閲岀殑鏁屼漢銆?
  5. 緇撴灉錛?0錛呯殑鏃跺欐父鎴忔鏈恒?

鏄劇劧錛岄噸鐜版楠ゆ槸涓縐嶅緢濂界殑鏂規硶錛屾祴璇曚漢鍛樿棄姝ゅ府鍔╁叾浠栦漢閲嶇幇bug銆備笉榪囷紝綺劇畝鍙兘瀵艱嚧bug鍙戠敓鐨勪簨浠墮摼錛圕hain of Events錛夌殑榪囩▼涔熸槸鑷沖叧閲嶈鐨勶紝鍏跺師鍥犳湁涓夈傜涓錛氬褰撴椂bug涓轟綍鍙戠敓鎻愪緵浜嗘湁浠峰肩殑綰跨儲銆傜浜岋細鎻愪緵浜嗕竴縐嶆瘮杈冪郴緇熷湴嫻嬭瘯bug鏄惁宸茶褰誨簳鏀規鐨勬柟娉曘傜涓夛細鍙敤浜庡洖褰掓祴璇曪紝紜繚bug涓嶅啀鍗峰湡閲嶆潵銆?/p>

灝界榪欓噷鐨勪俊鎭病鏈夊憡璇夋垜浠琤ug鐨勭洿鎺ヨ鍥狅紝瀹冧嬌鎴戜滑鑳藉濮嬬粓閲嶇幇bug銆備竴鏃︿綘紜畾浜哹ug鍙戠敓鐨勭幆澧冿紝浣犲氨鍙互榪涜涓嬩竴姝ラ錛屽紑濮嬫悳闆嗘湁鐢ㄧ殑綰跨儲銆?/p>

絎簩姝ワ細鎼滈泦綰跨儲

鐜板湪浣犺兘澶熷彲闈犲湴浣縝ug閲嶇幇錛屼笅涓姝ヨ浣犳埓涓婁睛鎺㈢殑楦垖甯藉茍鎼滈泦綰跨儲銆傛瘡鏉¤洓涓濋┈榪歸兘鏄帓闄や竴涓彲鑳界殑鍘熷洜騫剁緝鐭枒鐐瑰垪琛ㄧ殑鏈轟細銆傛湁浜嗚凍澶熺殑綰跨儲錛宐ug鐨勫彂婧愬湴浼氬彉寰楁槑鏄俱傚洜姝や負浜嗘槑浜嗘瘡鏉$嚎绱㈠茍鐞嗚В鍏舵綔鍙拌瘝錛屼粯鍑虹殑鍔姏鏄煎緱鐨勩?/p>

涓嶈繃鏈変竴鐐硅娉ㄦ剰錛屼綘搴斿綋鎬繪槸鍦ㄥ績閲岃川鐤戞瘡涓鏉″凡鍙戠幇鐨勭嚎绱紝鏄笉鏄瀵肩殑錛屾垨涓嶆紜殑銆備婦渚嬫潵璇達紝鎴戜滑琚憡鐭ユ煇涓猙ug鎬誨彂鐢熷湪鐖嗙偢涔嬪悗銆傚敖綆¤繖鍙兘鏄竴鏉¢潪甯擱噸瑕佺殑綰跨儲錛屼絾瀹冧粛鐒跺彲鑳芥槸涓涓櫄鍋囩殑璇銆傛椂鍒誨噯澶囩潃鏀懼純閭d簺涓庢敹闆嗘潵鐨勪俊鎭啿紿佺殑綰跨儲銆?/p>

榪樻槸浠ヤ笂闈㈢殑bug鎶ュ憡涓轟緥錛屾垜浠簡瑙e埌娓告垙鐨刢rash鍙戠敓鍦ㄧ帺瀹朵嬌鐢ㄦ姇灝勭被姝﹀櫒鏀誨嚮鏌愪釜鐗瑰畾鐨勬晫浜鴻惀鍦扮殑鏃跺欍傜┒绔熷叧浜庢姇灝勭被姝﹀櫒鍜屼粠榪滃鏀誨嚮榪欎袱鑰咃紝鏈変粈涔堢壒鍒箣澶勶紵榪欐槸闇瑕佹繁鎬濈殑閲嶇偣錛屼絾涔熶笉瑕佽楄垂澶鏃墮棿鎬濊冦備翰涓村叾澧冿紝瑙傚療閿欒絀剁珶鏄浣曞彂鐢熺殑錛屽洜涓烘垜浠渶瑕佽幏鍙栨洿澶氱殑紜嚳鐨勮瘉鎹紝鑰岀暀榪炰簬琛ㄩ潰鐨勭嚎绱㈡槸鑾峰緱瀹為檯璇佹嵁鏈涓嶆湁鏁堢殑鏂瑰紡銆?/p>

鍦ㄦ湰渚嬩腑錛屽綋鎴戜滑榪涘叆娓告垙錛屽茍瀹為檯瑙傚療閿欒鐨勫彂鐢熸椂錛屾垜浠細鍙戠幇娓告垙姝繪満鍙戠敓鍦ㄤ竴涓?#8220;綆?#8221;瀵硅薄閲岋紝閿欒鐨勭棁鐘舵槸涓涓棤鏁堟寚閽堛傝繘涓姝ョ殑媯鏌ユ樉紺猴紝璇ユ寚閽堟湰鏉ユ槸搴斿綋鎸囧悜閭d釜鍙戝皠姝ょ鐨勮鑹茬殑銆傚湪姝ゆ儏鍐典笅錛岃繖鏀鍘熸湰瑕佸悜鍏跺彂灝勮呮姤鍛婂畠鍑諱腑浜嗘煇涓晫浜猴紝浣垮彂灝勮呬負璇ユ鎴愬姛鐨勬敾鍑昏幏寰椾竴瀹氱殑緇忛獙鍊箋備絾灝界鐪嬩笂鍘繪壘鍒頒簡鍘熷洜鎵鍦紝鎴戜滑瀵圭湡瀹炵殑娼滃師鍥犱粛鐒朵竴鏃犳墍鐭ャ傛垜浠繀欏婚鍏堟壘鍑烘槸浠涔堟壈涔變簡榪欎釜鎸囬拡銆?/p>

絎笁姝ワ細鏌ユ槑閿欒鐨勬簮澶?/h3>

褰撲綘璁や負鏀墮泦鍒扮殑綰跨儲宸茬粡澶熷鏃訛紝灝卞埌浜嗕笓娉ㄤ簬鎼滅儲鍜屾煡鏄庨敊璇殑婧愬ご鐨勬椂鍊欎簡銆傛湁涓や釜涓昏鏂規硶錛岀涓涓柟娉曟槸鍏堟彁鍑哄叧浜巄ug鍙戠敓鍘熷洜鐨勫亣璁撅紝鎺ョ潃瀵硅鍋囪榪涜楠岃瘉錛堟垨璇佹槑瀹冧笉姝g‘錛夛紱絎簩涓柟娉曟槸杈冧負緋葷粺鐨勫垎鑰屾不涔嬬殑鏂規硶銆?/p>

鏂規硶1錛氬亣璁炬硶

鎼滈泦浜嗚凍澶熺殑綰跨儲錛屼綘浼氬紑濮嬫鐤戞湁浜涗粈涔堜簨鎯呭鑷翠簡bug鍙戠敓銆傝繖灝辨槸浣犵殑鍋囪錛圚ypothesis錛夈傚綋浣犺兘澶熷湪蹇冮噷娓呮鍦伴檲榪拌繖鍋囪錛屼綘灝卞彲浠ュ紑濮嬭璁′竴浜涜兘楠岃瘉璇ュ亣璁撅紝鎴栧弽璇佽瘉鏄庤鍋囪涓嶆紜殑嫻嬭瘯鐢ㄤ緥銆?/p>

鍦ㄦ垜浠殑渚嬪瓙閲岋紝閫氳繃嫻嬭瘯寰楀嚭浜嗕互涓嬬嚎绱㈠拰鍏充簬娓告垙璁捐鐨勪俊鎭細

  • 褰撲竴鏀灝勫嚭鐨勬椂鍊欙紝璇ョ琚祴浜堜竴涓寚鍚戝皠綆漢鐨勬寚閽堛?
  • 褰撲竴鏀灝勪腑鏌愪釜鏁屼漢鐨勬椂鍊欙紝灝嗗鍔遍佺粰灝勭浜恒?
  • 娓告垙姝繪満鍙戠敓鍦ㄤ竴鏀璇曞浘閫氳繃涓涓棤鏁堟寚閽堝悜灝勭浜轟紶鍥炲鍔便?

鎴戜滑鐨勭涓涓亣璁懼彲鑳芥槸榪欐牱錛屾寚閽堢殑鍊煎湪綆殑椋炶閫斾腑琚崯鍧忋傚熀浜庢縐嶅亣璁撅紝鎴戜滑寮濮嬭璁℃祴璇曪紝騫舵悳闆嗘暟鎹潵鏀寔鎴栨帹緲繪鍘熷洜銆備緥濡傛垜浠彲浠ヨ姣忎竴鏀閮藉皢灝勭浜虹殑鎸囬拡娉ㄥ唽鍒板悓涓涓浠藉尯鍩熴傚綋鎴戜滑鍙堟崟鎹夊埌crash鏃訛紝鍙互媯鏌ュ浠戒笅鏉ョ殑鏁版嵁錛岀湅鏃犳晥鎸囬拡鐨勫兼槸鍚︿笌榪欐敮綆湪琚皠鍑虹殑鏃跺欐墍璧嬩簣鐨勫肩浉鍚屻? 

涓嶅垢鐨勬槸鍦ㄦ垜浠墍涓劇殑渚嬪瓙閲岋紝鏈鍚庡彂鐜拌繖鏉″亣璁炬槸涓嶆紜殑銆傚浠界殑鎸囬拡鍜屽鑷存父鎴忔鏈虹殑鎸囬拡鍏鋒湁鐩稿悓鐨勫箋傝繖鏍蜂竴鏉ワ紝鎴戜滑灝遍潰涓寸潃涓涓妷鎷┿傛槸鍐嶆彁涓涓亣璁懼茍榪涜楠岃瘉錛岃繕鏄噸澶村鎵炬洿澶氱殑綰跨儲錛熺幇鍦ㄨ鎴戜滑璇曠潃鍐嶆彁涓鏉″亣璁俱?/p>

濡傛灉綆殑鍙戝皠浜烘寚閽堜粠娌℃湁琚牬鍧忥紙鏂扮嚎绱級錛屾垨璁鎬粠綆皠鍑哄埌綆皠涓晫浜虹殑榪欐鏃墮棿閲岋紝榪欎釜鍙戝皠浜鴻鍒犻櫎浜嗐備負浜嗘鏌ヨ繖鐐癸紝璁╂垜浠褰曚笅鏁屼漢钀ュ湴閲屾浜$殑姣忎釜瑙掕壊鐨勬寚閽堛傚綋crash鍙戠敓鏃訛紝鎴戜滑鍙互灝嗗嚭閿欐寚閽堝拰姝諱骸騫朵粠鍐呭瓨涓垹闄ょ殑鏁屼漢鐨勫垪琛ㄨ繘琛屾瘮杈冦傝繖鏍瘋繘琛岋紝寰堝揩灝辮瘉瀹炲師鍥犳鏄姝ゃ傚皠綆漢姝繪椂錛岀榪樺湪椋炶閫斾腑銆?/p>

鏂規硶2錛氬垎娌繪硶

涓や釜鍋囪浣挎垜浠壘鍑轟簡bug錛屽悓鏃朵篃琛ㄧ幇浜嗗垎鑰屾不涔嬬殑姒傚康銆傛垜浠煡閬撴寚閽堢殑鍊兼棤鏁堬紝浣嗘垜浠笉鐭ラ亾瀹冩槸鍥犱負鍊艱淇敼榪囪屾崯鍧忥紝鎴栬呰繖涓寚閽堝湪鏇存棭浜涚殑鏃跺欏氨宸茬粡鏃犳晥銆傞氳繃嫻嬭瘯絎竴涓亣璁撅紝鎴戜滑鎺掗櫎浜嗕袱涓彲鑳芥т腑鐨勪竴涓傚儚姝囨礇鍏?#183;紱忓皵鎽╂柉錛圫herlock Holmes錛夋浘璇磋繃鐨勶細“……褰撲綘鎺掗櫎浜嗕笉鍙兘鐨勬儏鍐靛悗錛屽叾浣欑殑鎯呭喌錛屽敖綆″涔堜笉鍙兘錛屽嵈蹇呭畾鏄湡瀹炵殑銆?#8221;[璇戞敞錛氱豢鐜夌殗鍐犳錛堟煰鍗?#183;閬撳皵錛塢

鏈変漢灝嗗垎鑰屾不涔嬬殑鏂規硶綆鍗曞艦瀹逛負紜畾鏁呴殰鍙戠敓鐨勬椂鍒伙紝騫朵粠杈撳叆寮濮嬪洖婧屽彂鐜伴敊璇傛瘮濡傛湁涓涓茍涓嶄細閫犳垚姝繪満鐨刡ug錛屽湪鏌愪釜鏃跺埢鍙戠敓鐨勫垵濮嬮敊璇皢褰卞搷灞傚眰浼犻掞紝鏈緇堝鑷存晠闅滃彂鐢熴傜‘瀹氬垵濮嬮敊璇氬父閫氳繃鍦ㄦ墍鏈夎緭鍏ュ垎鏀笂璁劇疆錛堟湁鏉′歡鎴栨棤鏉′歡鐨勶級鏂偣錛圔reakpoint錛夋潵榪涜錛岀洿鍒版壘鍒伴偅涓笉鑳芥甯歌緭鍑衡斺斾篃灝辨槸瀵艱嚧bug鐨勮緭鍏ャ?/p>

褰撲粠鏁呴殰鍙戠敓鐨勬椂鍒誨紑濮嬪洖婧紝浣犲湪灞閮ㄥ彉閲忓拰鏍堥噷闈㈢殑涓婄駭鍑芥暟涓鎵句換浣曞紓甯搞傚浜庢鏈篵ug鏉ヨ錛岄氬父浣犱細璇曞浘瀵繪壘涓涓┖鍊鹼紙NULL錛夋垨鏋佸ぇ鐨勬暟瀛楀箋傚鏋滄槸鍏充簬嫻偣鏁扮殑bug錛屽湪鏍堜笂瀵繪壘NAN鎴栨瀬澶х殑鏁板瓧銆?/p>

鏃犺鏄闂榪涜鏈夋牴鎹殑鎺ㄦ祴錛屾楠屽亣璁撅紝榪樻槸鏈夌郴緇熷湴鎼滄崟鑲囦簨浠g爜錛屾渶緇堜綘浼氭壘鍒伴棶棰樻墍鍦ㄣ傚湪榪欎釜榪囩▼涓綘瑕佺浉淇¤嚜宸憋紝騫朵繚鎸佹竻閱掋傛湰鏂囨帴涓嬫潵鐨勯儴鍒嗗皢璇︾粏璁ㄨ涓浜涘彲鐢ㄤ簬鍦ㄨ繖姝ラ涓殑涓撻棬鎶鏈?/p>

絎洓姝ワ細綰犳闂

褰撴垜浠彂鐜癰ug鐨勭湡姝f牴婧愶紝鎺ヤ笅鏉ヨ鍋氱殑渚挎槸鎻愬嚭鍜屽疄鐜頒竴涓В鍐蟲柟妗堛傛棤璁哄浣曪紝淇敼蹇呴』瀵歸」鐩墍澶勭殑闃舵鏄伆褰撶殑銆備緥濡傦紝鍦ㄥ紑鍙戠殑鍚庢湡錛岄氬父涓嶈兘鍙負浜嗙籂姝d竴涓猙ug錛屽氨淇敼搴曢儴鐨勬暟鎹粨鏋勬垨紼嬪簭浣撶郴緇撴瀯銆傚弬鐓у紑鍙戝伐浣滄墍澶勭殑闃舵錛屼富紼嬪簭鍛樻垨緋葷粺鏋舵瀯甯堝皢鍐沖畾搴斿綋榪涜浣曠綾誨瀷鐨勪慨鏀廣傚湪鍏抽敭鐨勬椂鍒伙紝涓埆宸ョ▼甯堬紙鍒濈駭鎴栦腑綰э級甯稿父鍋氬嚭涓嶅ソ鐨勫喅瀹氾紝鍥犱負浠栦滑娌℃湁鍏ㄧ洏鑰冭檻銆?/p>

姝ゅ闇瑕佺壒鍒敞鎰忕殑鏄紝鐞嗘兂鎯呭喌涓嬶紝浠g爜鐨勭紪鍐欒呭簲褰撹礋璐d慨鏀硅嚜宸變唬鐮侀噷鐨刡ug銆備笉榪囧鏋滃繀欏諱慨鏀瑰埆浜虹殑浠g爜錛屼綘鑷沖皯搴斿綋鍦ㄨ繘琛屼慨鏀瑰墠鍜屽師浣滆呰繘琛岃璁恒傝璁哄皢浣夸綘浜嗚В涓浜涙柟闈紝渚嬪鍦ㄤ互寰瀵逛簬綾諱技鐨勯棶棰樻槸鎬庝箞澶勭悊鐨勶紝濡傛灉瀹炴柦浣犵殑鏂規鎻愯鍙兘浼氶犳垚浠涔堝獎鍝嶇瓑銆傛諱箣錛屽湪鏈交搴曠悊瑙g敱鍒漢緙栧啓鐨勪唬鐮佺殑涓婁笅鏂囧墠錛屾ヤ簬榪涜淇敼鏄潪甯稿嵄闄╃殑銆?/p>

緇х畫璁ㄨ鎴戜滑鐨勪緥瀛愶紝姝繪満婧愪簬涓涓寚鍚戜簡涓涓笉澶嶅瓨鍦ㄧ殑瀵硅薄鐨勬棤鏁堟寚閽堛傚姝ょ被闂妯″紡鐨勪竴涓ソ鐨勮В鍐蟲柟妗堟槸浣跨敤涓灞傞棿鎺ュ紩鐢紝浣縞rash涓嶅啀鍙戠敓銆傞氬父錛屾鏄洜涓鴻繖涓悊鐢憋紝娓告垙浣跨敤瀵硅薄鐨勫彞鏌勮屼笉鏄洿鎺ユ寚閽堛傝繖灝嗘槸涓涓悎鐞嗙殑淇敼銆?/p>

浣嗘槸錛屽鏋滄父鎴忛」鐩洜涓烘煇涓噷紼嬬銆佹垨涓涓噸瑕佺殑婕旂ず鐗堜氦浠樻棩榪湪鐪夌潾錛岃岄渶瑕佸揩閫熷畬鎴愪慨鏀癸紝浣犲彲鑳戒細鍊懼悜浜庡鐜版湁鐨勭壒孌婃儏鍐靛疄鐜頒竴涓緝涓虹洿鎺ョ殑淇敼鏂規錛堜緥濡傝灝勭鑰呭湪鑷韓琚垹闄ょ殑鏃跺欎嬌鍏跺皠鍑虹殑綆腑鍏充簬鑷韓鐨勬寚閽堝け鏁堬級銆傚鏋滃湪紼嬪簭閲屾墦涓婁簡榪欎竴綾葷殑蹇熻ˉ涓侊紙Quick Hack錛夛紝浣犺璁板緱灝嗘湁鍏崇殑娉ㄩ噴鏂囨。鍖栵紝浠ヤ嬌鍏跺湪榪欐埅姝㈡湡闄愬悗琚噸鏂拌瘎浼般傚紑鍙戜腑榪欐牱鐨勬儏鍐靛薄瑙佷笉椴滐細蹇熻ˉ涓佽浜轟滑閬楀繕錛岃屽湪鍑犱釜鏈堝悗鎵嶉犳垚浜嗛毦浜庡彂鐜板拰瑙e喅鐨勯夯鐑︺?/p>

铏界劧鐪嬩笂鍘繪垜浠彂鐜頒簡bug騫朵笖紜畾浜嗕竴縐嶄慨鏀癸紙浣跨敤鍙ユ焺鑰岄潪鎸囬拡錛夛紝鎺㈢儲鍏朵粬鍙兘閫犳垚鍚屾牱闂鍑虹幇鐨勯斿緞鏄緢鍏抽敭鐨勩傝繖铏界劧闇瑕侀澶栫殑鏃墮棿錛屼絾鏄負浜嗙‘淇漛ug浠庢牴鏈笂琚秷鐏紝鑰岄潪鍙槸娑堥櫎浜哹ug鐨勪竴縐嶈〃鐜板艦寮忥紝榪欏姫鍔涙槸鍊煎緱鐨勩傚湪鎴戜滑鐨勪緥瀛愪腑錛屽彲鑳藉叾浠栫被鍨嬬殑鎶曞皠綾繪鍣ㄥ悓鏍蜂細閫犳垚娓告垙姝繪満錛屼絾鍏跺畠闈炴鍣ㄥ璞$殑鍏崇郴銆佺敋鑷寵鑹蹭箣闂寸殑鍏崇郴涔熶細鍙楀埌鍚屼竴涓璁$己闄風殑褰卞搷銆傚簲鎵懼嚭鎵鏈夎繖浜涚浉鍏崇殑鍦哄悎錛屼嬌浣犵殑淇敼鏂規閽堝鐨勬槸闂鐨勬牳蹇冿紝鑰岄潪浠呬粎鏄棶棰樼殑鏌愪竴縐嶅緛鍏嗐?/p>

絎簲姝ワ細瀵規墍浣滅殑淇敼榪涜嫻嬭瘯

瑙e喅鏂規瀹炴柦鍚庯紝榪樺繀欏昏繘琛屾祴璇曚互紜瀹冪殑紜慨琛ヤ簡閿欒銆傜涓姝ヨ紜繚鍏堝墠鏈夋晥鐨勯噸鐜版楠や笉浼氬鑷碽ug閲嶇幇銆傞氬父搴斿綋璁゜ug淇敼鑰呬互澶栫殑鍏朵粬浜猴紝渚嬪嫻嬭瘯鍛橈紝鐙珛鍦扮‘璁ug琚慨澶嶄笌鍚︺?/p>

絎簩姝ヨ繕瑕佺‘淇濇病鏈夋柊鐨刡ug琚紩鍏ユ父鎴忋備綘搴斿綋璁╂父鎴忚繍琛屼竴孌靛彲瑙傜殑鏃墮棿錛岀‘淇濇墍浣滅殑淇敼娌℃湁褰卞搷鍏跺畠閮ㄥ垎銆傝繖鏄潪甯擱噸瑕佺殑錛屽洜涓哄緢澶氭椂鍊欙紝灝ゅ叾鏄湪欏圭洰寮鍙戝懆鏈熸帴榪戝熬澹扮殑鏃跺欙紝涓轟慨鏀筨ug鎵浣滅殑鏀瑰姩錛屼細瀵艱嚧鍏朵粬緋葷粺鍑洪敊銆傚湪欏圭洰鐨勫悗鏈燂紝浣犺繕搴斿綋璁╀富紼嬪簭鍛樻垨鍏朵粬寮鍙戣呮潵媯瑙嗘瘡涓涓慨鏀癸紝榪欓澶栫殑鍙潬鎬ф楠岃淇濊瘉鏂扮殑淇敼涓嶄細瀵圭増鏈湁璐熼潰褰卞搷銆?/p>

楂樼駭璋冭瘯鎶宸?/h2>

濡傛灉浣犻伒寰互涓婃墍榪扮殑鍩烘湰璋冭瘯姝ラ錛屼綘搴旇兘鎵懼埌騫朵慨澶嶅ぇ澶氭暟bug銆備笉榪囧湪浣犲皾璇曟彁鍑哄亣璁俱侀獙璇?鍚﹀喅涓涓欓夌殑鍘熷洜銆佹垨鑰呭皾璇曟壘鍑哄嚭閿欎綅緗殑鏃跺欙紝鎴栬浣犱細鎰挎剰鑰冭檻涓嬪垪鐨勬妧宸с?/p>

鍒嗘瀽浣犵殑鍋囪

璋冭瘯紼嬪簭鐨勬椂鍊欒淇濇寔蹇冭兏寮闃旀槸寰堥噸瑕佺殑錛岃屼笖涓嶈浣滃お澶氬亣璁俱傚鏋滀綘鍋囪鏌愪簺璨屼技綆鍗曠殑涓滆タ鎬繪槸姝g‘鐨勶紝浣犲彲鑳藉氨榪囨棭鍦扮緝灝忎簡鎼滅儲鑼冨洿錛屼粠鑰屽畬鍏ㄩ敊榪囦簡鎵懼嚭鐪熺浉鐨勬満浼氥備婦渚嬫潵璇達紝涓嶈鎬繪槸鎯沖綋鐒跺湴璁や負浣犳鍦ㄤ嬌鐢ㄦ渶鏂扮殑杞歡鎴栫▼搴忓簱銆傛楠屼綘鐨勫亣璁炬槸鍚︽紜父甯告槸鍊煎緱鐨勩?/p>

灝嗕氦浜掑拰騫叉壈鏈灝忓寲

鏈夋椂錛屽涓郴緇熶箣闂翠細浠ユ煇縐嶆柟寮忎氦浜掞紝榪欎細浣胯皟璇曞鏉傚寲銆傝瘯璇曠湅鍏抽棴閭d簺浣犺涓哄拰闂鏃犲叧鐨勫瓙緋葷粺錛堜緥濡傦紝鍏抽棴澹伴煶瀛愮郴緇燂級錛屼粠鑰屽皢緋葷粺涔嬮棿鐨勪氦浜掗檷鍒版渶浣庨檺搴︺傛湁鏃跺欒繖鏈夊姪浜庤瘑鍒棶棰橈紝鍥犱負鍘熷洜鍙兘灝卞湪浣犲叧闂殑緋葷粺涓紝榪欐牱浣犲氨鐭ラ亾鎺ヤ笅鏉ヨ鐪嬮偅閲屻?/p>

灝嗛殢鏈烘ф渶灝忓寲

閫氬父錛宐ug涔嬫墍浠ラ毦浜庨噸鐜幫紝瑕佸綊鍜庝簬浠庡撫閫熺巼鍜屽疄闄呴殢鏈烘暟絳夋柟闈㈠紩鍏ョ殑鍙彉鎬с傚鏋滀綘鐨勬父鎴忔病鏈夐噰鍙栧浐瀹氱殑甯ч熺巼錛岃瘯璇曠湅灝?#8220;鍦ㄦ瘡甯у唴嫻侀濈殑鏃墮棿”閿佸畾涓哄父閲忋傝嚦浜庨殢鏈烘暟錛屽彲浠ュ叧闂殢鏈烘暟鍙戠敓鍣紝鎴栫粰瀹冨浐瀹氱殑甯告暟浣滀負闅忔満鍙戠敓縐嶅瓙錛岃繖鏍鋒瘡嬈¤繍琛岄兘浼氬緱鍒板悓鏍風殑搴忓垪銆備笉騫稿湴鏄紝鐜╁浼氱粰娓告垙甯︽潵鏃犳硶鎺у埗鐨勬樉钁楃殑闅忔満鎬с傚鏋滆繛榪欑帺瀹跺甫鏉ョ殑闅忔満鎬т篃蹇呴』寰楀埌鎺у埗錛岃鑰冭檻灝嗙帺瀹剁殑杈撳叆璁板綍涓嬫潵錛屼粠鑰岃兘浠ュ彲棰勬枡鐨勬柟寮忓皢杈撳叆璁板綍鐩存帴閫佸叆娓告垙錛籇awson01錛姐?/p>

灝嗗鏉傜殑璁$畻鎷嗗垎鎴愬嚑姝ヨ繘琛?/h3>

鑻ユ煇琛屼唬鐮佸惈鏈夊ぇ閲忚綆楋紝鎴栬灝嗚繖琛屾媶鍒嗕負澶氫釜姝ラ浼氭湁鍔╀簬璇嗗埆闂銆備緥濡傦紝鍙兘鍏朵腑鐨勬煇灝忔璁$畻浜х敓浜嗙被鍨嬭漿鎹㈤敊璇紝鎴栨煇涓嚱鏁板茍鏈繑鍥炰綘鏈熸湜瀹冭繑鍥炵殑鍊鹼紝鎴栬繍綆楄繘琛岀殑欏哄簭騫朵笉鏄綘鎵鎯崇殑閭f牱銆傝繖涔熶嬌浣犺兘澶熸鏌ユ瘡涓姝ヤ腑闂磋繃紼嬬殑璁$畻銆?/p>

媯鏌ヨ竟鐣屾潯浠?/h3>

鍑犱箮鎴戜滑涓殑姣忎竴涓漢閮芥浘琚粡鍏哥殑“宸竴閿欒”錛圤ff-by-one錛夐棶棰樻姌紓ㄨ繃銆傝媯鏌ョ畻娉曠殑杈圭晫鏉′歡錛岀壒鍒槸鍦ㄥ驚鐜粨鏋勪腑銆?/p>

鍒嗚В騫惰璁$畻

濡傛灉浣犳鐤戠▼搴忛噷鐨勭珵浜夋潯浠訛紙Race Condition錛屼笉鍚岀殑鎵ц欏哄簭浼氫駭鐢熶笉鍚岀殑緇撴灉錛夛紝璇曡瘯鐪嬪皢浠g爜鏀瑰啓涓轟覆琛岀殑錛岀劧鍚庢鏌ug鏄惁娑堝け銆傚湪綰跨▼涓紝澧炲姞棰濆鐨勫歡榪燂紝瑙傚療鏄惁闂涔熼殢涔嬪彉鍖栥傞棶棰樿寖鍥磋兘緙╁皬鈥斺旇嫢浣犺兘澶熺‘瀹氶棶棰樻槸绔炰簤鏉′歡錛屽茍閫氳繃璇曢獙灝嗛棶棰樺绔嬪嚭鏉ャ?/p>

鍏呭垎鍒╃敤璋冭瘯鍣ㄦ彁渚涚殑宸ュ叿

鏄庣櫧鍜屾噦寰楀浣曚嬌鐢ㄦ潯浠舵柇鐐廣佸唴瀛榳atch銆佸瘎瀛樺櫒watch銆佹爤錛屼互鍙婃眹緙栫駭/娣峰悎璋冭瘯銆傚伐鍏瘋兘甯綘瀵繪壘綰跨儲鍜岀‘鍑跨殑璇佹嵁錛岃繖鏄瘑鍒玝ug鐨勫叧閿?/p>

媯鏌ユ柊榪戞敼鍔ㄧ殑浠g爜

璋冭瘯涔熷彲浠ラ氳繃婧愪唬鐮佺増鏈帶鍒舵潵榪涜錛岃繖鐪熸槸涓涓護浜烘儕璁剁殑鏂規硶銆傚鏋滀綘娓呮鍦拌寰楀湪鏌愪釜鏃ユ湡鍓嶇▼搴忚繕鏄伐浣滅殑錛屼絾鏄粠鏌愬ぉ寮濮嬪氨澶辯伒浜嗭紝浣犲氨鍙互涓撴敞浜庢湡闂存敼鍔ㄨ繃鐨勪唬鐮侊紝浠庤岃緝蹇湴鎵懼埌寮曞叆緙洪櫡鐨勪唬鐮佹銆傝嚦灝戯紝涔熷彲浠ュ皢鎼滅儲鑼冨洿緙╁皬鑷蟲煇涓壒瀹氬瓙緋葷粺錛屾垨鏌愬嚑涓枃浠躲?/p>

鍙︿竴涓埄鐢ㄧ増鏈帶鍒剁殑鏂規硶鏄敓鎴愭父鎴忓湪bug鍑虹幇涔嬪墠鐨勪竴涓増鏈傚綋浣犵湅涓嶆竻闂鐨勬椂鍊欒繖灝ゅ叾鏈夌敤銆傚皢鏂拌佺増鏈垎鍒湪璋冭瘯鍣ㄤ腑榪愯錛屽皢鍊間簰鐩告瘮杈冿紝浣犲氨鍙兘鎵懼嚭闂鐨勫叧閿墍鍦ㄣ?/p>

鍚戝叾浠栦漢瑙i噴bug

甯稿父鍦ㄤ綘鍚戜粬浜鴻В閲奲ug鐨勬椂鍊欙紝浣犱細榪藉繂璧蜂竴浜涙楠わ紝騫舵剰璇嗗埌涓浜涢仐婕忔垨蹇樿媯鏌ョ殑鍦版柟銆備笌鍏朵粬鐨勭▼搴忓憳浜ゆ祦鐨勭泭澶勮繕鍦ㄤ簬浠栦滑鍙兘浼氱簿杈熷湴鎻愬嚭鍒牱鐨勫煎緱媯楠岀殑鍋囪銆備笉瑕佷綆浼板拰浠栦漢浜よ皥鐨勪綔鐢紝涔熸案榪滀笉瑕佺緸浜庡姹備粬浜虹殑寤鴻銆備綘鍥㈤槦涓殑鍚屼簨鏄綘鐨勪紮浼達紝涔熸槸浣犱笌鏈鏈夐毦搴︾殑bug鎴樻枟鏃舵渶綺捐壇鐨勬鍣ㄤ箣涓銆?/p>

鍜屽悓浜嬩竴璧瘋皟璇?/h3>

榪欓氬父鏄緢鍚堢畻鐨勶紝鍥犱負姣忎釜浜哄湪瀵逛粯bug涓婇兘鏈夎嚜宸辯殑鐙棬緇忛獙鍜岀瓥鐣ャ備綘涔熻兘瀛﹀埌鏂扮殑鎶鏈紝瀛︿細浠庝粠鏈皾璇曡繃鐨勮搴﹀叆鎵嬪鐞哹ug銆傝鏌愪漢鐪嬬潃浣犺繘琛岃皟璇曪紝榪欏彲鑳芥槸榪芥崟bug鏈鏈夋晥鐨勬柟娉曚箣涓銆?/p>

鏆傛椂鏀句笅闂

鏈夌殑鏃跺欙紝浣犲凡緇忓姝ゆ帴榪戦棶棰橈紝浠ヨ嚦浜庢棤娉曞啀娓呮鍏ㄩ潰鍦扮湅寰呭畠銆傝瘯璇曠湅鏀瑰彉涓涓嬬幆澧冿紝鍑洪棬闂查涗竴涓嬨傚綋浣犳斁鏉撅紝鍐嶅洖鍒伴棶棰樹笂錛屼綘鍙兘浼氭湁鏂扮殑璁よ瘑銆傛湁鏃跺欙紝褰撲綘鍐沖畾璁╄嚜宸變紤鎭竴涓嬫椂錛屼綘鐨勫績閲屼笅鎰忚瘑鍦拌繕鍦ㄦ濊冮棶棰橈紝榪囧悗絳旀灝辮嚜鐒舵誕鐜頒簡銆?/p>

瀵繪眰澶栭儴鐨勫府鍔?/h3>

鑾峰緱甯姪鏈夊縐嶅緢濂界殑閫斿緞銆傚鏋滄槸鍦ㄥ紑鍙戣棰戞父鎴忥紝閭d箞姣忓娓告垙鏈哄埗閫犲晢閮芥湁涓鏁寸彮鐨勪漢錛屼粬浠皢鍦ㄤ綘閬囧埌楹葷儲鐨勬椂鍊欏崗鍔╀綘銆備簡瑙d粬浠殑鑱旂郴鏂瑰紡銆備笁澶ф父鎴忔満鍒墮犲晢鐜板湪閮芥彁渚涚數璇濇敮鎸併佺數瀛愰偖浠舵敮鎸併佸拰寮鍙戣呬簰鐩稿府鍔╃殑鏂伴椈璁ㄨ緇勩?/p>

鍥伴毦鐨勮皟璇曟儏鏅拰妯″紡

娑堢伃bug甯告湁妯″紡鍙驚銆傚湪鑹拌嫤鐨勮皟璇曟儏鏅腑錛屾ā寮忔槸鍏抽敭銆傚湪姝ょ粡楠岃搗浜嗗緢澶т綔鐢ㄣ傚鏋滀綘鏇劇粡瑙佽繃鏌愪釜妯″紡錛屼綘灝卞彲鑳借繀閫熷湴鎵懼嚭bug鎵鍦ㄣ傚笇鏈涗笅鍒楁儏鏅拰妯″紡鑳界粰浣犱竴浜涙柟鍚戙?/p>

Bug浠呭湪鍙戝竷鐗堥噷鍑虹幇錛岃皟璇曠増鍒欐甯?/h3>

閫氬父錛孊ug鍙嚭鐜頒簬鍙戝竷鐗堬紙Release Build錛変腑鎰忓懗鐫榪欐槸鏁版嵁鏈垵濮嬪寲錛屾垨涓庝唬鐮佷紭鍖栨湁鍏崇殑bug銆備竴鑸潵璇達紝鍗充嬌浣犳病鏈夌壒鍦扮紪鍐欒繘琛屽垵濮嬪寲鐨勪唬鐮侊紝璋冭瘯鐗堬紙Debug Build錛変篃浼氳嚜鍔ㄥ皢鍙橀噺鍒濆鍖栦負闆躲傝岃繖闅愬紡鍒濆鍖栧湪鍙戝竷鐗堜腑鏄笉瀛樺湪鐨勶紝鍥犺屽嚭鐜頒簡bug銆?/p>

鎵懼嚭鍘熷洜鐨勫彟涓涓瓥鐣ユ槸錛氬湪璋冭瘯鐗堥噷錛屾參鎱㈠湴閫愪竴鎵撳紑浼樺寲寮鍏熾傚姣忎竴鐐逛紭鍖栭兘榪涜嫻嬭瘯錛屼綘鍙互鎵懼埌緗瓉紲擱銆備緥濡傦紝鍦ㄨ皟璇曠増閲岋紝鍑芥暟涓鑸兘涓嶆槸鍐呰仈鐨勩備絾鍦ㄤ紭鍖栧悗鏈変簺鍑芥暟鑷姩榪涜浜嗗唴鑱旓紝鏈夋椂鏌愪釜bug灝辮繖鏍峰彂浣滀簡銆?/p>

榪樻湁涓鐐瑰煎緱娉ㄦ剰鐨勬槸錛屽湪鍙戝竷鐗堜腑涔熷彲浠ユ墦寮璋冭瘯絎﹀彿錛圖ebug Symbol錛夈傝繖浣垮緱鍦ㄤ竴瀹氱▼搴︿笂錛堣櫧鐒朵竴鑸茍涓嶏級瀵逛紭鍖栬繃鐨勪唬鐮佽繘琛岃皟璇曟垚涓哄彲鑳斤紝浣犵敋鑷沖彲浠ヨ涓閮ㄥ垎璋冭瘯緋葷粺淇濇寔寮鍚備婦渚嬫潵璇達紝浣犲彲浠ヨ浣犵殑寮傚父澶勭悊鍑芥暟鍦ㄥ穿婧冪殑鐜板満鎵ц涓涓叏闈㈢殑鍫嗘爤鍥炴函錛堣繖闇瑕佺鍙鳳級銆傝繖鏄潪甯告湁鐢ㄧ殑錛屽洜涓哄綋嫻嬭瘯鍛樺繀欏昏繍琛屼紭鍖栬繃鐨勬父鎴忕増鏈殑鏃跺欙紝浣犺繕鏄彲浠ュ洖婧▼搴忓穿婧冦?/p>

鍦ㄤ綔浜嗕竴浜涙棤瀹崇殑鏀瑰姩鍚庯紝bug涓嶈浜?/h3>

濡傛灉bug鍦ㄤ竴浜涘畬鍏ㄦ棤鍏崇殑鏀瑰姩錛堜緥濡傛坊鍔犱簡涓琛屾棤瀹崇殑浠g爜錛夊悗涓嶈浜嗭紝閭d箞榪欏氨鍍忔槸涓涓椂搴忛棶棰橈紝鎴栧唴瀛樿鐩栭棶棰樸傚敖綆¤〃闈笂bug宸茬粡娑堝け浜嗭紝浣嗘槸瀹為檯涓婂彲鑳藉彧鏄漿縐誨埌浜嗕唬鐮佺殑鍙︿竴涓儴鍒嗐備笉瑕侀敊榪囪繖涓壘鍑篵ug鐨勬満浼氥侭ug灝卞湪閭e効錛屽皢鏉ヨ繜鏃╂湁涓澶╁畠鑲畾浼氫笉鐭ヤ笉瑙夊湴銆佺嫛鐚懼湴瀹充綘銆?/p>

紜疄鍏鋒湁闂存瓏鎬х殑闂

鍍忓墠闈㈡彁榪囩殑閭f牱錛岃澶氶棶棰樹細鍦ㄥ悎閫傜殑鐜涓嬬ǔ瀹氬湴閲嶇幇銆備絾濡傛灉浣犳棤娉曟帶鍒剁幆澧冿紝閭e氨蹇呴』瑕佽秮闂鎶搗瀹冧笐闄嬬殑灝忚剳琚嬫椂鎶撲綇闂銆傝繖閲岀殑鍏抽敭鏄湪鎹曟崏鍒伴棶棰樼殑鏃跺欒璁頒笅灝藉彲鑳藉鐨勪俊鎭紝浠ヤ究闅忓悗鍙湪蹇呰鏃舵鏌ャ傛満浼氬彲涓嶆槸寰堝鐨勶紝鍥犳瑕佸厖鍒嗗埄鐢ㄦ瘡涓嬈″嚭閿欑殑鏈轟細銆傝繕鏈変竴涓湁鏁堢殑鎶宸у氨鏄皢紼嬪簭鍑洪敊鏃舵敹闆嗗緱鍒扮殑鏁版嵁鍜岀▼搴忔甯告椂鏀墮泦鐨勬暟鎹繘琛屾瘮杈冿紝鍙戠幇鍏朵腑宸紓銆?/p>

鏃犳硶瑙i噴鐨勮涓?/h3>

鏈夋椂褰撲綘鍦ㄥ崟姝ユ墽琛屼唬鐮佺殑鏃跺欙紝鍗村彂鐜板彉閲忚嚜璇磋嚜璇濆湴琚慨鏀逛簡銆傝繖縐嶇湡姝f紓鐨勭幇璞¢氬父琛ㄧず緋葷粺鎴栬皟璇曞櫒澶卞幓浜嗗悓姝ャ傝В鍐蟲柟妗堟槸璇曡瘯鐪?#8220;鍔犲揩娓呴櫎緙撳瓨鐨勯鐜?#8221;錛屼嬌緋葷粺閲嶈幏鍚屾銆?/p>

鎰熻阿Scott Bilas涓烘竻闄ょ紦瀛樺綊綰沖嚭濡備笅鐨?#8220;鍥涢噸”鏂歸拡銆?/p>

  • 閲嶈瘯錛圧etry錛夛細娓呴櫎娓告垙鐨勫綋鍓嶇姸鎬佸啀榪愯銆?
  • 閲嶅緩錛圧ebuild錛夛細鍒犻櫎宸茬紪璇戣繃鐨勪腑闂村璞★紝騫惰繘琛屽交搴曠殑鐗堟湰閲嶅緩銆?
  • 閲嶅惎錛圧eboot錛夛細閫氳繃紜浣嶏紝灝嗕綘鏈哄櫒閲岀殑鍐呭瓨鎿﹂櫎銆?
  • 閲嶈錛圧einstall錛夛細閫氳繃閲嶈錛屾仮澶嶄綘鐨勫伐鍏峰拰鎿嶄綔緋葷粺涓殑鏂囦歡鍜岃緗?

鍦ㄨ繖“鍥涢噸”閲岋紝“閲嶅緩”鏄渶閲嶈鐨勩傛湁鏃跺欙紝緙栬瘧鍣ㄤ笉鑳芥紜湴璇嗗埆浠g爜闂寸殑渚濊禆鍏崇郴錛屽鑷村彈鐗佃繛鐨勪唬鐮佷笉鑳介氳繃緙栬瘧銆傜棁鐘跺父甯告槸涓嶅彲鎬濊鐨勬紓銆備竴嬈″交搴曠殑閲嶅緩鏈夋椂灝辮兘瑙e喅闂銆?/p>

澶勭悊榪欎簺鏃犳硶瑙i噴鐨勮涓虹殑鏃跺欙紝涓瀹氳棰勫厛鐚滄祴璋冭瘯鍣ㄤ細緇欏嚭浣曠緇撴灉銆傞氳繃printf鍑芥暟杈撳嚭騫舵楠屽彉閲忕殑瀹為檯鍊鹼紝鍥犱負璋冭瘯鍣ㄦ湁鏃跺欎細琚糠鎯戯紝鑰屾棤娉曞噯紜湴鍙嶆槧鐪熷疄鐨勫箋?/p>

緙栬瘧鍣ㄥ唴閮ㄩ敊璇?/h3>

鍋跺皵浣犱細紕板埌榪欑鎯呭喌錛岀紪璇戝櫒鎵胯瀹冩棤娉曠悊瑙d綘鐨勪唬鐮侊紝浠庤屾姏鍑轟竴涓紪璇戝櫒鍐呴儴閿欒錛圛nternal Compiler Error錛夈傝繖浜涢敊璇彲鑳芥樉紺哄湪浠g爜涓瓨鍦ㄥ悎娉曟ч棶棰橈紝涔熷彲鑳芥牴鏈槸緙栬瘧鍣ㄨ蔣浠惰嚜韜殑闂錛堜緥濡傦紝瓚呭嚭浜嗗唴瀛樹笂闄愶紝鎴栨棤娉曞鐞嗕綘濡傚悓澶╀功涓鑸殑妯℃澘浠g爜錛夈傞亣鍒扮紪璇戝櫒鍐呴儴閿欒鐨勬椂鍊欙紝寤鴻鎵ц濡備笅姝ラ錛?/p>

  1. 榪涜瀹屾暣鐨勭増鏈噸寤恒?
  2. 閲嶅惎鐢佃剳錛屽啀榪涜涓嬈″畬鏁寸殑鐗堟湰閲嶅緩銆?
  3. 媯鏌ユ槸鍚︽鍦ㄤ嬌鐢ㄦ渶鏂扮増鏈殑緙栬瘧鍣ㄣ?
  4. 媯鏌ヤ換浣曟鍦ㄤ嬌鐢ㄧ殑搴撴槸鍚︽槸鏈鏂扮増鏈?
  5. 璇曢獙鍚屾牱鐨勪唬鐮佹槸鍚﹁兘鍦ㄥ叾浠栫數鑴戜笂閫氳繃緙栬瘧銆?

濡傛灉榪欎簺姝ラ涓嶈兘瑙e喅闂錛岃瘯璇曠‘瀹氱┒绔熸槸閭f浠g爜寮曡搗浜嗛敊璇傚鏋滃彲鑳界殑璇濓紝鐢ㄥ垎娌繪硶鍑忓皯緙栬瘧鍒扮殑浠g爜錛岀洿鑷崇紪璇戝櫒鍐呴儴閿欒娑堝け銆傚綋鏁呴殰鐨勪綅緗凡緇忕‘瀹氬悗錛屾瑙嗚繖孌典唬鐮佸茍淇濊瘉瀹冪湅涓婂幓娌¢敊錛堟渶濂借兘澶氳鍑犱釜浜鴻瀹冿級銆傚鏋滀唬鐮佺湅涓婂幓鐨勭‘鍚堢悊錛屼笅涓姝ヨ瘯鐫閲嶆柊緇勭粐涓涓嬩唬鐮侊紝甯屾湜緙栬瘧鍣ㄨ兘鎶ュ憡鍑烘洿鏈夋剰涔夌殑閿欒淇℃伅銆傛渶鍚庝綘榪樺彲浠ュ皾璇曠敤鏃х増鏈殑緙栬瘧鍣ㄦ潵緙栬瘧銆傚緢鍙兘鍦ㄦ渶鏂扮増鐨勭紪璇戝櫒閲屽瓨鍦╞ug錛岃屼嬌鐢ㄦ棫鐗堟湰鐨勭紪璇戝櫒灝辮兘欏哄埄瀹屾垚緙栬瘧銆?/p>

濡傛灉榪欎簺鍔炴硶閮戒笉濂忔晥錛岃瘯璇曠湅鍦ㄧ綉涓婃悳绱㈢浉浼肩殑闂銆傚鏋滆繕鏄病鏈夌敤錛屽悜緙栬瘧鍣ㄧ殑鍒墮犲晢瀵繪眰棰濆鐨勫府鍔┿?/p>

褰撲綘鎬鐤戦棶棰樹笉鏄嚭鍦ㄨ嚜宸辯殑浠g爜閲?/h3>

涓嶈薄璇濓紝搴旇鎬繪槸鎬鐤戣嚜宸辯殑浠g爜錛佷笉榪囷紝濡傛灉浣犵‘淇′笉鏄綘浠殑浠g爜鐨勯棶棰橈紝鏈濂界殑琛屽姩鏂歸拡鏄埌緗戠珯涓婂鎵炬墍浣跨敤鐨勫嚱鏁板簱鎴栫紪璇戝櫒鐨勬洿鏂拌ˉ涓併傝緇嗛槄璇誨叾readme鏂囦歡錛屾垨鑰呭湪緗戜笂鎼滅儲鍏充簬姝ゅ嚱鏁板簱鎴栫紪璇戝櫒鐨勫凡鐭ラ棶棰樸傚緢澶氭椂鍊欙紝鍏朵粬鐨勪漢涔熺鍒頒簡鐩鎬技鐨勯棶棰橈紝瑙e喅鍔炴硶鎴栬ˉ涓佷篃宸茬粡鏈変簡銆?/p>

涓嶈繃錛屼綘鍙戠幇鐨刡ug鏉ヨ嚜浠栦漢鎻愪緵鐨勫嚱鏁板簱錛屾垨鏉ヨ嚜鏈夋晠闅滅殑紜歡錛堢宸т綘鏄涓涓彂鐜板畠鐨勪漢錛夌殑鍑犵巼涓嶅ぇ銆傝櫧鐒朵笉澶彲鑳斤紝浣嗘湁鏃惰繕鏄細鍙戠敓鐨勩傛渶蹇В鍐蟲柟娉曟槸緙栧啓涓灝忔渚嬬▼灝嗛棶棰橀殧紱誨紑鏉ャ傜劧鍚庝綘鍙互鎶婅繖孌電▼搴廵mail緇欏嚱鏁板簱鐨勪綔鑰咃紝鎴栫‖浠剁敓浜у晢錛屼互渚夸粬浠繘涓姝ュ氨姝ら棶棰樿繘琛岃皟鏌ャ傚鏋滆繖鐪熸槸鍏朵粬浜洪犳垚鐨刡ug錛岀敱浜庝綘鐨勫府鍔╋紝浠栦漢鍙互蹇熷湴璇嗗埆鍜岄噸鐜伴棶棰橈紝浠庤宐ug浠ユ渶蹇熷害寰楀埌鏀規銆?/p>

鐞嗚В搴曞眰緋葷粺

鏈夋椂涓轟簡鎵懼埌涓浜涢毦搴﹀緢楂樼殑bug錛屼綘蹇呴』浜嗚В搴曞眰緋葷粺銆備粎浠呴氭檽C鎴朇++榪樿繙榪滀笉澶熴備負浜嗘垚涓轟竴涓紭縐鐨勭▼搴忓憳錛屼綘蹇呴』鎳傚緱緙栬瘧鍣ㄦ槸濡備綍瀹炵幇杈冮珮灞傛鐨勬蹇碉紝蹇呴』鎳傛眹緙栬璦錛岃繕蹇呴』浜嗚В紜歡鐨勭粏鑺傦紙灝ゅ叾鏄娓告垙鏈烘父鎴忓紑鍙戣岃█錛夈傝櫧鐒惰涓洪珮綰ц璦鎺╃洊浜嗘墍鏈夌殑澶嶆潅鎬у茍娌℃湁閿欙紝浣嗘槸浜嬪疄鏄綋緋葷粺宕╂簝鏃朵綘浼氭劅瑙夋墜瓚蟲棤鎺紝闄ら潪浣犵殑鐞嗚В娣卞埢鑷蟲娊璞′互涓嬨傝嫢瑕佽繘涓姝ヨ璁洪珮灞傛娊璞′細濡備綍閫犳垚闅愭偅錛岃鍙傝“The Law of Leaky Abstractions”錛籗polsky02錛姐?/p>

閭d箞錛屾湁鍝簺搴曞眰緇嗚妭闇瑕佷簡瑙e憿錛熷氨娓告垙鑰岃█錛屼綘搴斿綋浜嗚В濡備笅浜嬮」錛?/p>

  • 浜嗚В緙栬瘧鍣ㄥ疄鐜頒唬鐮佺殑鍘熺悊銆傜啛鎮夌戶鎵褲佽櫄鍑芥暟璋冪敤銆佽皟鐢ㄧ害瀹氥佸紓甯告槸濡備綍瀹炵幇鐨勩傛噦寰楃紪璇戝櫒濡備綍鍒嗛厤鍐呭瓨鍜屽鐞嗗唴瀛樺榻愩?
  • 浜嗚В浣犳墍浣跨敤鐨勭‖浠剁殑緇嗚妭銆備緥濡傦紝鎳傚緱涓庢煇涓壒瀹氱‖浠剁殑楂橀熺紦瀛樻湁鍏崇殑闂錛堢紦瀛樹腑鐨勬暟鎹綍鏃朵細鍜屼富瀛樺偍鍣ㄤ腑涓嶅悓錛夈佸唴瀛樺榻愮殑闄愬埗銆佸瓧鑺傞『搴忥紙Endianness錛岄珮浣嶈繕鏄綆浣嶅瓧鑺傚湪鍓嶏級銆佹爤鐨勫ぇ灝忋佺被鍨嬬殑澶у皬錛堝鏁村瀷int銆侀暱鏁村瀷long銆佸竷灝斿瀷bool錛夈?
  • 浜嗚В姹囩紪璇█鐨勫伐浣滃師鐞嗭紝鑳藉闃呰姹囩紪浠g爜銆傝繖鍦ㄨ皟璇曞櫒鏃犳硶璺熻釜婧愪唬鐮佹椂錛屼緥濡傚湪浼樺寲鍚庣殑鐗堟湰閲屾煡鎵鵑棶棰樻椂錛屽緢鏈夊府鍔┿?

濡備笉鑳界墷鐗㈡帉鎻¤繖浜涚煡璇嗭紝鍦ㄥ浠樼湡姝e洶闅劇殑bug鐨勬椂鍊欙紝浣犵殑鑷村懡寮辯偣灝變細鏆撮湶鍑烘潵銆傛墍浠ュ繀欏葷悊瑙e簳灞傜殑緋葷粺錛岀啛鎮夊叾瑙勫垯銆?/p>

澧炲姞鏈夊姪浜庤皟璇曠殑鍩虹璁炬柦

娌℃湁鍚堥傜殑宸ュ叿鐨勫府鍔╋紝鍦ㄧ湡絀轟腑璋冭瘯紼嬪簭蹇呭畾浼氬緢璐瑰姴銆傝В鍐沖姙娉曟槸璧板彟涓涓瀬绔紝鐩存帴灝嗗ソ鐨勮皟璇曞伐鍏鋒暣鍚堝埌娓告垙閲屻備笅鍒楀伐鍏瘋兘鏋佸ぇ鍦板府鍔╀慨鐞哹ug銆?/p>

鍏佽鍦ㄨ繍琛屼腑淇敼娓告垙鍙橀噺

璋冭瘯鍜岄噸鐜癰ug鏃訛紝鍦ㄨ繍琛屼腑淇敼娓告垙鍙橀噺鐨勫肩殑鍔熻兘鏄潪甯告湁鐢ㄧ殑銆傚疄鐜版鍔熻兘鐨勭粡鍏哥晫闈㈡槸閫氳繃娓告垙涓殑涓涓皟璇曞懡浠よ鎺ュ彛錛圕LI錛孋ommand-Line Interface錛夌敤閿洏淇敼鍙橀噺銆傛寜涓嬫煇涓敭鍚庯紝璋冭瘯淇℃伅瑕嗙洊鏄劇ず鍦ㄦ父鎴忓睆騫曚笂錛屾彁紺轟綘鐢ㄩ敭鐩樿繘琛岃緭鍏ャ備緥濡傦紝褰撲綘鎯蟲妸娓告垙閲岀殑澶╂皵鏀規垚鐙傞鏆撮洦錛屼綘鍙互鍦ㄦ彁紺轟笅杈撳叆“weather stormy”銆傛綾葷晫闈㈠湪璋冭妭鍜屾鏌ュ彉閲忕殑鍊兼垨鐗瑰畾娓告垙鐘舵佺殑鏃跺欎篃寰堝ソ鐢ㄣ?/p>

鍙鍖栫殑AI璇婃柇

鍦ㄨ皟璇曚腑錛屽ソ鐨勫伐鍏鋒槸鏃犱環涔嬪疂錛岃屾爣鍑嗚皟璇曞櫒鍦ㄨ瘖鏂瑼I闂鐨勬椂鍊欐繪槸閭d箞鍔涗笉浠庡績銆傚悇縐嶈皟璇曞櫒铏界劧鍦ㄦ煇涓叿浣撴椂鍒昏兘緇欏嚭寰堝ソ鐨勬繁搴︼紝浣嗗湪瑙g瓟AI緋葷粺鎬庢牱闅忕潃娓告垙榪涜鑰屽彉鍖栬繖涓棶棰樹笂瀹屽叏鏃犵敤銆傝В鍐沖姙娉曟槸鍦ㄦ父鎴忛噷鐩存帴鏋勯犺兘澶熺洃鎺т換鎰忚鑹茬殑璇婃柇鏁版嵁鐨勫彲瑙嗗寲鐗堟湰銆傞氳繃灝嗘枃瀛楀拰3D綰挎潯緇勫悎璧鋒潵錛屼竴浜涢噸瑕佺殑AI緋葷粺濡傚璺紙Pathfinding錛夈佽瑙夎竟鐣岋紙Awareness Boundaries錛夈佸綋鍓嶇洰鏍囩瓑錛屼細杈冨鏄撹窡韙拰鏌ラ敊錛籘ozour02錛斤薊Laming03錛姐?/p>

鏃ュ織鐨勮兘鍔?/h3>

閫氬父錛屾垜浠湪娓告垙閲屾湁鎴愬爢鐨勮鑹插郊姝や氦浜掑拰閫氳錛屼互寰楀埌闈炲父澶嶆潅鐨勮涓恒傚綋浜や簰澶辮觸錛宐ug鍑虹幇涔嬫椂錛屽叧閿湪浜庤兘澶熻褰曞鑷碽ug鐨勬瘡涓鑹茬殑涓埆鐘舵佸強浜嬩歡銆傞氳繃瀵規瘡涓鑹插垱寤哄崟鐙殑鏃ュ織錛屽皢甯︽湁鏃舵埑鐨勫叧閿簨浠惰褰曚笅鏉ワ紝鎴戜滑灝卞彲鑳介氳繃媯鏌ユ棩蹇楁潵鍙戠幇閿欒銆?/p>

璁板綍鍜屽洖鏀劇殑鑳藉姏

鍍忓墠闈㈡彁鍒扮殑閭f牱錛屾壘鍑篵ug鐨勫叧閿湪浜庡彲閲嶇幇鎬с傛瀬鑷寸殑鍙噸鐜版ч渶瑕侀氳繃璁板綍鍜屽洖鏀劇帺瀹剁殑杈撳叆鏉ュ疄鐜幫薊Dawson01錛姐傚浜庨偅浜涙鐜囧緢灝忕殑姝繪満bug錛岃褰曞拰鍥炴斁鏄壘鍑虹‘鍒囧師鍥犵殑鍏抽敭宸ュ叿銆備絾鏄負浜嗘敮鎸佽褰曞拰鍥炴斁錛屼綘蹇呴』璁╂父鎴忕殑琛屼負鏄彲棰勬枡鐨勶紝涔熷氨鏄瀵逛簬鍚屾牱鐨勫垵濮嬬姸鎬侊紝鍚屾牱鐨勭帺瀹惰緭鍏ュ繀瀹氫細寰楀埌鍚屾牱鐨勮緭鍑虹粨鏋溿傝繖騫朵笉鎰忓懗鐫浣犵殑娓告垙瀵圭帺瀹舵潵璇存槸鍙互棰勭煡鐨勶紝鍙槸鎰忓懗鐫浣犲簲褰撳皬蹇冨鐞嗛殢鏈烘暟鐨勪駭鐢燂薊Lecky-Thompson00錛斤薊Freeman-Hargis03錛姐佸垵濮嬬姸鎬併佽緭鍏ョ瓑鏂歸潰錛屽茍鑳藉湪紼嬪簭宕╂簝鏃跺皢杈撳叆搴忓垪淇濆瓨涓嬫潵錛籇awson99錛姐?/p>

璺熻釜瀛樺偍鍒嗛厤浜嬩歡

榪欐牱瀹炵幇浣犵殑瀛樺偍鍒嗛厤綆楀瓙錛屼嬌鍏跺姣忔鍒嗛厤鎿嶄綔閮借繘琛屽叏闈㈢殑鏍堣窡韙傞氳繃涓嶆柇鍦拌褰曠┒绔熸槸璋佸湪鐢寵鍐呭瓨錛屼綘灝嗕笉鍐嶆湁鍐呭瓨娉勬紡闂闇瑕佽В鍐熾?/p>

宕╂簝鏃舵墦鍗板嚭灝藉彲鑳藉鐨勪俊鎭?/h3>

“浜嬪悗璋冭瘯錛圥ost-mortem Debug錛?#8221;鏄緢閲嶈鐨勩傜▼搴忓穿婧冩椂錛岀悊鎯崇殑鎯呭喌涓嬶紝浣犱細甯屾湜鑳藉鎹曟崏鍒拌皟鐢ㄥ爢鏍堛佸瘎瀛樺櫒浠ュ強鎵鏈夊叾瀹冨彲鑳界浉鍏崇殑鐘舵佷俊鎭傝繖浜涗俊鎭彲浠ユ樉紺哄湪灞忓箷涓婏紝鍐欏叆鏌愪釜鏂囦歡錛屾垨鑷姩鍙戦佽嚦寮鍙戣呯殑鐢靛瓙淇$銆傝繖涓綾葷殑宸ュ叿璁╀綘榪呴熸壘鍑哄穿婧冪殑婧愬ご錛屽彧娑堝嚑鍒嗛挓鑰屼笉鏄嚑涓皬鏃躲傚挨鍏舵槸褰撴晠闅滃彂鐢熷湪緹庡伐鎴栫瓥鍒掑悓浠佺殑鏈哄櫒涓婏紝鑰屼粬浠茍涓嶈寰楁槸鎬庢牱瑙﹀彂榪欐宕╂簝鐨勬椂鍊欍?/p>

瀵規暣涓洟闃熻繘琛屽煿璁?/h3>

铏界劧榪欏茍闈炰竴涓兘澶熺紪紼嬪疄鐜扮殑緇撴瀯錛屼絾鏄綘搴斿綋紜畾鍥㈤槦姝g‘浣跨敤浣犲垱寤虹殑宸ュ叿銆傝浠栦滑涓嶈蹇借閿欒瀵硅瘽妗嗭紝紜俊浠栦滑鐭ラ亾鎬庢牱鎼滈泦淇℃伅浠庤屼笉浼氫涪澶卞凡鎵懼埌鐨刡ug絳夌瓑銆傝姳鏃墮棿鏉ュ煿璁祴璇曞憳銆佺編宸ャ佺瓥鍒掓槸鍊煎緱鐨勩?/p>

棰勯槻bug

鍏充簬璋冭瘯鐨勮璁猴紝鑻ユ病鏈変竴孌墊枃瀛楁寚瀵煎浣曞湪絎竴鏃墮棿閬垮厤bug錛屼究涓嶈兘綆楀畬鏁淬傞伒鐓ц繖浜涙寚瀵兼柟閽堬紝浣犳垨鍙伩鍏嶇紪鍐欏嚭鏈塨ug鐨勪唬鐮侊紝鎴栧彲鍦ㄥ伓鐒朵箣闂村彂鐜拌嚜宸變笉鐭ヤ笉瑙夊啓鍑烘潵鐨刡ug銆備笉璁烘槸浠涔堢粨鏋滐紝閮戒細鏈鍚庡府浣犳帓闄ug銆?/p>

灝嗙紪璇戝櫒鐨勮鍛婄駭鍒紙Warning level錛夎皟鍒版渶楂橈紝騫舵寚紺哄皢璀﹀憡褰撲綔閿欒澶勭悊錛圗nable warnings as errors錛夈傞鍏堝敖鍙兘澶氬湴鎺掗櫎璀﹀憡錛屾渶鍚庢墠鐢?pragma灝嗗墿涓嬬殑璀﹀憡鍏抽棴鎺夈傛湁鏃訛紝鑷姩綾誨瀷杞崲鍙婂叾瀹冧竴浜涜鍛婄駭鐨勯棶棰樹細甯︽潵娼滃湪鐨刡ug銆?/p>

浣夸綘鐨勬父鎴忚兘鍦ㄥ涓紪璇戝櫒涓婄紪璇戦氳繃銆傚鏋滀綘紜繚娓告垙鐢ㄥ涓紪璇戝櫒銆侀潰鍚戝涓鉤鍙伴兘鑳界紪璇戦氳繃錛屼笉鍚岀殑緙栬瘧鍣ㄤ箣闂村湪璀﹀憡鍜岄敊璇柟闈㈢殑宸紓灝嗕繚璇佷綘鐨勪唬鐮佹諱綋涓婃洿鍙潬銆備緥濡傦紝緙栧啓浠誨ぉ鍫侴ameCube™娓告垙鏈轟笂鐨勭▼搴忕殑浜轟篃鍙互鍦╓in32涓嬬敓鎴愪竴涓姛鑳界◢寮辯殑鐗堟湰銆傝繖涔熶嬌浣犺兘澶熷垽鏂煇涓猙ug鏄惁鏄叿浣撳鉤鍙版墍鐗規湁鐨勩?/p>

緙栧啓浣犺嚜宸辯殑鍐呭瓨綆$悊鍣ㄣ傝繖瀵逛簬娓告垙鏈烘父鎴忔槸鑷沖叧閲嶈鐨勩備綘蹇呴』娓呮鍦扮煡閬撴鍦ㄤ嬌鐢ㄩ偅鍑犲潡鍐呭瓨錛屽茍瀵瑰唴瀛樹笂婧㈣繘琛屼繚鎶ゃ傜敱浜庡唴瀛樻孩鍑轟細甯︽潵涓浜涙渶闅炬煡澶勭殑bug錛岄鍏堢‘淇濅笉鍙戠敓婧㈠嚭鏄緢閲嶈鐨勩傚湪璋冭瘯鐗堟湰涓嬌鐢ㄩ鐣欑殑涓婃孩鍜屼笅婧繚鎶ゅ唴瀛樺潡鑳戒嬌bug鏇存棭鍦版毚闇茶韓浠姐傚PC寮鍙戣呮潵璇達紝緙栧啓鑷繁鐨勫唴瀛樼鐞嗗櫒涓嶆槸蹇呴』鐨勶紝鍥犱負VC++閲岀殑鍐呭瓨緋葷粺鍔熻兘宸茬粡寰堝己浜嗭紝鑰屼笖榪樻湁鍍廠martHeap涔嬬被鐨勫ソ宸ュ叿鍙互鐢ㄦ潵紜畾鍐呭瓨閿欒銆?/p>

鐢╝ssert鏉ユ楠屽亣璁俱傚湪鍑芥暟鐨勫紑澶村姞涓奱ssert鏉ユ楠屽叧浜庡弬鏁扮殑鍋囪錛堜緥濡傛寚閽堥潪絀烘垨鑼冨洿媯鏌ワ級銆傚彟澶栵紝濡傛灉switch璇彞鐨刣efault鎯呭喌涓嶅簲璇ヨ鎵ц鍒幫紝鍦ㄥ叾涓姞涓奱ssert銆傝繕鏈夛紝鏍囧噯assert鍙互琚墿灞曚互寰楀埌鏇村ソ鐨勮皟璇曟ц兘錛籖abin00b錛姐備緥濡傦紝璁゛ssert灝嗚皟鐢ㄥ爢鏍堟墦鍗板嚭鏉ユ槸寰堟湁鐢ㄧ殑銆?/p>

鎬繪槸鍦ㄥ0鏄庡彉閲忕殑鏃跺欏垵濮嬪寲瀹冧滑銆傚鏋滀綘鏃犳硶鍦ㄥ0鏄庢煇涓彉閲忔椂璧嬩簣瀹冧竴涓湁鎰忎箟鐨勫鹼紝閭d箞灝辯粰瀹冭祴涓涓皢鏉ヤ竴鐪煎氨鑳借鍑哄畠鏈夋病鏈夎鍒濆鍖栬繃鐨勫鏄撹鯨璁ょ殑鍊箋傛湁鏃跺欐垜浠細鐢?xDEADBEEF銆?xCDCDCDCD錛屾垨鐩存帴浣跨敤闆躲?/p>

鎬繪槸灝嗗驚鐜綋鍜宨f璇彞浣撶敤鑺辨嫭鍙鳳紙{}錛夋嫭璧鋒潵銆備篃灝辨槸灝嗕綘鎵鎯崇殑浠g爜鑰佽佸疄瀹炲湴鍖呰搗鏉ワ紝浣夸唬鐮佹墍瀹炵幇鐨勫姛鑳芥洿鐩磋銆?/p>

鍙橀噺璧峰悕瑕佸鏄撳尯鍒嗗郊姝ゃ備緥濡傦紝m_objectITime鍜宮_objectJTime鐪嬩笂鍘誨嚑涔庝竴妯′竴鏍楓傛綾婚棶棰樼殑鍏稿瀷渚嬪瓙鏄妸“i”鍜?#8220;j”鐢ㄤ綔寰幆璁℃暟鍙橀噺銆?#8220;i”鍜?#8220;j”鐪嬩笂鍘誨緢鐩鎬技錛屼綘寰堝鏄撴妸鍏朵腑涓涓璁や負鍙︿竴涓傚彲渚涢夋嫨鐨勬柟娉曟槸錛屼綘鍙互鐢?#8220;i”鍜?#8220;k”錛屾垨鑰呭共鑴嗕嬌鐢ㄦ洿鑳芥弿榪板叾鎰忎箟鐨勫悕瀛椼傛洿澶氭湁鍏沖彉閲忓懡鍚嶇殑璁ょ煡宸紓鐨勪俊鎭彲浠ュ湪錛籑cConnell93錛戒腑鎵懼埌銆?/p>

閬垮厤鍦ㄥ澶勯噸澶嶅悓鏍風殑浠g爜銆備竴妯′竴鏍風殑浠g爜鍚屾椂鍑虹幇鍦ㄥ嚑涓笉鍚岀殑鍦版柟錛岃繖鏄笉鍒╃殑銆傚鏋滃鍏朵腑涓澶勪唬鐮佷綔浜嗘敼鍔紝鍏朵綑鍑犱釜鍦版柟涓嶄竴瀹氫篃浼氳鏀瑰姩銆傚鏋滅湅涓婂幓閲嶅浠g爜鏄繀瑕佺殑錛岄噸鏂拌冭檻涓涓嬪叾鏍稿績鍔熻兘錛屽敖閲忓皢澶у鏁扮殑浠g爜闆嗕腑鍒頒竴澶勩?/p>

閬垮厤浣跨敤閭d簺涓浐瀹氬啓姝葷殑“紲炲鏁?#8221;錛圡agic numbers錛夈傚綋鍗曠嫭涓涓暟瀛楀嚭鐜板湪浠g爜涓紝鍏舵剰涔夊彲鑳芥槸瀹屽叏涓嶄負浜虹煡鐨勩傚鏋滄病鏈夊啓娉ㄩ噴錛屽氨鏃犳硶璁╀漢鐞嗚В涔嬫墍浠ラ夋嫨榪欎釜鏁板瓧鐨勭悊鐢憋紝鍙婅繖涓暟瀛椾唬琛ㄤ粈涔堛傚鏋滃繀欏諱嬌鐢ㄧ濂囨暟錛屽皢瀹冧滑澹版槑涓烘湁瀛楅潰鎰忎箟鐨勫父閲忔垨define銆?/p>

嫻嬭瘯鐨勬椂鍊欒娉ㄦ剰浠g爜瑕嗙洊鐜囥傚湪緙栧啓瀹屼竴孌典唬鐮佷箣鍚庯紝搴旈獙璇佸畠鐨勬瘡涓涓垎鏀兘鑳芥紜湴鎵ц銆傝嫢鍏朵腑涓涓垎鏀粠鏈鎵ц榪囷紝閭d箞寰堝彲鑳藉叾涓娼滀紡鐫bug銆傚湪嫻嬭瘯涓嶅悓鍒嗘敮鐨勮繃紼嬩腑浣犲彲鑳戒細鍙戠幇榪欐牱涓涓猙ug錛屽嵆鍏朵腑鏌愪釜鍒嗘敮鏄牴鏈笉鍙兘琚墽琛屽埌鐨勩傝繖鏍風殑bug瓚婃棭鍙戠幇灝辮秺濂姐?/p>

緇撹

鏈枃鍚戜綘浠嬬粛浜嗘湁鏁堢巼鍦拌皟璇曟父鎴忔墍闇鐨勫伐鍏楓傝皟璇曟湁鏃跺欒褰㈠涓轟竴闂ㄨ壓鏈紝浣嗛偅鍙槸鐢變簬浜轟滑瓚婃湁緇忛獙灝卞仛寰楄秺濂姐傚綋浣犳妸浜旀璋冭瘯娉曡瀺浼氳瘡閫氾紝鍙堝浼氫簡璇嗗埆bug妯″紡錛屽茍灝嗚嚜宸辯殑璋冭瘯宸ュ叿闆嗘垚鍒版父鎴忎腑錛屽啀褰㈡垚鑷繁鍦ㄨ皟璇曚笂鐨勪釜浜洪鏍煎拰緇濇嫑錛屽緢蹇湴錛屼綘灝嗙啛緇冨湴鏈夌郴緇熷湴榪芥崟鍒板茍涓旀秷鐏渶鍥伴毦鐨刡ug銆傛渶鍚庡啀鍔犱笂涓鐐歸闃詫紝鎴戞兂浣犵殑娓告垙寮鍙戜細涓甯嗛欏猴紝涓涓猙ug閮芥病鏈変篃璇翠笉瀹氥?/p>

鑷磋阿

鎰熻阿Scott Bilas鍜孞ack Matthews錛屼粬浠彁浜嗘瀬濂界殑寤鴻錛屽茍涓烘湰鏂囪礎鐚簡涓浜涗釜浜虹粡楠屽拰鏅烘収銆備漢浠湅寰呰皟璇曟湁鍚勮嚜鐨勮搴︼紝鍥犳浠栦滑鐨勬剰瑙佸湪鎺ㄦ暡鏈枃寤鴻鐨勬椂鍊欒搗浜嗛潪甯稿ぇ鐨勪綔鐢ㄣ?/p>

鍙傝冩枃鐚?/h2>
  • [Dawson99] Dawson, Bruce, “Structured Exception Handling,” Game Developer Magazine (Jan 1999), pp. 52–54.
  • [Dawson01] Dawson, Bruce, “Game Input Recording and Playback,” Game Programming Gems 2, Charles River Media, 2001.
  • [Freeman-Hargis03] Freeman-Hargis, James, “The Statistics of Random Numbers,” AI Game Programming Wisdom 2, Charles River Media, 2003.
  • [Laming03] Laming, Brett, “The Art of Surviving a Simulation Title,” AI Game Programming Wisdom 2, Charles River Media, 2003.
  • [Lecky-Thompson00] Lecky-Thompson, Guy, “Predictable Random Numbers,” Game Programming Gems, Charles River Media, 2000.
  • [McConnell93] McConnell, Steve, Code Complete: A Practical Handbook of Software Construction, Microsoft Press, 1993.
  • [Rabin00a] Rabin, Steve, “Designing a General Robust AI Engine,” Game Programming Gems, Charles River Media, 2000.
  • [Rabin00b] Rabin, Steve, “Squeezing More Out of Assert,” Game Programming Gems, Charles River Media, 2000.
  • [Rabin02] Rabin, Steve, “Implementing a State Machine Language,” AI Game Programming Wisdom, Charles River Media, 2000.
  • [Spolsky02] Spolsky, Joel, “The Law of Leaky Abstractions,” Joel on Software, 2002, available online at www.joelonsoftware.com/articles/LeakyAbstractions.html.
  • [Tozour02] Tozour, Paul, “Building an AI Diagnostic Toolset,” AI Game Programming Wisdom, Charles River Media, 2002.



CrazyDev 2010-04-27 20:48 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品视频久久久| 午夜一区在线| 欧美在线视频一区二区三区| 99热免费精品在线观看| 欧美三日本三级少妇三2023| 麻豆精品视频在线观看视频| 国产精品久久久| 亚洲日本va在线观看| 国产亚洲精品v| 在线一区二区日韩| 亚洲精品乱码久久久久久| 欧美一区二区在线看| 亚洲一区欧美| 欧美日韩岛国| 亚洲久久在线| 夜夜躁日日躁狠狠久久88av| 免费日韩av电影| 麻豆精品在线播放| 黄色一区二区在线| 久久精品免视看| 久久一区二区三区国产精品| 国产一区二区毛片| 欧美一区二区三区的| 欧美一区二区精品| 国产精品日韩在线观看| 亚洲天堂男人| 性做久久久久久久免费看| 国产精品hd| 亚洲欧美激情诱惑| 久久精品欧美日韩| 国产视频一区在线| 久久精品国产在热久久| 久久久亚洲国产天美传媒修理工| 韩国成人福利片在线播放| 性色av一区二区怡红| 久久大逼视频| 黄色亚洲网站| 老司机午夜精品视频在线观看| 欧美不卡高清| 日韩视频在线观看国产| 欧美精品首页| 亚洲网站在线观看| 欧美一级淫片播放口| 国内精品模特av私拍在线观看| 久久视频精品在线| 亚洲品质自拍| 篠田优中文在线播放第一区| 国产一区久久| 欧美成人免费小视频| 夜夜嗨av一区二区三区四季av| 亚洲欧洲99久久| 黄色av成人| 欧美福利在线观看| 亚洲在线观看免费视频| 久久男女视频| 亚洲免费成人av电影| 欧美调教vk| 久久久www| 亚洲国产成人精品久久久国产成人一区| 香蕉久久久久久久av网站| 欧美成人69av| 亚洲一区二区欧美日韩| 国模套图日韩精品一区二区| 欧美国产先锋| 香蕉久久夜色| 亚洲经典三级| 欧美中文字幕在线播放| 亚洲国产91精品在线观看| 欧美日韩综合久久| 久久激情网站| 一本大道久久精品懂色aⅴ| 久久精品在线免费观看| 一区二区三区高清不卡| 韩日精品视频| 欧美性猛交99久久久久99按摩| 久久国产精品99国产| 亚洲精品孕妇| 欧美国产在线电影| 久久精视频免费在线久久完整在线看| 日韩视频二区| 亚洲国产精品久久久久秋霞影院| 国产精品都在这里| 欧美电影免费观看网站| 久久精品盗摄| 亚洲女人天堂成人av在线| 亚洲欧洲另类国产综合| 老司机午夜免费精品视频 | 欧美精品在线视频观看| 欧美一区在线看| 在线一区亚洲| 亚洲精品国产视频| 女女同性精品视频| 久久久久国内| 久久国产精品久久久| 亚洲一区精品在线| 一本色道久久88精品综合| 在线观看日韩专区| 国内成+人亚洲| 国产欧美一区视频| 国产精品久久久一区二区| 欧美日韩国产免费观看| 欧美成人自拍| 欧美国产成人精品| 欧美大香线蕉线伊人久久国产精品| 久久久av水蜜桃| 久久久国产精品一区二区三区| 午夜精品福利一区二区蜜股av| 中文国产亚洲喷潮| 亚洲一二三四久久| 亚洲一区二区三区激情| 国产精品99久久久久久宅男| 一区二区高清在线观看| 日韩午夜av电影| 日韩视频免费观看| 制服丝袜激情欧洲亚洲| 在线视频一区二区| 亚洲综合久久久久| 午夜精品在线观看| 久久精品国产精品亚洲综合| 久久精品日韩欧美| 久久一区亚洲| 欧美高清视频一区| 欧美日韩国产成人| 国产精品成人一区| 国产欧美日本一区视频| 一区二区久久| 亚洲视频免费在线观看| 亚洲男人av电影| 久久国产加勒比精品无码| 美脚丝袜一区二区三区在线观看 | 亚洲一区在线观看视频| 午夜精品视频在线观看| 欧美在线日韩| 免费久久99精品国产自| 亚洲欧洲一区| 亚洲欧美国产视频| 久久亚洲国产精品日日av夜夜| 欧美激情精品久久久久久久变态| 欧美天堂在线观看| 国语自产精品视频在线看抢先版结局 | 亚洲国产一区二区a毛片| 日韩视频中文| 欧美在线影院在线视频| 亚洲第一精品在线| 在线一区观看| 久久频这里精品99香蕉| 欧美日韩亚洲免费| 国内精品亚洲| 亚洲视频一区在线| 榴莲视频成人在线观看| 亚洲精品国产精品国自产观看| 亚洲一区二区在线看| 欧美99在线视频观看| 国产九区一区在线| 亚洲精品久久嫩草网站秘色| 欧美一区二区三区免费观看视频| 欧美成人国产va精品日本一级| 在线视频精品一区| 欧美sm视频| 国产亚洲欧美日韩精品| 99综合电影在线视频| 久久综合久久久久88| 亚洲一区二区三区四区中文 | 国产精品久久久久久久久借妻| 尹人成人综合网| 午夜久久久久久| 亚洲人午夜精品| 欧美一区二区在线免费播放| 欧美日韩一本到| 亚洲三级电影全部在线观看高清| 久久精品人人做人人爽| 一本色道久久综合亚洲二区三区| 免费成人高清视频| 国产亚洲综合在线| 亚洲欧美日韩成人| 亚洲精品午夜精品| 欧美gay视频| 在线观看亚洲精品| 久久精品主播| 亚洲免费综合| 国产精品久久网站| 一本色道久久88亚洲综合88| 亚洲高清视频一区| 久久只有精品| 亚洲成人在线网站| 美女999久久久精品视频| 欧美一区二区视频97| 国产欧美精品日韩精品| 香蕉免费一区二区三区在线观看| 99国产精品国产精品久久| 欧美精品激情在线观看| 亚洲精品在线二区| 亚洲激情在线激情| 欧美日本国产| 亚洲视频免费在线| 一区二区三区高清在线| 国产精品xxxxx| 西西裸体人体做爰大胆久久久| 亚洲午夜国产一区99re久久| 国产精品色婷婷|