锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品系列在线,91久久午夜,欧美www在线http://www.shnenglu.com/Fox/archive/2010/01/07/105053.htmlFoxFoxWed, 06 Jan 2010 17:32:00 GMThttp://www.shnenglu.com/Fox/archive/2010/01/07/105053.htmlhttp://www.shnenglu.com/Fox/comments/105053.htmlhttp://www.shnenglu.com/Fox/archive/2010/01/07/105053.html#Feedback0http://www.shnenglu.com/Fox/comments/commentRss/105053.htmlhttp://www.shnenglu.com/Fox/services/trackbacks/105053.html鏈枃鍚屾鑷?a mce_ target="_blank">娓告垙浜虹敓

鏈榪戞湁鐐瑰繖錛屾湰鏉ヨ鐢╝utoconf+automake鎶婅嚜宸辯殑浠g爜姊崇悊涓涓嬬殑錛屽洜涓哄伐浣滃仠浜嗚繎涓ゅ懆銆?/p>

鏈兂鐪嬬湅鏈変粈涔堝伐鍏峰彲浠ヨ嚜鍔ㄧ敓鎴怣akefile.am錛岀瓟妗堟槸錛?a mce_ target="_blank">Automake涓嶆敮鎸侀氶厤絎︼紝鑰屼笖榪樺彛鍙e0澹幫紝鎸尟鏈夎瘝銆傛棦鐒惰鐨勮繖涔堣█璇嶅嚳鍑匡紝鎯呮繁鎰忓垏錛屾垜鎯蟲垜涔熸病鏈夊繀瑕佺敤shell鐢熸垚Makefile.am浜嗐?/p>

鐢ㄧ潃鐢ㄧ潃錛屾垜鏈夌偣鎬鐤戜漢鐢熶簡錛氫笉鐭ラ亾浠涔堟椂鍊欓渶瑕佺敤autoconf鍜宎utomake銆傚鏋滄垜鍙槸騫蟲椂鑷繁鍐欎竴浜泃oy codes鐨勮瘽錛屾劅瑙夌敤autoconf鍜宎utomake鏈夌偣澶х偖鎵撹殜瀛愮殑鎰熻錛岃屼笖姣忔鏂板姞浠g爜鎴栬呮槸縐婚櫎浠g爜銆佺敋鑷蟲槸鏇存敼鐩綍錛岄兘瑕侀噸鏂版墽琛? autoconf銆乤utomake錛堜笉鐭ラ亾鎴戣鐨勫涓庝笉瀵癸級銆傚浜庝竴涓ぇ鍨嬮」鐩紝鎵ц涓嬈onfigure鍜宮ake鏄緢鐥涜嫤鐨勪竴浠朵簨錛宮ake鐨勪腑 闂寸洰鏍囨枃浠舵垨鑰呭簱鏂囦歡銆佹墽琛屾枃浠跺掓槸涓嶄竴瀹氶潪寰楀畬鍏╮ebuild錛宑onfigure鐨勯厤緗鏌ュ憿錛熸槸涓嶆槸涔熸湁綾諱技鏈哄埗錛熷弽姝f垜鍦ㄧ敤ogre鎴栬? cegui鐨勬椂鍊欙紝姣忔鎵ц./configure鏄噸鏂伴厤緗簡鐨勩?/p>

瀹為檯鍦ㄥ紑婧愰」鐩噷闈篃涓嶅彲鑳界淮鎶や袱濂梞akefile鍚с?/p>

鐪嬩簡涓涓?a mce_ target="_blank">googletest鐨勯厤緗紝鍊掓槸娓呯埥鐨勫緢錛屾渶澶х殑鐗圭偣鏄彧鏈変竴涓狹akefile.am錛岃繖鏍峰湪涓涓」鐩噷闈㈠彧闇瑕佺淮鎶や竴涓狹akefile.am灝卞浜嗐?/p>

cegui姣旇緝甯歌錛屾瘡涓瓙鐩綍閮戒細緇存姢涓涓狹akefile.am銆?/p>

闇瑕佺壒鍒敞鎰忕殑鏄痮gre浠?a mce_ target="_blank">1.7.0寮濮嬪凡緇忓紑濮嬩嬌鐢?a mce_ target="_blank">cmake浜?#8230;…

璇峰惉棰橈細綆$悊涓皬鍨嬮」鐩紝浣犲懼悜浜庝笅闈㈠摢涓伐鍏鳳紵

o make錛氶捇鏈ㄥ彇鐏紝鐜╃殑灝辨槸涓妧鏈紝緙栬瘧浠g爜錛屽彧鐢ㄨB鐨勶紝涓嶇敤鐗汢鐨勶紝浣犺鏄敤浠涔坈make錛屼綘閮戒笉濂芥剰鎬濊窡鍒漢鎵撴嫑鍛鹼紝榪欎箞緇忓吀鐨勪笢瑗匡紝綺鵑氶渶瑕佸涔咃紵瑕佹垜璇存庝箞鐫涔熷緱涓妸淇╂湀鍚э紝涓妸淇╂湀錛熼偅鏄叆闂紝鑷沖皯鍗婂勾錛屽氨榪欒繕寰楁湁Feldman鐨勬偀鎬э紝涓嶈垗鏄煎錛?/p>

o autoconf+automake錛氭棦鏈夌兢浼楀熀紜錛屽張鏈夋妧鏈惈閲忥紝浣犳槸閭f牱鎷夎槳鐨勭敺浜猴紝涓嶇鍦ㄤ粈涔堝湴鏂癸紝灝卞ソ鍍忔紗榛戜腑鐨勮悿鐏櫕涓鏍鳳紝閭f牱鐨勯矞鏄庯紝閭f牱鐨? 鍑轟紬銆備綘閭e咖閮佺殑鐪肩錛岀█鍢樼殑鑳″柍瀛愶紝紲炰箮鍏舵妧鐨勬寚娉曪紱鏃㈠彲浠ヨ葷瑧鍘熷浜虹殑鐢熶駭鍔涗綆涓嬶紝榪樺彲浠ラ剻瑙嗙幇浠d漢鐨勪笉瀛︽棤鏈?/p>

o cmake錛氬湪MSVCers闈㈠墠鎶笉璧峰ご錛屽湪UNIXers闈㈠墠浼間箮鏇存姮涓嶈搗澶達紱鑰宑make瀵筗INDOWS鍜孶NIX騫沖彴鐨勫畬緹庢敮鎸侊紝瓚充互璁╂墍鏈夌殑 MSVCers鍜孶NIXer鍦ㄤ綘闈㈠墠鎶笉璧峰ご錛屼綘鏄叕楦′腑鐨勬垬鏂楁満銆傛墍浠ヤ綘榪樻槸鍙互瓚鵑珮姘旀槀鐨勪涪涓嬩竴鍙ワ細璧癗B鐨勮礬錛岃SB璇村幓鍚с?/p>




Fox 2010-01-07 01:32 鍙戣〃璇勮
]]>
Autotools鍒濅綋楠?/title><link>http://www.shnenglu.com/Fox/archive/2009/12/23/autotools_first_use.html</link><dc:creator>Fox</dc:creator><author>Fox</author><pubDate>Tue, 22 Dec 2009 18:18:00 GMT</pubDate><guid>http://www.shnenglu.com/Fox/archive/2009/12/23/autotools_first_use.html</guid><wfw:comment>http://www.shnenglu.com/Fox/comments/103743.html</wfw:comment><comments>http://www.shnenglu.com/Fox/archive/2009/12/23/autotools_first_use.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.shnenglu.com/Fox/comments/commentRss/103743.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Fox/services/trackbacks/103743.html</trackback:ping><description><![CDATA[     鎽樿: 浠庢帴瑙﹀拰浣跨敤make浠ユ潵錛屽墠鍓嶅悗鍚庡啓浜嗕笉灝慚akefile錛堟坊娣誨噺鍑忋佷慨淇ˉ琛ワ紝绱涓婂崈琛屾槸鏈夌殑錛夛紝浠婂ぉ鍦ㄩ噸鏂版暣鐞嗕唬鐮佺殑緇勭粐緇撴瀯涔嬪悗錛岀獊鐒跺氨鎯籌細鎴戜負浠涔堜笉浣跨敤Autotools鍛紵 <br> <br>鍦ㄥ紑濮嬩綋楠屽姛鑳藉己澶х殑Autotools涔嬪墠錛岀畝鍗曪紙璇︾粏錛夊洖蹇嗘葷粨涓涓嬫垜浣跨敤make鐨勭粡鍘嗗拰鎬濊冪殑榪囩▼錛屽弽鐪佷竴涓嬬湅鐪嬭嚜宸卞湪鎺ヨЕ榪欎簺鏂伴矞浜嬬墿鐨勬椂鍊欏埌搴曡蛋浜嗗灝戝集璺?nbsp; <a href='http://www.shnenglu.com/Fox/archive/2009/12/23/autotools_first_use.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/Fox/aggbug/103743.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Fox/" target="_blank">Fox</a> 2009-12-23 02:18 <a href="http://www.shnenglu.com/Fox/archive/2009/12/23/autotools_first_use.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>ACE vs Boost: Singleton鐨勫疄鐜?/title><link>http://www.shnenglu.com/Fox/archive/2009/09/22/96898.html</link><dc:creator>Fox</dc:creator><author>Fox</author><pubDate>Mon, 21 Sep 2009 16:38:00 GMT</pubDate><guid>http://www.shnenglu.com/Fox/archive/2009/09/22/96898.html</guid><wfw:comment>http://www.shnenglu.com/Fox/comments/96898.html</wfw:comment><comments>http://www.shnenglu.com/Fox/archive/2009/09/22/96898.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.shnenglu.com/Fox/comments/commentRss/96898.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Fox/services/trackbacks/96898.html</trackback:ping><description><![CDATA[<p>鏈枃鍚屾鑷?a target="_blank">娓告垙浜虹敓</a> <p>浠ュ墠鏇劇粡璁ㄨ榪?a target="_blank">Singleton鐨勫疄鐜?/a>錛岃繖嬈″湪瀵圭収ACE鍜孊oost浠g爜鐨勬椂鍊欙紝鍙堥噸鏂板瑙嗕簡涓涓嬩簩鑰呭Singleton涓嶅悓鐨勫疄鐜般傚叾闂寸殑宸埆涔熶綋鐜頒簡涓嶅悓鐨勭紪紼嬪摬瀛︼細ACE鐨勫疄鐜版洿鍔犲亸閲嶅綰跨▼涓殑瀹夊叏鍜屾晥鐜囬棶棰橈紱Boost鐨勫疄鐜板垯鍋忛噸浜庝嬌鐢ㄨ璦鑷韓鐨勭壒鎬ф弧瓚砈ingleton妯″紡鐨勫熀鏈渶姹傘? <p><strong>o ACE鐨勫疄鐜?/strong> <p>Douglas C. Schmidt鍦?a target="_blank">Double-Checked Locking: An Optimization Pattern for Efficiently Initializing and Accessing Thread-safe Objects</a>涓鏂囦腑瀵筪ouble-check lock錛堜竴鑸瘧涓哄弻媯閿侊級榪涜浜嗚緇嗙殑闃愯堪銆? <p>ACE鐨凷ingleton浣跨敤Adapter妯″紡瀹炵幇瀵瑰叾浠栫被鐨勯傞厤錛屼嬌涔嬪叿鏈夊叏灞鍞竴鐨勫疄渚嬨傜敱浜嶤++鏍囧噯騫墮潪鏄庣‘鎸囧畾鍏ㄥ眬闈欐佸璞$殑鍒濆鍖栭『搴忥紝ACE浣跨敤double-check lock淇濊瘉綰跨▼瀹夊叏錛屽茍浣夸箣涓嶅彈鍏ㄥ眬闈欐佸璞″垵濮嬪寲欏哄簭鐨勫獎鍝嶏紝鍚屾椂涔熼伩鍏嶄簡鍏ㄥ眬闈欐佸疄鐜版柟寮忕殑鍒濆鍖栧悗涓嶄嬌鐢ㄧ殑寮閿銆? <p>濡傛灉浣犺兘澶熷噯紜殑鍖哄垎浠ヤ笅涓夌瀹炵幇鐨勫紛绔拰闅愭偅錛屽double-check lock涔熷氨鏈変簡瓚沖鐨勪簡瑙c? <blockquote><code> <p>// -------------------------------------------<br>class Singleton<br>{<br>public:<br>    static Singleton *instance (void)<br>    {<br>        // Constructor of guard acquires<br>        // lock_ automatically.<br>        Guard<Mutex> guard (lock_);<br>        // Only one thread in the<br>        // critical section at a time.<br>        if (instance_ == 0)<br>            instance_ = new Singleton;<br>        return instance_;<br>        // Destructor of guard releases<br>        // lock_ automatically.<br>    }<br>private:<br>    static Mutex lock_;<br>    static Singleton *instance_;<br>}; <p>// ---------------------------------------------<br>static Singleton *instance (void)<br>{<br>    if (instance_ == 0) {<br>        Guard<Mutex> guard (lock_);<br>        // Only come here if instance_<br>        // hasn鈥檛 been initialized yet.<br>        instance_ = new Singleton;<br>    }<br>    return instance_;<br>} <p>// ---------------------------------------------<br>class Singleton<br>{<br>public:<br>    static Singleton *instance (void)<br>    {<br>        // First check<br>        if (instance_ == 0)<br>        {<br>            // Ensure serialization (guard<br>            // constructor acquires lock_).<br>            Guard<Mutex> guard (lock_);<br>            // Double check.<br>            if (instance_ == 0)<br>                instance_ = new Singleton;<br>        }<br>        return instance_;<br>        // guard destructor releases lock_.<br>    }<br>private:<br>    static Mutex lock_;<br>    static Singleton *instance_;<br>};</p></code></blockquote> <p>鏇村璇︽儏錛岃Schmidt鑰佸笀鐨勫師鏂囧拰ACE_Singleton瀹炵幇銆? <p><strong>o Boost鐨勫疄鐜?/strong> <p>Boost鐨凷ingleton涔熸槸綰跨▼瀹夊叏鐨勶紝鑰屼笖娌℃湁浣跨敤閿佹満鍒躲傚綋鐒訛紝Boost鐨凷ingleton鏈変互涓嬮檺鍒訛紙閬典粠榪欎簺闄愬埗錛屽彲浠ユ彁楂樻晥鐜囷級錛? <p>o The classes below support usage of singletons, including use in program startup/shutdown code, AS LONG AS there is only one thread running before main() begins, and only one thread running after main() exits. <p>o This class is also limited in that it can only provide singleton usage for classes with default constructors. <blockquote><code> <p>// T must be: no-throw default constructible and no-throw destructible<br>template <typename T><br>struct singleton_default<br>{<br>private:<br>    struct object_creator<br>    {<br>        // This constructor does nothing more than ensure that instance()<br>        //  is called before main() begins, thus creating the static<br>        //  T object before multithreading race issues can come up.<br>        object_creator() { singleton_default<T>::instance(); }<br>        inline void do_nothing() const { }<br>    };<br>    static object_creator create_object; <p>    singleton_default(); <p>public:<br>    typedef T object_type; <p>    // If, at any point (in user code), singleton_default<T>::instance()<br>    //  is called, then the following function is instantiated.<br>    static object_type & instance()<br>    {<br>        // This is the object that we return a reference to.<br>        // It is guaranteed to be created before main() begins because of<br>        //  the next line.<br>      static object_type obj; <p>      // The following line does nothing else than force the instantiation<br>      //  of singleton_default<T>::create_object, whose constructor is<br>      //  called before main() begins.<br>      create_object.do_nothing(); <p>      return obj;<br>    }<br>};<br>template <typename T><br>typename singleton_default<T>::object_creator<br>singleton_default<T>::create_object;</p></code></blockquote> <p>瀵逛簬澶氭暟Singleton浣跨敤錛孊oost鎻愪緵鐨勭増鏈畬鍏ㄨ兘澶熸弧瓚抽渶姹傘備負浜嗘晥鐜囷紝鎴戜滑鏈夊繀瑕佸鍏朵嬌鐢ㄤ綔鍑轟竴瀹氱殑闄愬埗銆?/p> <p>鑰屽湪澶氱嚎紼嬬紪紼嬩腑錛屽垯鏈夊繀瑕佷嬌鐢╠ouble-check lock闄嶄綆棰戠箒鍔犻攣甯︽潵鐨勫紑閿銆?/p> <p>-------------------------------------------------------------------------------</p> <p>PS: 嬈h祻Soft鐨勪竴鍙ヨ瘽錛?strong>緇忓緱璧瘋鎯戯紝鑰愬緱浣忓瘋瀵?/strong>銆?/p><img src ="http://www.shnenglu.com/Fox/aggbug/96898.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Fox/" target="_blank">Fox</a> 2009-09-22 00:38 <a href="http://www.shnenglu.com/Fox/archive/2009/09/22/96898.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>IOCP浣跨敤鏃跺父瑙佺殑鍑犱釜閿欒http://www.shnenglu.com/Fox/archive/2009/09/12/95975.htmlFoxFoxFri, 11 Sep 2009 16:20:00 GMThttp://www.shnenglu.com/Fox/archive/2009/09/12/95975.htmlhttp://www.shnenglu.com/Fox/comments/95975.htmlhttp://www.shnenglu.com/Fox/archive/2009/09/12/95975.html#Feedback1http://www.shnenglu.com/Fox/comments/commentRss/95975.htmlhttp://www.shnenglu.com/Fox/services/trackbacks/95975.html鏈枃鍚屾鑷?a target="_blank">娓告垙浜虹敓

鍦ㄤ嬌鐢↖OCP鏃訛紝鏈閲嶈鐨勫嚑涓狝PI灝辨槸GetQueueCompeltionStatus銆乄SARecv銆乄SASend錛屾暟鎹殑I/O鍙婂叾瀹屾垚鐘舵侀氳繃榪欏嚑涓帴鍙h幏鍙栧茍榪涜鍚庣畫澶勭悊銆?/p>

GetQueueCompeltionStatus attempts to dequeue an I/O completion packet from the specified I/O completion port. If there is no completion packet queued, the function waits for a pending I/O operation associated with the completion port to complete.

BOOL WINAPI GetQueuedCompletionStatus(
  __in   HANDLE CompletionPort,
  __out  LPDWORD lpNumberOfBytes,
  __out  PULONG_PTR lpCompletionKey,
  __out  LPOVERLAPPED *lpOverlapped,
  __in   DWORD dwMilliseconds
);

If the function dequeues a completion packet for a successful I/O operation from the completion port, the return value is nonzero. The function stores information in the variables pointed to by the lpNumberOfBytes, lpCompletionKey, and lpOverlapped parameters.

闄や簡鍏沖績榪欎釜API鐨刬n & out錛堣繖鏄疢SDN寮澶寸殑鍑犺灝卞彲浠ュ憡璇夋垜浠殑錛変箣澶栵紝鎴戜滑鏇村姞鍏沖績涓嶅悓鐨剅eturn & out鎰忓懗鐫浠涔堬紝鍥犱負鐢變簬鍚勭宸茬煡鎴栨湭鐭ョ殑鍘熷洜錛屾垜浠殑紼嬪簭騫朵笉鎬繪槸鏈夋紜殑return & out銆?/p>

If *lpOverlapped is NULL and the function does not dequeue a completion packet from the completion port, the return value is zero. The function does not store information in the variables pointed to by the lpNumberOfBytes and lpCompletionKey parameters. To get extended error information, call GetLastError. If the function did not dequeue a completion packet because the wait timed out, GetLastError returns WAIT_TIMEOUT.

鍋囪鎴戜滑鎸囧畾dwMilliseconds涓篒NFINITE銆?/p>

榪欓噷甯歌鐨勫嚑涓敊璇湁錛?/p>

WSA_OPERATION_ABORTED (995): Overlapped operation aborted.

鐢變簬綰跨▼閫鍑烘垨搴旂敤紼嬪簭璇鋒眰錛屽凡鏀懼純I/O 鎿嶄綔銆?/p>

MSDN: An overlapped operation was canceled due to the closure of the socket, or the execution of the SIO_FLUSH command in WSAIoctl. Note that this error is returned by the operating system, so the error number may change in future releases of Windows.

鎴愬洜鍒嗘瀽錛氳繖涓敊璇竴鑸槸鐢變簬peer socket琚?strong>closesocket鎴栬?strong>WSACleanup鍏抽棴鍚庯紝閽堝榪欎簺socket鐨刾ending overlapped I/O operation琚腑姝€?/p>

瑙e喅鏂規錛氶拡瀵箂ocket錛屼竴鑸簲璇ュ厛璋冪敤shutdown紱佹I/O鎿嶄綔鍚庡啀璋冪敤closesocket鍏抽棴銆?/p>

涓ラ噸紼嬪害錛?strong>杞誨井鏄撳鐞?/strong>銆?/p>

WSAENOTSOCK (10038): Socket operation on nonsocket.

MSDN: An operation was attempted on something that is not a socket. Either the socket handle parameter did not reference a valid socket, or for select, a member of an fd_set was not valid.

鎴愬洜鍒嗘瀽錛氬湪涓涓潪濂楁帴瀛椾笂灝濊瘯浜嗕竴涓搷浣溿?/p>

浣跨敤closesocket鍏抽棴socket涔嬪悗錛岄拡瀵硅invalid socket鐨勪換浣曟搷浣滈兘浼氳幏寰楄閿欒銆?/p>

瑙e喅鏂規錛氬鏋滄槸澶氱嚎紼嬪瓨鍦ㄥ鍚屼竴socket鐨勬搷浣滐紝瑕佷繚璇佸socket鐨処/O鎿嶄綔閫昏緫涓婄殑欏哄簭錛屽仛濂絪ocket鐨刧raceful disconnect銆?/p>

涓ラ噸紼嬪害錛?strong>杞誨井鏄撳鐞?/strong>銆?/p>

WSAECONNRESET (10054): Connection reset by peer.

榪滅▼涓繪満寮鴻揩鍏抽棴浜嗕竴涓幇鏈夌殑榪炴帴銆?/p>

MSDN: An existing connection was forcibly closed by the remote host. This normally results if the peer application on the remote host is suddenly stopped, the host is rebooted, the host or remote network interface is disabled, or the remote host uses a hard close (see setsockopt for more information on the SO_LINGER option on the remote socket). This error may also result if a connection was broken due to keep-alive activity detecting a failure while one or more operations are in progress. Operations that were in progress fail with WSAENETRESET. Subsequent operations fail with WSAECONNRESET.

鎴愬洜鍒嗘瀽錛氬湪浣跨敤WSAAccpet銆乄SARecv銆乄SASend絳夋帴鍙f椂錛屽鏋減eer application紿佺劧涓錛堝師鍥犲涓婃墍榪幫級錛屽線鍏跺搴旂殑socket涓婃姇閫掔殑operations灝嗕細澶辮觸銆?/p>

瑙e喅鏂規錛氬鏋滄槸瀵規柟涓繪満鎴栫▼搴忔剰澶栦腑姝紝閭e氨鍙湁鍚勫畨澶╁懡浜嗐備絾濡傛灉榪欑▼搴忔槸浣犲啓鐨勶紝鑰屼綘鍙槸hard close錛岄偅灝辯敱涓嶅緱鍒漢浜嗐傝嚦灝戯紝浣犺鐭ラ亾榪欐牱鐨勯敊璇凡緇忓嚭鐜頒簡錛屽氨涓嶈鍐嶈垂鍔茬殑緇х畫鎶曢掓垨絳夊緟浜嗐?/p>

涓ラ噸紼嬪害錛?strong>杞誨井鏄撳鐞?/strong>銆?/p>

WSAECONNREFUSED (10061): Connection refused.

鐢變簬鐩爣鏈哄櫒縐瀬鎷掔粷錛屾棤娉曡繛鎺ャ?/p>

MSDN: No connection could be made because the target computer actively refused it. This usually results from trying to connect to a service that is inactive on the foreign host鈥攖hat is, one with no server application running.

鎴愬洜鍒嗘瀽錛氬湪浣跨敤connect鎴朩SAConnect鏃訛紝鏈嶅姟鍣ㄦ病鏈夎繍琛屾垨鑰呮湇鍔″櫒鐨勭洃鍚槦鍒楀凡婊★紱鍦ㄤ嬌鐢╓SAAccept鏃訛紝瀹㈡埛绔殑榪炴帴璇鋒眰琚玞ondition function鎷掔粷銆?/p>

瑙e喅鏂規錛欳all connect or WSAConnect again for the same socket. 絳夊緟鏈嶅姟鍣ㄥ紑鍚佺洃鍚┖闂叉垨鏌ョ湅琚嫆緇濈殑鍘熷洜銆?strong>鏄笉鏄暱鐨勪笐鎴栬呴挶娌$粰澶燂紝瑕佷笉灝辨槸鏈嶅姟鍣ㄦ嫆緇濇帴鍙楀ぉ浠瘋柂閰嚜涓誨垱涓氬幓浜嗭紵

涓ラ噸紼嬪害錛?strong>杞誨井鏄撳鐞?/strong>銆?/p>

WSAENOBUFS (10055): No buffer space available.

鐢變簬緋葷粺緙撳啿鍖虹┖闂翠笉瓚蟲垨鍒楅槦宸叉弧錛屼笉鑳芥墽琛屽鎺ュ瓧涓婄殑鎿嶄綔銆?/p>

MSDN: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.

鎴愬洜鍒嗘瀽錛氳繖涓敊璇槸鎴戞煡鐪嬮敊璇棩蹇楀悗錛屾渶鍦ㄦ剰鐨勪竴涓敊璇傚洜涓烘湇鍔″櫒瀵逛簬娑堟伅鏀跺彂鏈夋槑紜檺鍒訛紝濡傛灉緙撳啿鍖轟笉瓚沖簲璇ユ棭灝卞鐞嗕簡錛屼笉鍙兘寰呭埌send/recv澶辮觸鍟娿傝屼笖榪欎釜閿欒鍦ㄤ箣鍓嶇殑鐗堟湰涓嚑涔庢病鏈夊嚭鐜拌繃銆傝繖涔熸槸榪欑瘒鏂囩珷鐨勪富瑕佸唴瀹廣傚儚connect鍜宎ccept鍥犱負緙撳啿鍖虹┖闂翠笉瓚抽兘鍙互鐞嗚В錛岃屼笖鍗遍櫓涓嶉珮錛屼絾濡傛灉send/recv閫犳垚鎷ュ牭騫舵伓鎬у驚鐜笅鍘伙紝楹葷儲灝卞ぇ浜嗭紝鑷沖皯璇存槑涔嬪墠鐨勯獙璇侀昏緫鏈夌枏婕忋?/p>

WSASend澶辮觸鐨勫師鍥犳槸錛歍he Windows Sockets provider reports a buffer deadlock. 榪欓噷鎻愬埌鐨勬槸buffer deadlock錛屾樉鐒舵槸鐢變簬澶氱嚎紼婭/O鎶曢掍笉褰撳紩璧風殑銆?/p>

瑙e喅鏂規錛氬湪娑堟伅鏀跺彂鍓嶏紝瀵規渶澶ф寕璧風殑娑堟伅鎬葷殑鏁伴噺鍜屽閲忚繘琛屾楠屽拰鎺у埗銆?/p>

涓ラ噸紼嬪害錛?strong>涓ラ噸銆?/p>

鏈枃涓昏鍙傝?a target="_blank">MSDN銆?/p>

************* 璇存槑 *************

Fox鍙槸瀵硅嚜宸卞叧蹇冪殑鍑犱釜閿欒鍜孉PI鍙傜収MSDN榪涜鍒嗘瀽錛屼笉鎻愪緵棰濆甯姪銆?/p>

Fox 2009-09-12 00:20 鍙戣〃璇勮
]]>
Amdahl 瀹氬緥 = Gustafson瀹氬緥http://www.shnenglu.com/Fox/archive/2009/09/10/95782.htmlFoxFoxThu, 10 Sep 2009 04:04:00 GMThttp://www.shnenglu.com/Fox/archive/2009/09/10/95782.htmlhttp://www.shnenglu.com/Fox/comments/95782.htmlhttp://www.shnenglu.com/Fox/archive/2009/09/10/95782.html#Feedback0http://www.shnenglu.com/Fox/comments/commentRss/95782.htmlhttp://www.shnenglu.com/Fox/services/trackbacks/95782.html鏈枃鍚屾鑷?a target="_blank">娓告垙浜虹敓

鍛ㄤ紵鏄庤佸笀搴旇鏄鏍歌綆楅鍩熺殑鑰佷漢浜嗐?/p>

榪欏嚑鏃ュ洜涓烘兂鎵炬壘鏃犻攣錛坙ock-free錛夋柟闈㈢殑淇℃伅錛屽氨鎵撳紑浜?a target="_blank">鍛ㄨ佸笀鐨刡log銆傜湅鍒?a target="_blank">澶氭牳緋葷粺涓笁縐嶅吀鍨嬮攣绔炰簤鐨勫姞閫熸瘮鍒嗘瀽榪欑瘒鏂囩珷鏃訛紝瑙夊緱鑰佸笀寮鴻皟澶氭牳璁$畻鏁堢巼鏄湁蹇呰鐨勶紝浣嗘嬁Amdahl 瀹氬緥鍜孏ustafson瀹氬緥浣滃姣旀湁鐐逛笉鎭板綋銆?/p>

鎸夌収鎴戠殑鐞嗚В錛岃繖涓や釜瀹氬緥鎵鍒葷敾鐨勫唴瀹規槸瀹屽叏涓鑷寸殑錛屽彧鏄鍔犻熸瘮鐨勫畾涔変笉涓鏍風艦浜嗐傝繖閲岋紝鎴戜滑閮戒互S(n)琛ㄧずn鏍哥郴緇熷鍏蜂綋紼嬪簭鐨勫姞閫熸瘮錛孠琛ㄧず涓茶閮ㄥ垎璁$畻鏃墮棿姣斾緥銆?/p>

Amdahl 瀹氬緥鐨勫姞閫熸瘮錛歋(n) 錛?浣跨敤1涓鐞嗗櫒鐨勪覆琛岃綆楁椂闂?/ 浣跨敤n涓鐞嗗櫒鐨勫茍琛岃綆楁椂闂?/p>

S(n) = 1/(K+(1-K)/n) = n/(1+(n-1)K)

Gustafson瀹氬緥鐨勫姞閫熸瘮錛歋(n) 錛?浣跨敤n涓鐞嗗櫒鐨勫茍琛岃綆楅噺 / 浣跨敤1涓鐞嗗櫒鐨勪覆琛岃綆楅噺

S(n) = K+(1-K)n

閫氫織鐨勮錛孉mdahl 瀹氬緥灝嗗伐浣滈噺鐪嬩綔1錛屾湁n鏍鎬篃鍙兘鍒嗘媴1-K鐨勫伐浣滈噺錛涜孏ustafson瀹氬緥鍒欏皢鍗曟牳宸ヤ綔閲忕湅浣?錛屾湁n鏍革紝灝卞彲浠ュ鍔爊(1-K)鐨勫伐浣滈噺銆?/p>

榪欎袱涓綆楀叕寮忛兘娌℃湁灝嗛攣寮閿鑰冭檻鍦ㄥ唴錛屾槸鐞嗘兂鍖栫殑銆傚懆鑰佸笀鎻愬埌璁捐涓嶅綋閫犳垚騫惰鍙樹覆琛岀殑闂涓庤繖涓や釜鍏紡璁$畻鏃犲叧銆傚洜涓轟換浣曞鏍歌綆楅兘瀛樺湪瀵逛覆琛屽拰騫惰鐨勮璁¤冮噺錛岃繖姝f槸紼嬪簭鍛樺湪浣跨敤澶氭牳騫惰鏃舵渶鍏沖績鐨勪簨鎯呫?/p>

鎬諱箣錛屼簩鑰呯殑鍖哄埆鍙湪浜庢佸害鐨勪笉鍚岋細涓涓秷鏋佹偛瑙傦紝涓涓Н鏋佷箰瑙傦紝鍏呭叾閲忔槸涓涓喎絎戣瘽錛岃屼簬澶氭牳璁$畻娌℃湁浠諱綍鍏寵仈銆?/p>

鎴戣榪欎簺涔熶笌澶氭牳璁$畻娌℃湁鍏寵仈錛屼笣姣病鏈夎川鐤戝鏍告晥鐜囩殑鎰忔濄傜浉鍙嶏紝鎴戞湡寰呰兘澶熼氳繃鎶鏈眰闈㈡彁楂樺鏍哥殑鏈夋晥璐熻澆銆?/p>鏈鍚庝竴鍙ラ澶栬瘽錛屽懆鑰佸笀浣跨敤Word鐨勬按騫充竴鑸細鎵鏈夋潵鑷猈ord鐨勬埅鍥鵑兘鏄湪欏甸潰瑙嗗浘鐩存帴鎴紝鎹㈣絎﹀拰鍏夋爣闅忓鍙銆?img src ="http://www.shnenglu.com/Fox/aggbug/95782.html" width = "1" height = "1" />

Fox 2009-09-10 12:04 鍙戣〃璇勮
]]>
ACE: Socket灝佽錛?1錛?/title><link>http://www.shnenglu.com/Fox/archive/2009/09/01/94973.html</link><dc:creator>Fox</dc:creator><author>Fox</author><pubDate>Tue, 01 Sep 2009 06:22:00 GMT</pubDate><guid>http://www.shnenglu.com/Fox/archive/2009/09/01/94973.html</guid><wfw:comment>http://www.shnenglu.com/Fox/comments/94973.html</wfw:comment><comments>http://www.shnenglu.com/Fox/archive/2009/09/01/94973.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/Fox/comments/commentRss/94973.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Fox/services/trackbacks/94973.html</trackback:ping><description><![CDATA[<p>鏈枃鍚屾鑷?a target="_blank">娓告垙浜虹敓</a></p> <p><strong>o *__ 搴?__* o</strong></p> <p>鍦ㄩ槄璇籄CE浠g爜鍜孋++NPv1, v2, APG鐨勬椂鍊欙紝鎴戞剰璇嗗埌涓涓棶棰橈細铏界劧紼嶆湁C++鍜岀綉緇滃熀紜鐨勫悓瀛﹂兘鍙互璇繪噦ACE錛屼絾濡傛灉浣犲OS錛堜簲澶х鐞嗘ā鍧楅兘鍖呭惈鍦ㄥ唴錛夈乀CP/IP銆丆++銆丏esign Patterns浜嗚В瓚婂錛屼綘灝辮秺鑳戒綋浼欰CE涓轟粈涔堥渶瑕佽繖涔堝簽鏉傦紝铏界劧瀹冧笉澶熷畬緹庯紙浣嗚嚦灝戞垜榪樻病鏈夎祫鏍兼潵鎵硅瘎榪欎竴鐐癸紝鎴戠幇鍦ㄦ渶甯告兂鍋氱殑涓涓姩浣滃氨鏄簲浣撴姇鍦幫級銆?/p> <p>鑰屼笖鎴戦殣綰︽劅瑙夊埌錛屾垜鐜板湪鎵鍐欑殑寰堝涓滆タ鍦ㄤ互鍚庯紙瀵逛簬鏈変簺浜烘垨璁稿氨鏄幇鍦級鐪嬫潵浼氱浉褰撲笉娣卞埢銆佺浉褰撲笉涓ヨ皚錛屼絾瀵逛簬涓孌靛涔犲巻紼嬶紝榪欎釜榪囩▼鏄繀鐒剁殑銆佸繀闇鐨勩?/p> <p>鍦–++NPv1涓紝<a target="_blank">Douglas C. Schmidt</a>鎶婂師濮媠ocket鍙婂叾API鐨勭己闄鋒湁浜涘欖斿寲浜嗭紝姣斿涓孌靛姞涓婃敞閲娿佺┖琛屽湪鍐呯殑35琛岀殑浠g爜錛岃鎸囧嚭鏈?0澶勯敊璇箣澶氥傝繖灝卞儚寰堝鍏朵粬璇█鐨勫″鑰呮垨鍙嶄紶緇烠/C++鎸囬拡鑰呭湪鎵硅瘎鎸囬拡鏃剁殑璇存硶涓鏍楓傞暱鏈熶嬌鐢ㄥ師濮媠ocket鍜屾寚閽堢殑鍚屽瀵規鎰熻寰堜笉鑸掓湇錛屼綍鍐祍ocket API鎻愪緵浜嗗ぇ閲忛敊璇嫻嬬殑鎺ュ彛錛岃嚦澶氭槸涓嶅鍙嬪ソ緗簡銆備綘濂藉氨濂戒簡錛屾病蹇呰鎶撲綇鍒漢涓欏跨棝鎵瑰惂錛屻庢湰鏄悓鏍圭敓錛岀浉鐓庝綍澶ャ忋?/p> <p>铏界劧Solaris銆丩inux鐨勫緢澶氱増鏈強Windows瀵硅搗婧愪簬Berkeley鐨剆ocket API榪涜浜嗛噸鍐欙紝浣嗕笉鍙惁璁わ紝鐢變簬鍘嗗彶鍘熷洜鍜孭OSIX鏍囧噯鐨勫瓨鍦紝瀵逛簬浣跨敤鑰呰岃█錛屾垜浠彲浠ユ棤瑙嗚繖浜汚PI鐨勫疄鐜板樊寮傘傚彧鏄竴鏃︽垜浠粠socket閫氫俊鎵╁睍鍒板叾浠朓PC閫氫俊鐨勮瘽錛屽氨闇瑕佹瑙嗗悇縐岻/O緇嗚妭鐨勫樊寮備簡銆?/p> <p>鐢變簬UNIX涓紝瀵逛簬socket, file, pipe, device鐨勫ぇ澶氭暟鎿嶄綔錛屾弿榪扮閮芥槸閫氱敤鐨勶紙榪欎竴鐐癸紝OS涓婇潰璁茬殑鏇存竻妤氫簺錛夈傝學indows涓紝鍙ユ焺澶у涓嶈兘浜掓崲錛坰ocket瀵逛簬MS鏉ヨ鏄埗鏉ュ搧錛夈傜郴緇熷拰鏍囧噯鐨勪笉涓鑷村鑷村湴鍧銆佸崗璁拰API鐨勬販鏉傜敋鑷蟲販涔便?/p> <p>UNIX涓嬬殑鎻忚堪絎﹀拰Windows鐨勫彞鏌勫彲浠ョ湅浣滄槸鍚屼竴涓蹇碉紝鍙槸搴旂敤鐜涓嶄竴鏍鳳紝鎵鎻忚堪鐨勫唴瀹逛篃鏃跺父涓嶄竴鏍鳳紝鍐嶇畝鍗曚簡璇達紝瀹冧滑閮芥槸涓涓暣鍨嬬殑ID銆?/p> <p>ACE鐨勬簮鐮佷腑浣跨敤浜嗗ぇ閲忛澶勭悊鎸囦護錛屽挨鍏跺湪璺ㄥ鉤鍙?緙栬瘧鐜鐨勯儴鍒嗘洿鍔犳槑鏄俱傞壌浜嶤/C++鏍囧噯鐨勫崥澶ц兏鎬錛屾湁浜涙寚浠ら渶瑕侀槄璇葷浉鍏崇紪璇戝櫒鎻愪緵鐨勫府鍔╂枃妗o細</p> <p>o #pragma: <a target="_blank">GCC</a>, <a target="_blank">MSVC</a></p> <p>o #define (#, #@, ##) : <a target="_blank">GCC</a>, <a target="_blank">MSVC</a> </p> <p>鍏朵腑鏈夎嫢騫蹭唬鐮佹枃浠朵互.inl涓哄悗緙錛岄噷闈㈡槸瀵歸儴鍒嗗嚱鏁扮殑鍐呰仈瀹炵幇錛屼互浣夸唬鐮佺粨鏋勭湅涓婂幓鏇村姞綆媧併傚鏋滅‘瀹氫嬌鐢ㄥ唴鑱斿嚱鏁扮殑璇濓紝*.inl灝嗚鍖呭惈浜?.h鐨勬渶鍚庯紝濡傛灉涓嶄嬌鐢紝鍒欏儚*.h涓鏍鳳紝鍖呭惈浜?.cpp鐨勫ご閮ㄣ?/p> <p>ACE閲囩敤doxygen杈撳嚭鏂囨。錛屽湪闃呰浠g爜娉ㄩ噴鏃惰兘澶熸劅鍙楀埌宸紓錛屼絾鍩烘湰涓嶄細褰卞搷闃呰銆?/p> <p><strong>o * __ 鍏充簬絎?绔狅紙C++NPv1錛塤_ * o</strong></p> <p>ACE鎶借薄鐨勫湴鍧綾籄CE_Addr鎷ユ湁ACE_DEV_Addr, ACE_FILE_Addr, ACE_INET_Addr, ACE_SPIPE_Addr, ACE_UNIX_Addr浜斾釜瀛愮被銆傚浜庣嫮涔変笂鐨勭綉緇滈氫俊錛圱CP/IP錛夎岃█錛孉CE_INET_Addr瀵瑰簲浜庢垜浠啛鎮夌殑sockaddr_in銆?/p> <p>ACE_IPC_SAP鏄疘PC錛坕nterprocess communication錛塈/O鎿嶄綔綾葷殑root綾匯?/p> <p>浠庣紪鐮佺殑瑙掑害鐪嬶紝榪欎釜綾繪紓浜殑鍦版柟鍦ㄤ簬紺轟緥浜嗘娊璞$被鐨勫彟涓縐嶅疄鐜版柟寮忋?/p> <p>涓鎻愬埌鎶借薄綾伙紝澶у鏁頒漢鐨勭涓鍙嶅簲鏄痯ure virtual function銆傚綋涓涓熀綾葷‘瀹氶渶瑕佷嬌鐢╲irtual function鏃訛紝榪欐槸涓涓笉閿欑殑閫夋嫨銆備絾鎴戜滑閮界煡閬撹櫄鎷熷嚱鏁版湁寮閿銆傝屼笖瀵逛簬涓涓粨鏋勭畝鍗曠殑鎶借薄鍩虹被鍜屽叾緇ф壙瀛愮被錛堝挨鍏舵槸澶ч噺浣跨敤鏃訛級錛屼竴涓櫄鍑芥暟琛ㄥ甫鏉ョ殑寮閿浼氳鏁翠釜璁捐鏄懼緱鍗佸垎韞╄剼銆?/p> <p>鎴戜滑閮界煡閬撳浣曞己鍒惰涓涓被鏃犳硶浣跨敤default constructor錛坧rotected錛夈傚鏋滃鍩虹被浣跨敤璇ユ柟娉曪紝浠呬嬌瀛愮被鍏鋒湁public鐨刣efault constructor錛岃繖灝辮揪鍒頒簡瀹氫箟鎶借薄鍩虹被鐨勬晥鏋溿?/p> <p>virtual destructor鐨勬剰涔夊湪浜庨槻姝elete鐖剁被鎸囬拡錛堟寚鍚戝瓙綾誨璞★級鏃舵湭璋冪敤瀛愮被destructor銆傚湪姝や緥涓紝涓洪伩鍏嶈繖縐嶆儏鍐碉紝鍚屾牱灝哾estructor澹版槑涓簆rotected鍗沖彲銆?/p> <p>浠庤璁″疄鐜扮殑瑙掑害鐪嬶紝鐩歌緝浜巗ocket API錛孉CE_IPC_SAP鐨勫瓙綾籄CE_SOCK鎻愪緵浜嗙紪璇戞椂瀵瑰彞鏌勫悎娉曟х殑媯嫻嬨?/p> <p>浠庨昏緫鍔熻兘灞傞潰鍒掑垎錛宻ocket鏈変笁縐嶈鑹詫細</p> <p>o active connection role (connector)錛氫富鍔ㄨ繛鎺?/p> <p>o passive connection role (acceptor)錛氳鍔ㄨ繛鎺?/p> <p>o communication role (stream)錛氭暟鎹氫俊</p> <p>浣唖ocket API姣曠珶涓嶆槸OOD鍑烘潵鐨勶紝瀵逛簬涓涓猻ocket鎻忚堪絎︼紝涔熷畬鍏ㄦ病鏈夊繀瑕佸幓闄愬埗鍏舵媴璐熺殑鍔熻兘錛屾洿涓嶅彲鑳芥悶鎴愪笁縐嶄笉鍚岀殑socket銆傝孫OD鐨凙CE鍒欏彲浠ヨ交鏄撳疄鐜板socket瀵硅薄鍙婂叾鎿嶄綔鐨勫皝瑁呫?/p> <p>宸ュ巶綾籄CE_SOCK_Connector鏄竴涓富鍔ㄥ垱寤洪氫俊绔殑宸ュ巶綾匯俿ocket API涓殑connect鎺ュ彛鍙槸涓轟竴涓猻ocket寤虹珛涓庡叾瀹僷eer鐨勭綉緇滆繛鎺ワ紝鑰屼笉浜х敓鏂扮殑socket瀹炰緥錛屼篃涓嶄緷璧栦簬浠諱綍鍏跺畠socket銆傚悓鏍鳳紝ACE_SOCK_Connector鍙槸涓轟竴涓狝CE_SOCK_Stream瀵硅薄錛堝鐢ㄤ簬鏁版嵁閫氫俊鐨剆ocket鐨勫皝瑁咃級榪炴帴鍒癆CE_Addr錛堝struct sockaddr鐨勫皝瑁咃級鎻愪緵鎺ュ彛錛屼篃涓嶅惈瀵笰CE_SOCK_Stream瀵硅薄鐨勫叾瀹冩搷浣溿?/p> <p>宸ュ巶綾籄CE_SOCK_Acceptor鏄竴涓鍔ㄥ垱寤洪氫俊绔殑宸ュ巶綾匯傚綋鐩戝惉鍒版柊鐨勭綉緇滆繛鎺ュ悗錛屼負璇ヨ繛鎺ュ垵濮嬪寲涓涓狝CE_SOCK_Stream瀵硅薄銆傚拰connector涓嶅悓鐨勬槸錛宎cceptor渚濊禆浜庝竴涓凡緇忓瓨鍦ㄧ殑鍏呭綋鐩戝惉鍔熻兘鐨剆ocket鍙ユ焺錛圓CE_SOCK錛夛紝鍥犳錛孉CE_SOCK_Acceptor鏄疉CE_SOCK鐨勪竴涓瓙綾匯?/p> <p>ACE_SOCK_Stream鏄彧璐熸湁閫氫俊浼犺緭鍔熻兘鐨剆ocket錛屽搴攃onnection-oriented鐨凾CP閫氫俊鏍煎紡stream錛屽拰UDP鐨凜E_SOCK_CODgram鐩稿懠搴斻侫CE_SOCK_Stream鍙槸socket鐨勯氫俊杞戒綋錛屽湪涓や釜宸ュ巶ACE_SOCK_Connector鍜孉CE_SOCK_Acceptor涓垵濮嬪寲銆傝繖鏍蜂竴涓被闄ゆ敮鎸佹渶鍩烘湰鐨勬暟鎹彂閫侊紙send錛夊拰鎺ユ敹錛坮ecv錛夊拰闃誨錛坆locking錛夈侀潪闃誨錛坣onblocking錛夊強瀹氭椂錛坱imed錛夌殑I/O妯″紡澶栵紝榪樻敮鎸佸垎鏁h鍙栵紙scatter-read錛夊拰闆嗕腑鍐欏叆錛坓ather-write錛夈?/p> <p>瀵逛簬涓涓畝鍗曠殑銆庣綉緇滆紼嬩綔涓氾細鍐欎竴涓湁榪炴帴鐨処M灝忕▼搴忋忥紝涓婇潰榪欎簺鍐呭宸茬粡瓚沖浜嗐傚綋鐒跺嵆浣夸嬌鐢ㄥ搴旂殑鍑犱釜socket API涔熷凡緇忚凍澶熶簡銆備絾鎴戜滑鏄劇劧鏇村姞鍏沖績濡傛搴炲ぇ鐨勪竴涓簱錛屾槸濡備綍瑙e喅澶嶆潅鐨勭綉緇滃簲鐢ㄧ殑錛屾垜灝ゅ叾鍏沖績鐨勬槸澶氱嚎紼嬪茍鍙戝浣曟洿濂界殑澶勭悊銆?/p> <p>鎵浠ワ紝鎴戝噯澶囪窇鍒扮8銆?绔犱簡銆?/p><img src ="http://www.shnenglu.com/Fox/aggbug/94973.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Fox/" target="_blank">Fox</a> 2009-09-01 14:22 <a href="http://www.shnenglu.com/Fox/archive/2009/09/01/94973.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Doxygen鍦–ygwin涓嬬殑浣跨敤http://www.shnenglu.com/Fox/archive/2009/08/28/94689.htmlFoxFoxFri, 28 Aug 2009 09:14:00 GMThttp://www.shnenglu.com/Fox/archive/2009/08/28/94689.htmlhttp://www.shnenglu.com/Fox/comments/94689.htmlhttp://www.shnenglu.com/Fox/archive/2009/08/28/94689.html#Feedback2http://www.shnenglu.com/Fox/comments/commentRss/94689.htmlhttp://www.shnenglu.com/Fox/services/trackbacks/94689.html鏈枃鍚屾鑷?a target="_blank">娓告垙浜虹敓

鎴戝彂鐜版垜鏈榪戞垚浜咰ygwin涓嬬殑灝忕櫧榧狅紝鍐欏畬Cygwin涓嬪畨瑁匒CE錛屽啓ACE鍦╟ygwin涓嬬殑浣跨敤銆傜幇鍦ㄥ張鍐?a target="_blank">doxygen銆?/p>

涔嬪墠鎻愬埌鍦–ygwin涓嬭浠g爜鐨勪笉涔犳儻錛屽悗鏉ュ洖鍒癡S涓嬬湅銆傛病榪囧嚑澶╋紝瑙夊緱VS涓嬭繕鏄笉澶熺洿瑙傦紝浜庢槸灝辯洿鎺ョ湅ACE鐨刣oxygen浜?#8230;…

doxygen濂芥槸濂斤紝鐢ㄨ搗鏉ヨ繕鏄鎱㈡參涔犳儻鎵嶈錛岄渶瑕佸湪鍐欐敞閲婂拰浠g爜鐨勬椂鍊欐敞鎰忎竴浜涳紝鎺屾彙鐨勭粏鑺傚拰鎶宸ц秺澶氾紝鍑烘潵鐨勬枃妗h秺涓板瘜錛堝綋鐒訛紝榪欏拰浠g爜璐ㄩ噺鏄袱鐮佷簨錛夈?/p>

鎴戣嚜鐒舵槸鎶奷oxygen瀹夎鍦–ygwin涓嬩簡錛岀敱浜巇oxygen娌℃湁鎻愪緵info錛孖nfo doxygen鏃跺氨鑷姩鎵撳紑浜哾oxygen鐨刴an錛屽拰man doxygen銆乨oxygen --help涓涓晥鏋溿?/p>

濡傛灉甯屾湜闃呰鏇磋灝界殑浣跨敤鏂規硶錛屽彧鏈夎嚜宸?a target="_blank">down涓涓猰anual浜?/a>銆?/p>

鍦–ygwin涓嬶紝doxygen閲囩敤GNU鐨刲ibiconv榪涜鏂囧瓧緙栫爜鐨勮漿鎹紝浠?a target="_blank">UTF-8浣滀負榛樿緙栫爜銆?/p>

浣跨敤doxygen鐢熸垚config-file妯℃澘鍚庯紝鍙互鍦╟onfig-file涓繘琛屼竴浜涢」鐩緗紙鏈夋敞閲婄殑錛岀湅鐨勬噦錛夈?/p>

涓轟簡鏀寔涓枃錛屾垜DOXYFILE_ENCODING鐢ㄧ殑鏄?a target="_blank">EUC-CN錛屼絾杈撳嚭鏂囨。鐨勮璦OUTPUT_LANGUAGE鍗撮変簡English銆備袱鐐瑰師鍥狅細

o EUC-CN錛堝悇縐嶆眽瀛楃紪鐮佺煡璇嗗氨涓嶅湪姝ゆ櫘鍙婁簡錛屼綘鍙互璁や負綆浣撳瓧緙栫爜閮芥槸EUC-CN錛夊拰UTF-8涓嶅悓錛屼絾OUTPUT_LANGUAGE鐨勫悇縐嶈璦閮芥槸浣跨敤鐨刄TF-8錛?span style="text-decoration: line-through;">鎵浠ヤ袱縐嶇紪鐮佷笉鍙兘鍚屾椂鏄劇ず錛屽綋鐒訛紝浣犲彲浠ユ妸EUC-CN鍏ㄨ漿鎴怳TF-8銆傜紪鐮佷笉鏄珮綰х殑鎶鏈紝浣嗗浜庨潪鑻辮鐢ㄦ埛緇濆鏄竴涓櫓姊?/span>錛?span style="color: rgb(34, 34, 34); font-family: Georgia, Arial; font-size: 14px; ">鍚庢潵鍙戠幇鏄垜鑷繁瀛﹁壓涓嶇簿錛孌OXYFILE_ENCODING鍙槸閰嶇疆鏂囦歡鐨勭紪鐮佹牸寮忚屽凡錛岃岃瘑鍒腑鏂囨枃妗e彧闇瑕佷慨鏀笽NPUT_ENCODING鎴怑UC-CN鍗沖彲錛孫UTPUT_LANGUAGE鑷劧璁劇疆鎴怌hinese涔熶笉浼氭湁闂錛屽洜涓篸oxygen閲囩敤UTF-8杈撳嚭錛屼嬌鐢ㄤ腑鏂囪緭鍑轟笉浼氭湁涔辯爜闂銆?/span>

o 铏界劧鎴戠殑鑻辨枃寰堣供鑴氾紝铏界劧鎴戠殑鏂囨。涓鏈変腑鏂囨敞閲娿備絾鍍廳oxygen涓枃杈撳嚭鐨勬枃妗d腑鎶奵lass銆乸ublic閮界粰浣犵炕璇戞垚涓枃錛屼綘涔熷彈涓嶄簡錛岃繖涔熻嫳鏂囨按騫蟲棤鍏熾?/p>

config-file涓殑鍏朵粬鍐呭鎴戠幇鍦ㄤ篃鐢ㄤ笉鍒幫紝灝辨病鏈変粩緇嗙湅銆?/p>

鍥犱負Kevin浼氬湪鍏徃閲岃涓涓媎oxygen錛宒oxygen鐨刴anual涔熻鐨勫緢璇︾粏錛屾垜灝辯渷鐐規椂闂達紝涓嶇炕璇戞枃妗d簡銆?/p>

綆鍗曠殑涓涓?a target="_blank">Doxygen鐨勬祴璇?/a>鍦ㄨ繖閲屻?/p>

Fox 2009-08-28 17:14 鍙戣〃璇勮
]]>
ACE涔婥ygwin vs Winhttp://www.shnenglu.com/Fox/archive/2009/08/24/94234.htmlFoxFoxMon, 24 Aug 2009 03:59:00 GMThttp://www.shnenglu.com/Fox/archive/2009/08/24/94234.htmlhttp://www.shnenglu.com/Fox/comments/94234.htmlhttp://www.shnenglu.com/Fox/archive/2009/08/24/94234.html#Feedback6http://www.shnenglu.com/Fox/comments/commentRss/94234.htmlhttp://www.shnenglu.com/Fox/services/trackbacks/94234.html鏈枃鍚屾鑷?a target="_blank">娓告垙浜虹敓

鎴戝眻鏈嶄簡錛岃繕鏄疺S鐢ㄧ殑鏂逛究銆?/p>

涔嬪墠鍦–ygwin涓嬪凡緇忓彲浠ヤ嬌鐢ㄧ殑ACE錛屽洜涓洪槄璇諱唬鐮佸お涓嶆柟渚匡紙瀵逛簬涓涓猈inEr鏉ヨ錛夛紝涓婂崍鍦╒S涓嬮潰鑺變簡鍑犲垎閽熷氨鎶夾CE閰嶅ソ浜嗭紝鑰屼笖浣跨敤$(ACE_ROOT)\examples\C++NPv1鐨勪唬鐮佽窡韙皟璇曪紝澶範鎯簡銆?/p>

鎸夌収$(ACE_ROOT)\ACE-INSTALL.html鐨勫畨瑁呰鏄庯細

o 閫夋嫨騫舵墦寮$(ACE_ROOT)\ace\ace_vc9.sln

o 娣誨姞config.h騫跺姞鍏ヤ互涓嬪唴瀹癸細

   #define ACE_HAS_STANDARD_CPP_LIBRARY 1
    #include "ace/config-win32.h"

o F7

-----------------------------------------------

OK錛岀幇鍦?(ACE_ROOT)\lib涓嬮潰宸茬粡鐢熸垚浜咥CEd.dll銆丄CEd.lib錛屽啀璁劇疆涓涓嬬郴緇熺幆澧冨彉閲忥紙榪愯紼嬪簭蹇呴渶錛夊拰VC++鐩綍錛堣皟璇曠▼搴忓繀闇錛夈傚彲浠ヤ嬌鐢ㄤ簡錛?

o 閫夋嫨騫舵墦寮$(ACE_ROOT)\examples\C++NPv1

o F7

o

Fox 2009-08-24 11:59 鍙戣〃璇勮
]]>
ACE鍦╟ygwin涓嬬殑浣跨敤http://www.shnenglu.com/Fox/archive/2009/08/19/93781.htmlFoxFoxWed, 19 Aug 2009 02:05:00 GMThttp://www.shnenglu.com/Fox/archive/2009/08/19/93781.htmlhttp://www.shnenglu.com/Fox/comments/93781.htmlhttp://www.shnenglu.com/Fox/archive/2009/08/19/93781.html#Feedback3http://www.shnenglu.com/Fox/comments/commentRss/93781.htmlhttp://www.shnenglu.com/Fox/services/trackbacks/93781.html鏈枃鍚屾鑷?a target="_blank">娓告垙浜虹敓

int ACE_TMAIN(int, ACE_TCHAR *[])
{
     ACE_TRACE(ACE_TEXT("main"));

     ACE_DEBUG((LM_INFO, ACE_TEXT("%IStart\n")));
     ACE_DEBUG((LM_INFO, ACE_TEXT("%IEnd\n")));

     return 0;
}

/*--------- makefile ---------*/

BIN     = hello                       # src & exe file name
SRC     = $(addsuffix .cc, $(BIN))    # src file suffix
LIBS    = -lACE                       # libACE.dll under cygwin

include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU
include $(ACE_ROOT)/include/makeinclude/macros.GNU
include $(ACE_ROOT)/include/makeinclude/rules.common.GNU
include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU
include $(ACE_ROOT)/include/makeinclude/rules.bin.GNU
include $(ACE_ROOT)/include/makeinclude/rules.local.GNU

/*--------- Compilation ---------*/

GNUmakefile: /home/fox/ace/GNUmakefile MAKEFLAGS=k

g++ -Wpointer-arith -mthreads -mtune=pentiumpro -O3 -g -pipe    -pipe   -I/usr/\
share/ace -DACE_HAS_EXCEPTIONS -DACE_NO_INLINE  -c -o .obj/hello.o hello.cc
g++ -Wpointer-arith -mthreads -mtune=pentiumpro -O3 -g -pipe    -pipe   -I/usr/\
share/ace -DACE_HAS_EXCEPTIONS -DACE_NO_INLINE  -Wl,--enable-auto-import -Wl,-E\
-L/usr/share/ace/lib -o hello .obj/hello.o  -lACE

Compilation finished at Wed Aug 19 00:35:42

/*--------- Result ---------*/

$ ./hello.exe
(14417928) calling main in file `hello.cc' on line 13
    Start
    End
(14417928) leaving main

-------------------------------------------------------

鏇村鍐呭璇峰弬鑰?a target="_blank">C++NP(C++ Network Programming) vol.1 & vol.2鍜孉PG(The ACE Progrmmer's Guide)銆?/p>

蹇欐椿浜嗕竴鏅氫笂錛岀粓浜庣煡閬撴庝箞鍖呭惈澶存枃浠朵簡錛屽湪gcc鐨勭紪璇戦夐」涓敤 -I鎴?I$(ACE_ROOT)錛?/p>

鏈緥涓槸錛?I/usr/share/ace

緇撴灉鍚庨潰搴撳張閾炬帴涓嶄笂錛岃仈鎯充互鍓嶄嬌鐢∣penGL搴撶殑LIBS錛岀粓浜庨潬涓涓?lACE鎼炲畾銆?/p>

鍥犱負涓嶆効鎰忕敤MPC錛屾繪劅瑙夊啀澶氳姳浜涙椂闂村幓寮勫張鍙槸紱婚鏇磋繙浜嗭紝鏈夊叴瓚g殑鍚屽鑷劧鏄彲浠ラ氳繃ACE鐨勫畼緗戞壘鍒版墍鏈夐棶棰樼殑絳旀銆?/p>

榪欐牱涓鏉ワ紝ACE鍦╟ygwin涓嬩粠瀹夎鍒頒嬌鐢ㄤ篃灝卞憡涓孌佃惤浜嗭紝鍚庨潰鐨勯棶棰樺氨姣旇緝easy浜嗭紝鏃犻潪鏄綘鐢ˋCE鍋氫粈涔堛傝屾垜涔熶笉浼氬啀灝盇CE && cygwin鍐欎粈涔堝績寰椾簡錛屾葷畻瑙佽瘉浜嗚繖涓ゅぉ鐨勬崳鑵俱?/p>



Fox 2009-08-19 10:05 鍙戣〃璇勮
]]>
涓庡悰鍏卞媺http://www.shnenglu.com/Fox/archive/2009/08/17/93620.htmlFoxFoxMon, 17 Aug 2009 08:31:00 GMThttp://www.shnenglu.com/Fox/archive/2009/08/17/93620.htmlhttp://www.shnenglu.com/Fox/comments/93620.htmlhttp://www.shnenglu.com/Fox/archive/2009/08/17/93620.html#Feedback4http://www.shnenglu.com/Fox/comments/commentRss/93620.htmlhttp://www.shnenglu.com/Fox/services/trackbacks/93620.html鏈枃鍚屾鑷?a target="_blank">娓告垙浜虹敓

鐜板湪鏈変簺騫磋交浜虹殑蹇冩佹瘮杈冩誕韜侊紝澶ц嚧鎬葷粨浠ヤ笅銆庡洓鐐硅〃鐜般忥細

1. 鐪奸珮榪囬《錛?/p>

2. 鍨傛墜榪囪啙錛?/p>

3. 鏈熸湜鍊奸珮錛?/p>

4. 縐瀬鎬т綆銆?/p>

娣卞眰嬈$殑瀹㈣鍘熷洜澶ц嚧鏄庡洓涓病鏈夈忥細

1. 娌℃湁鍚冭繃鑻︼紱

2. 娌℃湁騫茶繃媧伙紱

3. 娌℃湁璇磋繃璇濓紱

4. 娌℃湁褰撹繃瀹躲?/p>

涓鑸兘鍏鋒湁銆庡洓涓壒寰併忥細

1. 鐙敓瀛愬コ錛?/p>

2. 姣曚笟鏂頒漢錛?/p>

3. 娌夐粯瀵¤█錛?/p>

4. 鍗婄摱寮姘淬?/p>

---------------------------------

1. 浣犳兂瑕佷粈涔堬紵

鍙傝冿細涓涓湁褰卞搷鍔涚殑浜恒傦紙@鏉庡紑澶?/a>錛?/p>

2. 閭f槸鍚︽槸浣犳兂瑕佺殑錛?/p>

鍙傝冿細浣犵殑鐪煎厜鏈夊榪滐紝鍐沖畾浜嗕綘鑳借蛋澶氳繙銆傦紙@Fox錛?/p>

3. 浣犻渶瑕佸仛浠涔堬紵

鍙傝冿細楂樼瓚澧欙紝騫跨Н綺紝緙撶О鐜嬨傦紙鏈卞厓鐠嬶級

4. 浣犺繕闇瑕佸仛浠涔堬紵

鍙傝冿細騫沖拰鐨勫績鎬侊紝榪涘彇鐨勬佸害錛屽潥瀹氱殑鐩爣錛屼笉鎳堢殑鍔姏銆傦紙@Fox錛?/p>

5. 浣犳槸鍚﹀仛鍒頒簡錛?/p>

鍙傝冿細娌℃湁錛屼絾鎴戜竴鐩村湪鍔姏銆傦紙@Fox錛?/p>

Fox 2009-08-17 16:31 鍙戣〃璇勮
]]>
Cygwin涓嬪畨瑁匒CEhttp://www.shnenglu.com/Fox/archive/2009/08/17/93552.htmlFoxFoxMon, 17 Aug 2009 01:52:00 GMThttp://www.shnenglu.com/Fox/archive/2009/08/17/93552.htmlhttp://www.shnenglu.com/Fox/comments/93552.htmlhttp://www.shnenglu.com/Fox/archive/2009/08/17/93552.html#Feedback1http://www.shnenglu.com/Fox/comments/commentRss/93552.htmlhttp://www.shnenglu.com/Fox/services/trackbacks/93552.html鏈枃鍚屾鑷?a >娓告垙浜虹敓

-----------------------璇諱功-----------------------

鎯寵銆奤NIX Network Programming銆?/a>寰堜箙浜嗭紝鍙槸榪欑鎰挎湜涓鐩存病鏈夌壒鍒己鐑堛傜敤鐨勭瑪璁版湰鎹簡涔嬪悗寮鴻揩鑷繁鍙槸瑁呬簡cygwin錛屾病鏈夊畨瑁匳S錛屽鉤鏃跺啓浜涗唬鐮佸氨鍙兘鍦╟ygwin涓嬬敤gcc浜嗐傛渶榪戝UNIX鐜緙栫▼鍜岀綉緇滃熀紜姣旇緝鎰熷叴瓚o紝浜庢槸璇昏繖鏈功緇堜簬鎻愪笂浜嗚浜嬫棩紼嬶紝鍙槸澶у鏁頒功搴楅兘娌℃湁榪欐湰涔︿簡銆?

宸ヤ綔涔嬪悗錛屽浜庤嚜宸卞枩嬈㈢殑涔︼紝灝卞緢灝戜細鍘葷湅鐢靛瓙鐗堬紝瑙夊緱榪樻槸鎹у嵎鍦ㄦ墜鐨勬劅瑙夎垝鏈嶄竴浜涳紝鎯蟲庝箞鐪嬫庝箞鐪嬶紝浜彈鎷跨瑪鍦ㄤ笂闈㈠啓鍐欑敾鐢葷殑鎰熻銆傚洜姝ゅ浜庢兂璇諱絾涔頒笉鍒扮殑涔︼紝絎竴鍙嶅簲鏄瓑寰呫傚湪緲葷數鑴戜笂闈竴浜涜祫鏂欑殑鏃跺欐墠鍙嶅簲榪囨潵鎴戝凡緇忓緢涔呮病鏈塪own榪囩數瀛愪功浜嗭紝緇撴灉灝變粠緗戜笂down浜?a target="_blank">寰堝鎯寵(璞嗙摚)鐨勪功錛宖orgive me, Richard Stevens and anybody.

-----------------------鍔ㄦ墜-----------------------

涔嬪墠鍙槸鍦╓indows涓嬬敤榪嘇CE錛屽洜涓篈CE鎻愪緵浜哣S鍚勭鐗堟湰鐨勮В鍐蟲柟妗堬紝緙栬瘧榪囩▼姣旇緝綆鍗曘傝繖嬈℃斁鍦╟ygwin涓嬬紪璇戠殑鏃跺欙紝鍥犱負鐜鍙橀噺璁劇疆闂錛屽茍涓嶆槸闈炲父欏哄埄錛屽弬鐓т簡婧愮爜鐩綍涓嬬殑ACE-INSTALL.html鐨勬弿榪版墠灝嗛棶棰樿В鍐熾傜幇鍦ㄥ皢榪囩▼緇欏嚭鏉ワ紝浠呬緵google鍒拌繖閲岀殑鍚屽鍙傝冿細

鍙嬫儏鎻愮ず錛氭垜鐩墠瀵逛簬cygwin鍜孶NIX綾葷郴緇熺殑浜嗚В鍋滅暀鍦ㄧ煡鍏剁劧錛堣繕鏄湪google涔嬪悗錛夌殑姘村鉤銆?

1. 澧炲姞鐜鍙橀噺

o 淇敼/etc/profile鏂囦歡璇誨啓灞炴э細

$ chmod 777 /etc/profile

cygwin涓嬬殑鐜鍙橀噺鍙互鍦ㄨ鏂囦歡涓厤緗紝鐢變簬璇ユ枃浠墮粯璁ゅ叿鏈夊啓淇濇姢灞炴э紝鍥犳闇瑕佷慨鏀逛嬌涔嬪彲鍐欙紝淇敼瀹屾垚涔嬪悗搴旇璁板緱瀵瑰叾榪涜鍐欎繚鎶わ細

$ chmod 555 /etc/profile

o 鎵撳紑profile鏂囦歡錛堟湰浜轟嬌鐢╡macs榪涜緙栬緫錛岃鑰呬篃鍙互浣跨敤vi銆乿im絳夛紝鍦ㄦ涓嶅啀璧樿堪錛夛細

$ emacs /etc/profile

o 寰profile涓慨鏀瑰拰娣誨姞鐜鍙橀噺錛?

灝嗕互涓嬩簲琛屾坊鍔犲埌鏂囦歡涓紝ACE_ROOT涓篈CE婧愮爜鐩綍錛屾湰鏂囩敤鍒扮殑鐩綍鏄?usr/share/ace錛?

ACE_ROOT=/usr/share/ace
export ACE_ROOT

LD_LIBRARY_PATH=$ACE_ROOT/ace:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH

# export PATH=$ACE_ROOT/ace:$PATH

榪欎釜鎿嶄綔絳夊悓浜庡湪VS涓嬩慨鏀瑰簱鏂囦歡鐩綍錛屾垜鏄洿鎺ヤ慨鏀逛簡PATH鍙橀噺鐨勶細

PATH=/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:$ACE_ROOT/ace:$PATH

o 鎵ц/etc/profile

$ /etc/profile

鎵ц淇敼鍚庢湁鍙兘闇瑕侀噸鍚痗ygwin錛屽彲浣跨敤涓嬮潰鐨勫懡浠ゆ煡鐪婣CE_ROOT璁劇疆鏄惁姝g‘錛?

$ echo $ACE_ROOT

2. 鍒涘緩鑻ュ共鏂囦歡錛?

o 鍦?ACE_ROOT/ace 鏂囦歡澶逛腑鍒涘緩鍚嶄負 config.h 鐨勬枃浠訛紝騫跺姞鍏ヤ互涓嬪唴瀹瑰悗淇濆瓨鍏抽棴錛?

#include "ace/config-cygwin32.h"

o 鍦?ACE_ROOT/include/makeinclude 鏂囦歡澶逛腑鍒涘緩鍚嶄負 platform_macros.GNU 鐨勬枃浠訛紝騫跺姞鍏ヤ互涓嬪唴瀹逛繚瀛樺叧闂細

include $(ACE_ROOT)/include/makeinclude/platform_cygwin32.GNU

3. 緙栬瘧ACE錛?

$ cd $ACE_ROOT/ace
$ make

澶ф浼氳姳鎺夊崄鍑犲垎閽熸椂闂村惂銆?

4. 嫻嬭瘯ACE錛?

$ cd $ACE_ROOT/tests
$ make

澶ф鍙堜細鑺辨帀鍗佸嚑鍒嗛挓鏃墮棿鍚с?

鎺ヤ笅鏉ュ氨鍙互浣跨敤perl鑴氭湰瀹屾垚鎵鏈夋祴璇曪紝鎴戞病鏈変嬌鐢ㄨ繃perl錛屼復鏃跺畨瑁呬簡涓涓嬨?

$ perl run_test.pl

榪欎釜鑴氭湰鍦ㄦ垜涓浣嶅悓浜嬬殑鏈哄櫒涓婅窇浜嗗緢涔咃紙鍗佸嚑鍒嗛挓 or 鍑犲崄鍒嗛挓錛燂級錛屼笉騫哥殑鏄紝Windows绔熺劧鎶涘嚭浜嗕竴涓唴瀛樿鍐欓敊璇紝鏇村姞涓嶅垢鐨勬槸錛屾垜鐜板湪娌℃湁鑳藉姏鍘葷‘瀹氥?

緇撴灉鍛ㄦ湯鍚庨潰鐨勬椂闂村張鑺卞湪鐔熸倝EMacs涓婁簡錛岃繕娌℃湁鐪婣CE鐨勪唬鐮侊紝鍙湁涓嬪懆鎵嶈兘鐪嬩簡銆?

-----------------------緇撴潫-----------------------

榪欑灝忓鐢熺殑涓滆タ鎷垮嚭鏉ヨ紜疄鏄緢闅句負鎯呯殑錛岀劧鑰岋紝浜庢垜鐜板湪鍗村張綆楁槸鏋佸ぇ鐨勪竴涓敹鑾楓傜湡絳夋垜鐔熸倝浜嗗叾涓殑寰堝鍐呭錛屽張鏈繀浼氬啀鏈夎愬績璇翠簡銆傛墍浠ヨ繕鏄褰曚竴涓嬶紝鏃㈡槸榧撳姳錛屼篃鏄潱淇冦?/p>

鏅氫笂鐫¤涔嬪墠緲諱簡涓涓?a target="_blank">銆夾CE紼嬪簭鍛樻寚鍗楋細緗戠粶涓庣郴緇熺紪紼嬬殑瀹炵敤璁捐妯″紡銆?/a>錛屽彂鐜伴噷闈?.3鑺備篃璁插埌浜嗘庝箞瀹夎銆?/p>

Fox 2009-08-17 09:52 鍙戣〃璇勮
]]>
璁捐妯″紡錛堝洓錛?amp;mdash;&mdash;Template Methodhttp://www.shnenglu.com/Fox/archive/2009/02/11/73420.htmlFoxFoxTue, 10 Feb 2009 17:46:00 GMThttp://www.shnenglu.com/Fox/archive/2009/02/11/73420.htmlhttp://www.shnenglu.com/Fox/comments/73420.htmlhttp://www.shnenglu.com/Fox/archive/2009/02/11/73420.html#Feedback1http://www.shnenglu.com/Fox/comments/commentRss/73420.htmlhttp://www.shnenglu.com/Fox/services/trackbacks/73420.html鍦ㄤ竴涓◢寰笂瑙勬ā錛堟庝箞涔熸湁鍑犲崄涓被鍚э級鐨凜++紼嬪簭涓紝緇ф壙鍜岀粍鍚堢殑浣跨敤姣旀瘮鐨嗘槸銆傝櫧鐒禛oF鎻愬嚭浜哋OD鐨勪袱涓師鍒欙紝絎簩涓皳涔嬨?strong>浼樺厛浣跨敤瀵硅薄緇勫悎錛岃屼笉鏄戶鎵?/strong>銆忥紝浣嗚繖緇濅笉鎰忓懗鐫涓嶄嬌鐢ㄧ戶鎵匡紝姝e洜濡傛錛岀涓涓師鍒欐墠鏄?strong>閽堝鎺ュ彛緙栫▼錛岃屼笉鏄拡瀵瑰疄鐜扮紪紼?/strong>銆忥紝榪欎袱涓師鍒欐竻妤氱殑琛ㄨ揪浜嗚蔣浠跺伐紼嬩腑銆?strong>浣庤﹀悎銆忕殑鎬濇兂銆?/p>

妯℃澘鏂規硶錛圱emplate Method錛夌殑鎰忓浘姝f槸銆?strong>瀹氫箟涓涓搷浣滀腑鐨勭畻娉曠殑妗嗘灦錛岃屽皢涓浜涙楠ゅ歡榪熷埌瀛愮被涓?/strong>銆忋?/p>

娉ㄦ剰錛岃繖閲屾湁涓叧閿瘝銆庝竴浜涖忥紝鏃㈢劧鏄庝竴浜涖忥紝灝辨剰鍛崇潃鐖剁被鐨勭殑鎺ュ彛涓凡緇忓疄鐜頒簡銆庝竴浜涖忔楠わ紝鍚﹀垯錛岀埗綾諱究鍙彁渚涗簡鎶借薄鎺ュ彛銆?/p>

榪欎竴鎯呭喌鏄垜浠湪緙栫爜鏃舵椂甯擱亣鍒扮殑錛岀埗綾誨疄鐜頒簡閮ㄥ垎綆楁硶涓殑閫氱敤琛屼負錛屽瓙綾繪牴鎹嚜宸辯殑闇姹傚彲瀵瑰叾榪涜蹇呰鎵╁厖銆?/p>

class CBase
{
public:
    // Default done
    virtual void Operation(void)
    {
        ...
    }
};

class CDerive :
    public CBase
{
public:
    virtual void Operation(void)
    {
        switch( ... )
        {
        case A: ...
        case B: ...
        case c: ...
        default:
            CBase::Operation();
        }
    }
};

鍥犱負瀵圭埗綾葷殑涓嶄簡瑙f垨鏄瀛愮被鐨勫お浜嗚В錛屼綘浠ヤ負CDerive::Operation()鍋氫簡瓚沖澶氾紝涓嶉渶瑕?code>CBase::Operation()錛屼絾瀹為檯涓婁粛鐒墮渶瑕佺殑鎯呭喌鎬誨湪鍙戠敓銆?/p>

鎹竴縐嶆柟寮忥紝鎶?code>Operation()浣滀負妯℃澘鏂規硶錛屾妸DoOperation()浣滀負鍙墿灞曠殑鎺ュ彛鎻愪緵緇欏瓙綾誨疄鐜幫細

class CBase
{
public:
    void SetFocus(void) { ... }
    void ResetFocus(void) { ... }
    // Call by user
    void Operation(void)
    {
        SetFocus();
        DoOperation();
        ResetFocus();
    }
    // Default done
    virtual void DoOperation(void) = 0;
};

class CDerive :
    public CBase
{
public:
    virtual void DoOperation(void)
    {
        ...
    }
};

妯℃澘鏂規硶鍙槸鎻愪緵浜嗕竴涓畝鍗曠殑灝佽鎶宸э紝褰撶劧涓嶆槸鎵鏈夌殑铏氭帴鍙i兘榪欎箞鍐?)銆?/p>


鏇村鍐呭璇風Щ姝?a target="_blank">鎴戠殑涓漢涓婚〉銆?/p>

Fox 2009-02-11 01:46 鍙戣〃璇勮
]]>
VS2005鏂偣澶辨晥鐨勯棶棰?/title><link>http://www.shnenglu.com/Fox/archive/2009/01/04/71110.html</link><dc:creator>Fox</dc:creator><author>Fox</author><pubDate>Sun, 04 Jan 2009 03:04:00 GMT</pubDate><guid>http://www.shnenglu.com/Fox/archive/2009/01/04/71110.html</guid><wfw:comment>http://www.shnenglu.com/Fox/comments/71110.html</wfw:comment><comments>http://www.shnenglu.com/Fox/archive/2009/01/04/71110.html#Feedback</comments><slash:comments>19</slash:comments><wfw:commentRss>http://www.shnenglu.com/Fox/comments/commentRss/71110.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Fox/services/trackbacks/71110.html</trackback:ping><description><![CDATA[<p>VS2005涓嬩嬌鐢╒C錛岄儴鍒嗘柇鐐規棤鏁堬紝鏄劇ず銆庡綋鍓嶄笉浼氬懡涓柇鐐廣傝繕娌℃湁涓鴻鏂囨。鍔犺澆浠諱綍絎﹀彿銆忋?/p> <p>璇曡繃浠ヤ笅涓浜涙柟娉曪細</p> <p>1銆佹棤鏁堟柇鐐規墍鍦ㄧ殑欏圭洰鍜屽惎鍔ㄩ」鐩殑璁劇疆錛氶」鐩?>灞炴?>閰嶇疆灞炴?>C/C++->甯歌->璋冭瘯淇℃伅鏍煎紡錛岃繖閲屼笉鑳戒負銆庣鐢ㄣ忥紱</p> <p>2銆侀」鐩?>灞炴?>閰嶇疆灞炴?>閾炬帴鍣?>璋冭瘯->鐢熸垚璋冭瘯淇℃伅錛岃繖閲岃涓恒庢槸銆忥紱</p> <p>3銆丆/C++->浼樺寲->浼樺寲閫夋嫨銆庣鐢ㄣ忥紱</p> <p>4銆佸垹闄よВ鍐蟲柟妗堜笅鐨?ncb鏂囦歡錛?/p> <p>5銆佸伐鍏?>閫夐」->璋冭瘯->銆庤姹傛簮鏂囦歡涓庡師濮嬬増鏈畬鎴愬尮閰嶃忓幓鎺夊嬀錛?/p> <p>6銆佹渶鍚庡湪涓婅堪璁劇疆鐨勬儏鍐典笅錛岄噸鏂扮紪璇戞暣涓В鍐蟲柟妗堬紱</p> <p>7銆佸洖榪囧ご鏉ワ紝鍙戠幇鍘熸潵鏄竴孌典笉浼氳鎵ц鍒扮殑浠g爜鈥︹?/p>鐪嬫潵錛岄櫎浜哣S鏈韓浼氭湁bug錛岃嚜宸辯殑浠g爜榪樻槸瑕佸媯鏌ヤ竴涓嬨?img src ="http://www.shnenglu.com/Fox/aggbug/71110.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Fox/" target="_blank">Fox</a> 2009-01-04 11:04 <a href="http://www.shnenglu.com/Fox/archive/2009/01/04/71110.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>綆鍗曠殑灞炴х粨鏋勮璁?/title><link>http://www.shnenglu.com/Fox/archive/2008/12/28/70542.html</link><dc:creator>Fox</dc:creator><author>Fox</author><pubDate>Sat, 27 Dec 2008 18:44:00 GMT</pubDate><guid>http://www.shnenglu.com/Fox/archive/2008/12/28/70542.html</guid><wfw:comment>http://www.shnenglu.com/Fox/comments/70542.html</wfw:comment><comments>http://www.shnenglu.com/Fox/archive/2008/12/28/70542.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.shnenglu.com/Fox/comments/commentRss/70542.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Fox/services/trackbacks/70542.html</trackback:ping><description><![CDATA[<p>鏈枃鏈鏃╁彂甯冧簬<a target="_blank">鎴戠殑涓漢涓婚〉</a></p> <p>涓鑸殑RPG娓告垙涓紝鐜╁瑙掕壊銆丯PC銆佺墿鍝併佸満鏅瓑涓鑸兘鍏鋒湁涓烘暟浼楀鐨勫悇縐嶅睘鎬э紝浣跨敤C++緙栫爜鏃訛紝寰堝鏄撹冭檻璁捐鎴愪負澶ч噺鐨勬垚鍛樺彉閲忓拰鐩稿簲鐨勫瓨鍙栧嚱鏁幫細</p><code> <p>class CObject<br>{<br>public:<br>    long GetAttrA(void) const { return m_lAttrA; }<br>    void SetAttrA(long lVal) { m_lAttrA = lVal; }<br>    long GetAttrB(void) const { return m_lAttrB; }<br>    void SetAttrB(long lVal) { m_lAttrB = lVal; }<br>    ...<br>    long GetAttrN(void) const { return m_lAttrN; }<br>    void SetAttrN(long lVal) { m_lAttrN = lVal; } <p>private:<br>    long m_lAttrA;<br>    long m_lAttrB;<br>    ...<br>    long m_lAttrN;<br>};</p></code> <p>涔嶄竴鐪嬶紝闈炲父娓呮櫚鏄庝簡銆傚湪涓涓◢鏄懼鏉傜殑欏圭洰涓紝鎯寵浣忋佺敋鑷蟲壘鍒版瘡涓涓睘鎬ф槸闈炲父闅劇殑錛屽喌涓旈櫎浜嗗睘鎬э紝榪樻湁澶ч噺鐨勯昏緫澶勭悊錛岀敋鑷蟲槸涓嶅悓欏圭洰闂寸殑鏁版嵁浜や簰錛屾瘮濡傚皢灞炴х殑鏁版嵁搴撳瓨鍙栥傝繖涔堝仛鐨勭己鐐瑰ぇ鑷存湁榪欎箞鍑犵偣錛?/p> <p>1. 灞炴ф病鏈夋槑紜垎闂ㄥ埆綾伙紝灝ゅ叾鍦ㄥ浜哄崗浣溿佸妯″潡緙栧啓鏃訛紝寰寰涓婇潰涓鎵廣佷笅闈竴鎵癸紝鐢氳嚦鏈夐噸澶嶅睘鎬с佸簾寮冨睘鎬э紝闅句簬綆$悊鍜屾妸鎻★紱</p> <p>2. 瀵逛簬鏁版嵁搴撳瓨鍙栵紝闇瑕佸啓鍗曠嫭鐨勫瓨鍙栨帴鍙o紝鑰屼笖涓鏃﹀睘鎬ф湁澧炲噺銆佷慨鏀癸紝瀛樺彇鎺ュ彛瑕侀殢涔嬩慨鏀癸紱</p> <p>3. 閫氳繃鎺ュ彛鍑芥暟榪涜綆鍗曠殑灞炴у瓨鍙栭潰涓村ぇ閲忕殑鍫嗘爤淇濆瓨錛屽嵆浣夸嬌鐢ㄥ唴鑱旀垨瀹忓畾涔夛紝涔熸槸娌繪爣涓嶆不鏈?/p> <p>閽堝涓婅堪闂錛屾垜鐨勬濊礬涔熸瘮杈冪畝鍗曪細瀵?strong>鍩烘湰綾誨瀷</strong>鏁版嵁榪涜浜屾灝佽銆?/p><code> <p>struct tagDBAttrs<br>{<br>    long lA;<br>    long lB;<br>    ...<br>    long lN;<br>}; <p>class CObject<br>{<br>public:<br>    const tagDBAttrs& GetDBAttrs(void) const { return m_DBAttrs; }<br>    void SetDBAttrs(const tagDBAttrs& rDBAttrs)<br>    {<br>        memcpy(&m_DBAttrs, rDBAttrs, sizeof(m_DBAttrs));<br>    } <p>private:<br>    tagDBAttrs    m_DBAttrs;<br>    string        m_strA;<br>    CObject*      m_pObjB;<br>    CShape*       m_pShapeC;<br>    ...<br>};</code> </p> <p>涔嬫墍浠ユ彁鍒板熀鏈被鍨嬫暟鎹紝涓昏緙樹簬鍩烘湰綾誨瀷鏋勬垚鐨勭粨鏋勫彲浠ラ氳繃<code>sizeof</code>榪愮畻絎︾洿鎺ョ‘瀹氾紝鑰屽儚綾誨璞$瓑緇勫悎綾誨瀷錛屽叾娣辨嫹璐濄佽祴鍊箋佹搷浣滃強璧嬪肩瓑閫昏緫鍒欒緝涓哄鏉傦紝涓鑸棤娉曠粺涓澶勭悊銆?/p> <p>浠ヤ笂闈㈢殑<code>tagDBAttrs</code>涓轟緥錛屽浜庡熀鏈被鍨嬫暟鎹鐞嗗叿鏈夐潪甯稿ぇ鐨勪紭鍔匡紝灝ゅ叾鍦ㄦ暟鎹暣浣撳瓨鍙栨椂錛屾澶栵紝澧炲噺鍩烘湰綾誨瀷灞炴т篃姣旇緝綆鍗曪紝鑰屼笖涓嶉渶瑕侀噸鍐?code>Get/Set</code>鎺ュ彛錛屽悓鏃舵柟渚夸簡瀵瑰睘鎬х殑鍒嗛棬鍒被澶勭悊銆?/p> <hr> <p>姝ゅ欏轟究璋堣皥鍏充簬寮鍙戜腑鐨勪竴浜涙潅鐨勪綋浼氥?/p> <p>瀵逛簬宸ヤ綔涓嶄箙鐨勫悓瀛﹁岃█錛屾嬁鍒頒竴涓換鍔℃湁鍙兘鍑虹幇浠ヤ笅涓ょ鎯呭喌錛?/p> <p>1. 浠ュ揩閫熷紑鍙戜負閲嶏紝鍓嶆湡榪涘睍杈冨揩錛屽湪灝忓瀷妯″潡寮鍙戜腑欏洪欏烘按錛屼絾鍦ㄩ潰瀵瑰鏉備換鍔℃椂錛屽洜涓哄鍓嶆湡璁捐閲嶈涓嶈凍錛屽悗鏈熶細涓嶆柇璋冩暣浠g爜錛岀敋鑷沖湪鍩烘湰鍔熻兘寮鍙戠粨鏉熷悗錛屽洜涓洪昏緫鏋舵瀯闂錛屽鑷碽ug闅愭偅杈冨杈冩繁錛屽鏄撻櫡鍏ユ償娌鹼紝鐥涜嫤鎸f墡錛?/p> <p>2. 闅忔椂闅忓榪芥眰浠g爜緇撴瀯鐨勪紭緹庡拰鎵ц鏁堢巼鐨勪紭鍖栵紝綺劇泭姹傜簿錛屽線寰鍦ㄥ墠鏈熻璁′笂鑺辮垂榪囧鐨勫績鎬濓紝浠ヨ揪鍒拌緝鍚堢悊鐨勯昏緫緇撴瀯錛岀敋鑷蟲嫋寤舵暣涓」鐩殑寮鍙戣繘搴︼紝榪欑鍚屽涓鑸鏉ワ紝浠g爜璐ㄩ噺杈冮珮錛屽悗鏈焍ug杈冨皯銆?/p> <p>鍏跺疄錛屼笂闈㈣鐨勫氨鏄垜鑷繁錛屾垜鍒氬紑濮嬪伐浣滅殑鏃跺欙紝涓婇潰緇欐垜涓涓紪鍐欑嫭绔嬪伐鍏風殑浠誨姟錛屽綋鏃舵ヤ簬琛ㄧ幇錛岀己涔忛」鐩疄鎴樼粡楠岋紝涓虹紪鐮佽岀紪鐮侊紝閫昏緫緇撴瀯涓嶆敞閲嶆墿灞曟э紝璁捐涓嶅悎鐞嗭紝鍦ㄨ繘琛屽埌鍚庢湡鏃訛紝闈㈠鍑虹幇鐨勬柊闇姹傛棤娉曞簲瀵癸紝瀵艱嚧鏈鍚庢帹鍒伴噸鏉ャ?/p> <p>鍚庢潵錛屾參鎱㈡帴鍙椾簡娉ㄩ噸鍓嶆湡璁捐鐨勮蹇碉紝鏇村洜涓鴻嚜宸辯殑瀹岀編鎯呯粨鍜屼唬鐮佹磥鐧栵紝涓嶄粎緇忓父璋冩暣鑷繁緙栫爜涓笉浼樼編鐨勭墖孌碉紝鐢氳嚦瓚婁繋浠e簴鍘諱慨鏀瑰叾浠栧悓浜嬬殑浠g爜錛岃拷姹傚澶勭殑楂樻晥錛岃楄垂澶ч噺鏃墮棿綺懼姏錛岄毦浠ヨ嚜鎷斻?/p> <p>鍦ㄤ換浣曚竴涓」鐩腑錛岄兘鏈夎交閲嶄富嬈′箣鍒嗭紝涔熷氨鏄墍璋撶殑銆?strong>8020鍘熷垯</strong>銆忥紝鍏充簬銆?strong>8020鍘熷垯</strong>銆忔庝箞鐞嗚В閮借錛屾垜鐨勭悊瑙e氨鏄紝姣忎釜欏圭洰涓殑鏁堢巼鐡墮鏄?0%鐨勬牳蹇冧唬鐮侊紝80%鐨勬椂闂村拰宸ヤ綔閲嶅績搴旇鏀懼埌榪?0%鐨勬牳蹇冧唬鐮佷笂銆傛斁鍒頒竴涓皬鐨勬ā鍧椾腑涔熸槸榪欐牱錛屽簲璇ョ‘瀹氬伐浣滈噸蹇冿紝鍦ㄥ紑鍙戣繘搴︾殑闄愬埗涓嬶紝瀵規牳蹇冧唬鐮佺簿鐩婃眰綺撅紝瀵歸潪鏁堢巼鐡墮鍙互閫傚綋鍑忓皯渚ч噸銆?/p> <p>瀵逛簬鏂頒漢錛屾渶闅劇殑灝辨槸浠庢暣浣撶殑楂樺害紜畾20%鐨勫伐浣滈噸蹇冿紝榪欎富瑕佷緷璧栦簬鑷韓绱犺川鐨勬彁楂樺拰寮鍙戠粡楠岀殑縐瘡銆傝屽闇姹傛繁鍏ョ粏鑷寸殑鍒嗘瀽鍜屽閫昏緫綺劇泭姹傜簿鐨勮璁℃湰韜彲浠ヨ緇冧竴涓漢鍒嗘瀽闂銆佽В鍐抽棶棰樼殑鑳藉姏銆?/p> <p>鎬葷粨涓涓嬬殑璇濓紝涔熸鏄垜浠」鐩粍鍘嗘潵鎵鍊″鍜屽潥鎸佺殑錛?/p> <p>1. 綺劇泭姹傜簿錛?/p>2. 緇嗚妭鍐沖畾鎴愯觸錛屾佸害鍒剁害鑳藉姏銆?img src ="http://www.shnenglu.com/Fox/aggbug/70542.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Fox/" target="_blank">Fox</a> 2008-12-28 02:44 <a href="http://www.shnenglu.com/Fox/archive/2008/12/28/70542.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>璁捐妯″紡錛堜笁錛?amp;mdash;&mdash;Singletonhttp://www.shnenglu.com/Fox/archive/2008/11/19/67339.htmlFoxFoxWed, 19 Nov 2008 15:37:00 GMThttp://www.shnenglu.com/Fox/archive/2008/11/19/67339.htmlhttp://www.shnenglu.com/Fox/comments/67339.htmlhttp://www.shnenglu.com/Fox/archive/2008/11/19/67339.html#Feedback4http://www.shnenglu.com/Fox/comments/commentRss/67339.htmlhttp://www.shnenglu.com/Fox/services/trackbacks/67339.html涓嶇煡閬揝ingleton綆椾笉綆楃敤鐨勬渶澶氱殑錛屽鉤鏃剁敤鐨勬椂鍊欙紝寰寰閮芥槸鐩存帴鏁蹭笅闈竴孌碉細

……

涓嶆槸涓嶆兂鏀癸紝灝辨槸鎳掞紝鏁插浜嗗凡緇忎笉瑙夊緱榪欎箞鍐欏嫻垂鏃墮棿浜嗭紝鎸夊ぇ瀹剁殑璇存硶錛岃繖鏍峰啓鑷沖皯鏈夎繖涔堝嚑涓己鐐癸細

1. 蹇呴』鍦ㄧ▼搴忕粨鏉熷墠鎵嬪姩閲婃斁錛岃繖涓嶄粎鏄疪P闂錛屽鏋滀綘鍊熶簡鍐呭瓨涓嶄富鍔ㄨ繕錛岃鏄庝綘RP宸紝浣嗚鍒漢鎼炰涪浜嗭紙瀹曟満錛夊鑷翠綘榪樹笉涓婏紝璇存槑鍒漢RP宸紵鎵浠ワ紝榪欒繕鏄釜闂錛?/p>

2. 綰跨▼鍚屾闂錛屽鏋淪ingleton瀹炰緥璺ㄧ嚎紼嬩嬌鐢紝涓婁緥涓嶅畨鍏紝鍦↖nitial鍜孯elease鏃跺姞閿佸彲浠ヨВ鍐籌紱

3. 鏈澶х殑闂錛氫笉鑳介噸鐢ㄣ?/p>

闃呰鍏ㄦ枃



Fox 2008-11-19 23:37 鍙戣〃璇勮
]]>
璁捐妯″紡錛堜簩錛?amp;mdash;&mdash;Statehttp://www.shnenglu.com/Fox/archive/2008/11/19/67251.htmlFoxFoxTue, 18 Nov 2008 16:57:00 GMThttp://www.shnenglu.com/Fox/archive/2008/11/19/67251.htmlhttp://www.shnenglu.com/Fox/comments/67251.htmlhttp://www.shnenglu.com/Fox/archive/2008/11/19/67251.html#Feedback0http://www.shnenglu.com/Fox/comments/commentRss/67251.htmlhttp://www.shnenglu.com/Fox/services/trackbacks/67251.htmlState妯″紡瀵瑰簲鍒癈++鐨?strong>澶氭?/strong>鐗規с?/p>

State妯″紡閫傜敤杈冨箍錛岃繖鍎跨粰鍑烘瘮杈冨父瑙佹槗鎳傜殑涓夌鎯呭喌錛?/p>

1. 褰撴墿鍦ㄩ潰瀵逛笉鍚岃亴涓氬拰鐗規х殑鐜╁鏃跺搴斾笉鍚岀殑AI澶勭悊鍜屾妧鑳介噴鏀撅細

CSkill* pAttackSkill;

if( pPlayer->MagicImmune() ) pAttackSkill = SomePhysicalAttackSkill;

else if( pPlayer->PhysicalImmune() ) pAttackSkill = SomeMagicAttackSkill;

...

pAttackSkill->Begin();

...

鎴栬呬嬌鐢ㄥ垎鏀粨鏋勶細

CSkill* pAttackSkill;

switch( pPlayer->GetOccupation() )

{

  case WARRIOR: pAttackSkill = SomeLongRangeSkill; break;

  case MAGICIAN: pAttackSkill = SomeForceSkill; break;

  case NIMROD: pAttackSkill = SomeMagicSkill; break;

...

}

pAttackSkill->Begin();

...

闃呰鍏ㄦ枃



Fox 2008-11-19 00:57 鍙戣〃璇勮
]]>
WSAEventSelect鍓栨瀽http://www.shnenglu.com/Fox/archive/2008/10/27/65263.htmlFoxFoxMon, 27 Oct 2008 15:25:00 GMThttp://www.shnenglu.com/Fox/archive/2008/10/27/65263.htmlhttp://www.shnenglu.com/Fox/comments/65263.htmlhttp://www.shnenglu.com/Fox/archive/2008/10/27/65263.html#Feedback1http://www.shnenglu.com/Fox/comments/commentRss/65263.htmlhttp://www.shnenglu.com/Fox/services/trackbacks/65263.html鏈枃鍚屾椂鍙戝竷鍦?a title="http://www.yulefox.com" target="_blank" rel="tag">http://www.yulefox.com鍜?a title="http://www.shnenglu.com/fox" href="http://www.shnenglu.com/fox" target="_blank" rel="tag">http://www.shnenglu.com/fox銆?

榪戞潵鍦╓indows涓嬬敤WSAEventSelect鏃訛紝紕板埌涓涓鎵嬬殑闂錛屽綋鐒剁幇鍦ㄥ凡緇忚В鍐充簡銆?

闂鎻忚堪錛?/strong>

涓涓猄erver錛屼竴涓狢lientA錛屼竴涓狢lientB錛孲erver鐢╓SAEventSelect妯″瀷鐩戝惉錛堝彧鏈夌洃鍚紝娌℃湁璇誨啓錛夛紝ClientA鍦ㄨ繛鎺erver鍚庯紝ClientA瀵瑰簲鐨凟ventA琚Е鍙戯紝Server鐨刉SAWaitForMultipleEvents絳夊緟鍒癊ventA錛孋lientB榪炴帴Server鏃訛紝TCP涓夋鎻℃墜鎴愬姛錛孋lientB涓嶴erver鐨凾CP鐘舵佽緗負ESTABLISHED錛岀劧鑰孲erver鐨刉SAWaitForMultipleEvents娌℃湁絳夊緟鍒癊ventB琚Е鍙戙?

鐢╪etstat鐪嬩簡涓涓嬶紝ClientB涓嶴erver鐨勭姸鎬佹槸ESTABLISHED錛屾鏃跺鏋淐lientB閫鍑猴紝鐢變簬Server鏃犳硶姝e父Close璇ヨ繛鎺ワ紝鍥犳Server鐨勭姸鎬佷笉鏄疶IME_WAIT鑰屾槸CLOSE_WAIT錛堟寔緇?灝忔椂錛夛紝Client鐨勭姸鎬佹槸FIN_WAIT_2錛堟寔緇?0鍒嗛挓錛夈?

鎴戝皾璇曞皢ClientA涓誨姩鍏抽棴鍚庡啀嬈¤繛鎺erver錛孲erver鐨刉SAWaitForMultipleEvents鍦╳ait鍒癊ventA涔嬪悗錛孍ventB姝ゆ椂涔熻瑙﹀彂銆?

寮濮嬩竴鐩翠互涓洪棶棰樼殑鏍規簮鍦ㄤ簬WSAEventSelect鐨勪嬌鐢ㄤ笂錛屾瘯绔燂紝涔嬪墠娌℃湁緋葷粺鍐欒繃綾諱技鐨勪唬鐮侊紝闅懼厤鎬鐤戝埌浜嬩歡妯″瀷鐨勪嬌鐢ㄤ笂銆傚鏂規煡闃呰祫鏂欙紝鏈鍚庤繕鏄病鏈夊彂鐜扮被浼奸棶棰樼殑瑙e喅鏂規銆?

鍙堣窡浜嗕竴涓婂崍涔嬪悗錛孠evin寮濮嬫鐤戞槸澶氱嚎紼嬩嬌鐢ㄧ殑闂錛屾垜鐪嬩簡涓涓嬶紝鐨勭‘娌℃湁瀵筫vent鐨勫綰跨▼鎿嶄綔榪涜澶勭悊錛屼絾鍥犱負鍦ㄥ彟涓涓簲鐢ㄤ腑錛屼嬌鐢ㄤ簡鍚屾牱鐨勬ā鍧楋紝鍗存病鏈夎闂銆傛渶鍚庤冭檻蹇呰鎬ф椂榪樻槸鏀懼純浜嗗姞涓寸晫璧勬簮錛屾棤瑙嗗綰跨▼鍚屾闂銆侹evin鏈潵鍔濇垜鎹釜妯″瀷錛屼絾鎴戝浐鎵х殑璁や負瑕佸仛灝辨妸榪欎簨鍎垮仛濂姐傚洜涓轟笅鍗堣繕瑕佸洖瀛︽牎涓瓚燂紝灝辨兂灝藉揩鎼炲畾錛屾瘯绔熷洜涓鴻繖涓鍧楀凡緇忔妸Kevin鐨勮繘搴︽嫋浜嗕竴鍛ㄤ簡錛屽績涓嬭繕鏄繃鎰忎笉鍘伙紝鑰屼笖闅愮害鎰熻鍒扮闂鐨勮В鍐寵秺鏉ヨ秺榪戜簡銆?

闂鍒嗘瀽錛?/strong>

鍦ㄥ鐫WSAWaitForMultipleEvents鎬濊冧簡鍗婂ぉ涔嬪悗錛屽拷鐒跺紑紿嶄簡錛屽鏋淭hreadA鍦╓SAWaitForMultipleEvents鏃訛紝鍙湁涓涓狤ventA琚玏SAEventSelect騫秙et鍒皊ignaled鐘舵侊紝鍒欒EventA浼氳wait鎴愬姛錛孴hreadA澶勭悊EventA涔嬪悗緇х畫闃誨鍦╓SAWaitForMultipleEvents銆傛鏃訛紝ThreadB閫氳繃WSAEventSelect灝咵ventB鍒濆鍖栦負nonsignaled鐘舵侊紝涔嬪悗鍗充嬌EventB琚玸et涓簊ignaled鐘舵侊紝浣員hreadA鐨刉SAWaitForMultipleEvents鍥犱負澶勪簬闃誨鐘舵侊紝涓嶅彲鑳藉埛鏂頒簨浠墮泦錛屼篃灝變笉鍙兘wait鍒癊ventB錛屾渶緇堝鑷翠簡ClientB鐨勮姹傛棤娉曡鍝嶅簲銆傚鏋淓ventA琚Е鍙戝垯浼氳ThreadA絳夊緟鍒幫紝WSAWaitForMultipleEvents榪斿洖鍚庡啀嬈¤繘鍏ユ椂浜嬩歡闆嗗凡緇忚鍒鋒柊錛孍ventB琚玾ait鍒頒篃灝變笉闅劇悊瑙d簡銆?

闂瑙e喅錛?/strong>

璇村埌搴曟槸鍥犱負褰揟hreadA闃誨鍦╓SAWaitForMultipleEvents澶勪箣鏃訛紝浜嬩歡闆嗙殑鍙樻洿鏃犳硶绔嬪嵆寰楀埌浣撶幇銆傚鏋滃厑璁鎬笂灞傚簲鐢ㄩ殢鏃禼reate鎴朿lose涓浜沞vent錛屽垯WSAWaitForMultipleEvents灝變笉搴旇鏃犻檺闃誨涓嬪幓銆?

鍥犳鏈鍚庣殑涓涓В鍐蟲柟娉曞氨鏄WSAWaitForMultipleEvents瓚呮椂榪斿洖騫禨leep涓孌墊椂闂達紝褰揥SAWaitForMultipleEvents鍐嶆榪涘叆鏃朵簨浠墮泦寰椾互鏇存柊銆?

鎯充簡涓涓嬶紝鍙︿竴涓簲鐢ㄤ腑涔嬫墍浠ユ病鍑虹幇璇ラ棶棰樹篃鍙槸涓閥鍚堬紝鍥犱負璇ュ簲鐢ㄤ腑ThreadB鐨勪袱嬈SAEventSelect闂撮殧寰堢煭錛屽湪ThreadA鑾峰緱鏃墮棿鐗囦箣鍓嶅凡緇忕‘瀹氫簡浜嬩歡闆嗐?

璇寸櫧浜嗚繖涔熶笉鏄竴涓粈涔堝ぇ闂錛岀敋鑷寵皥涓嶄笂浠諱綍闅懼害錛屼絾鏄洜涓轟箣鍓嶅WSAEventSelect娌℃湁涓涓竻鏅扮殑姒傚康錛屽洜姝ゅ湪鍙戠幇鍜屽垎鏋愰棶棰樹笂鑺辮垂浜嗗ぇ閲忔椂闂達紝鍔犱笂鍦╒S2005璋冭瘯榪囩▼涓紝鏈変釜鍒枃浠舵洿鏂版椂娌℃湁琚噸鏂扮紪璇戯紝涔熻楄垂浜嗗緢澶氭棤璋撶殑鏃墮棿錛屼互鑷充簬鎴戜滑閮藉湪鑰冭檻鏄笉鏄鏀懼純IDE錛屽洜涓烘垜浠‘瀹炲お渚濊禆IDE浜嗭紝鏈変簺TX涓轟簡紼沖Ε錛屾瘡嬈¢兘鏄滈噸鏂扮敓鎴愭暣涓В鍐蟲柟妗堚濓紝濡傛灉涓涓В鍐蟲柟妗堟湁鍑犲崈涓枃浠躲佸嚑鍗佷竾琛岀殑浠g爜錛屼及璁¢噸緙栦竴嬈′篃瑕佽姳涓嚑鍒嗛挓鍚с?

鎬葷粨錛?/strong>

  1. netstat瑙傚療鐨勭綉緇滆繛鎺ュ浜嶦STABLISHED鐘舵佸茍涓嶆剰鍛崇潃閫昏緫榪炴帴琚玜ccept錛屽彧鏄〃鏄庡鎴風connect鐨凾CP鐗╃悊榪炴帴錛堜笁嬈℃彙鎵嬶級琚湇鍔″櫒绔痑ck錛屽鏋滄湇鍔″櫒娌℃湁accept鍒拌榪炴帴錛岃瘉鏄庣綉緇滄ā鍧椾唬鐮佹湁闂錛?
  2. 澶氱嚎紼嬫庝箞閮芥槸涓棶棰橈紝綰跨▼鍚屾灝介噺閬垮厤錛屾瘯绔燂紝鐢↘evin鐨勮瘽鏉ヨ錛屽姞閿佹槸涓戦檵鐨勩備絾鍦ㄦ秹鍙婂埌鍚屾闂鏃訛紝榪樻槸鏉冭 涓涓嬶紝鎴戣繖鍎夸箣鎵浠ユ渶鍚庢病鏈夊姞涓寸晫鍖猴紝鏄洜涓轟簨浠朵富瑕佹槸鍦═hreadA涓鐞嗭紝ThreadB涓彧鏈塩reate鎿嶄綔錛岃屼笖ThreadA瀵逛簨浠墮泦鐨勫埛鏂拌姹備笉鏄偅涔堜弗鏍鹼紝涔熷氨涓嶈冭檻鍔犱復鐣屽尯浜嗭紱
  3. 濡傛灉鑳藉姏鍜屾潯浠跺厑璁哥殑璇濓紝鏀懼純IDE鍚э紝IDE鐨勭‘涓嶆槸涓ソ涓滆タ錛屾垜涓昏鏄寚鍦ㄧ紪璇戦摼鎺ョ殑鏃跺欙紝濡傛灉浣滀負緙栬緫鍣ㄨ涓嶅畾榪樹細濂界敤:)銆?

涓漢緗戠珯鐢ㄧ殑涓繪満鏈榪戜粠鎹瑕侀粦灞忕殑Windows鎹㈡垚浜咲ebian錛岃繕鍦ㄨ皟鏁達紝浼拌鏄庡ぉ鑳藉紕濂斤紝鍐呭鑲畾姣擟ppblog鏉傜殑澶氾紝璋堢偣鎶鏈殑榪樻槸浼氬悓姝ユ洿鏂板埌銆?/p>

Fox 2008-10-27 23:25 鍙戣〃璇勮
]]>
鏀寔鎴愬憳鍑芥暟鎸囬拡鐨勬秷鎭槧灝勬満鍒剁殑綆鍗曞疄鐜?/title><link>http://www.shnenglu.com/Fox/archive/2008/10/10/63625.html</link><dc:creator>Fox</dc:creator><author>Fox</author><pubDate>Fri, 10 Oct 2008 02:20:00 GMT</pubDate><guid>http://www.shnenglu.com/Fox/archive/2008/10/10/63625.html</guid><wfw:comment>http://www.shnenglu.com/Fox/comments/63625.html</wfw:comment><comments>http://www.shnenglu.com/Fox/archive/2008/10/10/63625.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.shnenglu.com/Fox/comments/commentRss/63625.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Fox/services/trackbacks/63625.html</trackback:ping><description><![CDATA[<p>浣滆咃細Fox</p> <p>鏈枃鍚屾椂鍙戝竷鍦?a >http://www.yulefox.com</a>鍜?a href="http://www.shnenglu.com/fox">http://www.shnenglu.com/fox</a>銆?/p> <p>鍗佸ぉ涔嬪墠錛屽湪CPPBLOG涓婂啓浜嗕竴綃?a title="娑堟伅鏄犲皠鏈哄埗鐨勭畝鍗曞疄鐜? href="http://www.shnenglu.com/Fox/archive/2008/09/29/63056.html" target="_blank" rel="tag">娑堟伅鏄犲皠鏈哄埗鐨勭畝鍗曞疄鐜?/a>錛屾湁鍚屽鎻愬埌璇ュ疄鐜頒笉鏀寔鎴愬憳鍑芥暟銆傝繖涓棶棰樻垜涔熻冭檻鍒頒簡錛屾棦鐒惰鎻愬嚭鏉ワ紝涓嶅Θ鎶婂疄鐜版彁渚涘嚭鏉ャ?/p> <p>闇瑕佽鏄庣殑鏄紝鎴戞湰韜template姣旇緝涓嶆劅鍐掞紝涓嶈繃<a title="Kevin Lynx" href="http://www.shnenglu.com/kevinlynx/archive/2008/03/17/44678.html" target="_blank" rel="tag">Kevin Lynx</a>瀵箃emplate鎰熷啋錛岃屼笖鍐欒繃鍏充簬鎴愬憳鍑芥暟鎸囬拡鐨勯棶棰橈紝鎯充簡寰堜箙錛屽鏋滄敮鎸佹垚鍛樺嚱鏁版寚閽堬紝涓嶇敤妯℃澘鏄笉琛屼簡銆?/p> <p>姝ゅ瀵規垚鍛樺嚱鏁扮殑鏀寔榪樹笉娑夊強瀵瑰嚱鏁板弬鏁扮殑娉涘寲錛屽洜涓烘垜榪欎釜娑堟伅鏄犲皠鏆傛椂涓嶉渶瑕佸弬鏁版硾鍖栵紝涓嬮潰鐨勪唬鐮佸簲璇ヤ笉闇瑕佽繃澶氱殑瑙i噴浜嗐?/p><code> <p>#define REG_MSG_FUNC(nMsgType, MsgFunc) \ <br>    CMsgRegister::RegisterCallFunc(nMsgType, MsgFunc); </p> <p>#define REG_MSG_MEM_FUNC(nMsgType, Obj, MsgFunc) \ <br>    CMsgRegister::RegisterCallFunc(nMsgType, Obj, MsgFunc); </p> <p>class CBaseMessage; </p> <p>class CHandler <br>{ <br>public: <br>    virtual int operator()(CBaseMessage* pMsg) = 0; <br>}; </p> <p>template<typename FuncType> <br>class CDefHandler : public CHandler <br>{ <br>public: <br>    CDefHandler(){} <br>    CDefHandler(FuncType &Func) <br>        : m_Func(Func) <br>    { <br>    } </p> <p>    virtual int operator()(CBaseMessage* pMsg) <br>    { <br>        return m_Func(pMsg); <br>    } </p> <p>protected: <br>    FuncType    m_Func; <br>}; </p> <p>template<typename ObjType, typename FuncType> <br>class CMemHandler : public CHandler <br>{ <br>public: <br>    CMemHandler(){} <br>    CMemHandler(ObjType* pObj, FuncType Func) <br>        : m_pObj(pObj) <br>        , m_Func(Func) <br>    { <br>    } </p> <p>    virtual int operator()(CBaseMessage* pMsg) <br>    { <br>        return (m_pObj->*m_Func)(pMsg); <br>    } </p> <p>protected: <br>    FuncType    m_Func; <br>    ObjType*    m_pObj; <br>}; </p> <p>class CFunction <br>{ <br>public: <br>    CFunction() <br>        : m_pHandler(NULL) <br>    { <br>    } </p> <p>    // 灝佽(C鍑芥暟鎴栭潤鎬佹垚鍛樺嚱鏁? <br>    template<typename FuncType> <br>    CFunction( FuncType &Func ) <br>        : m_pHandler(new CDefHandler<FuncType>(Func)) <br>    { <br>    } </p> <p>    // 灝佽(闈為潤鎬佹垚鍛樺嚱鏁? <br>    template<typename ObjType, typename FuncType> <br>    CFunction( ObjType* pObj, FuncType Func ) <br>        : m_pHandler(new CMemHandler<ObjType, FuncType>(pObj, Func)) <br>    { <br>    } </p> <p>    virtual ~CFunction() <br>    { <br>        DELETE_SAFE(m_pHandler); <br>    } </p> <p>        // 鍑芥暟璋冪敤 <br>    int operator()(CBaseMessage* pMsg) <br>    { <br>        return (*m_pHandler)(pMsg); <br>    } </p> <p>private: <br>    CHandler    *m_pHandler; <br>}; </p> <p>typedef std::map<int, CFunction*> MSG_MAP; <br>typedef MSG_MAP::iterator MSG_ITR; </p> <p>class CMsgRegister <br>{ <br>public: <br>    // 娉ㄥ唽娑堟伅鍑芥暟(C鍑芥暟鎴栭潤鎬佹垚鍛樺嚱鏁? <br>    template <typename FuncType> <br>    inline static void RegisterCallFunc(int nMsgType, FuncType &Func) <br>    { <br>        CFunction *func = new CFunction(Func); <br>        s_MsgMap[nMsgType] = func; <br>    } </p> <p>    // 娉ㄥ唽娑堟伅鍑芥暟(闈為潤鎬佹垚鍛樺嚱鏁? <br>    template <typename ObjType, typename FuncType> <br>    inline static void RegisterCallFunc(int nMsgType, ObjType* pObj, FuncType Func) <br>    { <br>        CFunction *func = new CFunction(pObj, Func); <br>        s_MsgMap[nMsgType] = func; <br>    } </p> <p>    // 鎵ц娑堟伅 <br>    inline static void RunCallFunc(int nMsgType, CBaseMessage* pMsg) <br>    { <br>        MSG_ITR itr = s_MsgMap.find(nMsgType); <br>        if( s_MsgMap.end() != itr ) <br>        { <br>            (*itr->second)(pMsg); <br>        } <br>    } </p> <p>    static void ReleaseMsgMap()                // 閲婃斁娑堟伅鏄犲皠琛?<br>    { <br>        MSG_ITR itr = s_MsgMap.begin(); <br>        while( itr != s_MsgMap.end() ) <br>        { <br>            DELETE_SAFE(itr->second); <br>            itr = s_MsgMap.erase(itr); <br>        } <br>    } </p> <p>protected: <br>    static MSG_MAP            s_MsgMap;        // 娑堟伅鏄犲皠琛?<br>};</p></code> <p>涓嶅彲鍚﹁錛屾ā鏉跨粰浜嗕綘鏇村ぇ鐨勬兂璞$┖闂達紝寰堝涓滆タ錛岃繕鏄笉瑕佷竴鍛蟲帓鏂ョ殑濂?)銆?/p><img src ="http://www.shnenglu.com/Fox/aggbug/63625.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Fox/" target="_blank">Fox</a> 2008-10-10 10:20 <a href="http://www.shnenglu.com/Fox/archive/2008/10/10/63625.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>娑堟伅鏄犲皠鏈哄埗鐨勭畝鍗曞疄鐜?/title><link>http://www.shnenglu.com/Fox/archive/2008/09/29/63056.html</link><dc:creator>Fox</dc:creator><author>Fox</author><pubDate>Mon, 29 Sep 2008 10:34:00 GMT</pubDate><guid>http://www.shnenglu.com/Fox/archive/2008/09/29/63056.html</guid><wfw:comment>http://www.shnenglu.com/Fox/comments/63056.html</wfw:comment><comments>http://www.shnenglu.com/Fox/archive/2008/09/29/63056.html#Feedback</comments><slash:comments>19</slash:comments><wfw:commentRss>http://www.shnenglu.com/Fox/comments/commentRss/63056.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Fox/services/trackbacks/63056.html</trackback:ping><description><![CDATA[<p>欏圭洰涓嬌鐢ㄤ簡娑堟伅閫氫俊鏈哄埗錛屽洜涓烘秷鎭被鍨嬮潪甯稿錛岀浉搴旂殑錛屽鐞嗘秷鎭殑鍦版柟浠g爜涔熼潪甯稿銆? <p>鑷劧鑰岀劧鎯沖埌MFC涓殑娑堟伅鏄犲皠錛? <p>鍒涘緩涓涓己鐪丮FC妗嗘灦紼嬪簭鐨勮В鍐蟲柟妗圱est錛屽湪Test.h涓湅鍒頒互涓嬪唴瀹癸細 <code> <p>class Ctest_mfcApp : public CWinApp<br>{<br>public:<br>    Ctest_mfcApp(); <p>// 閲嶅啓<br>public:<br>    virtual BOOL InitInstance(); <p>// 瀹炵幇<br>    afx_msg void OnAppAbout();<br>    DECLARE_MESSAGE_MAP()<br>}; <p> </code></p> <p>鍏朵腑錛屾渶绱ц鐨勫氨鏄?code>DECLARE_MESSAGE_MAP()</code>榪欎釜瀹忥紝鐩稿叧鍐呭灞曞紑濡備笅錛?<code> <p>struct AFX_MSGMAP_ENTRY<br>{<br>    UINT nMessage;   // windows message<br>    UINT nCode;      // control code or WM_NOTIFY code<br>    UINT nID;        // control ID (or 0 for windows messages)<br>    UINT nLastID;    // used for entries specifying a range of control id's<br>    UINT_PTR nSig;   // signature type (action) or pointer to message #<br>    AFX_PMSG pfn;    // routine to call (or special value)<br>}; <p>struct AFX_MSGMAP<br>{<br>    const AFX_MSGMAP* (PASCAL* pfnGetBaseMap)();<br>    const AFX_MSGMAP_ENTRY* lpEntries;<br>}; <p>#define DECLARE_MESSAGE_MAP() \<br>protected: \<br>    static const AFX_MSGMAP* PASCAL GetThisMessageMap(); \<br>    virtual const AFX_MSGMAP* GetMessageMap() const; \</code> <p>鍏朵腑<code>AFX_PMSG</code>涓嶅啀瑙f瀽涓嬪幓錛屾垜浠涓鴻繖鏄竴涓寚鍚戠壒瀹氭秷鎭搴旂殑瀹炵幇鍑芥暟鐨勫嚱鏁版寚閽堬紝榪欏嚑涓畯鐨勪綔鐢ㄥ彲綆鍗曠悊瑙f垚涓篢est榪欎釜欏圭洰瀹氫箟浜嗕竴涓潤鎬佺殑娑堟伅鏄犲皠琛ㄣ傚綋娑堟伅鍒版潵鏃訛紝浠庢秷鎭槦鍒椾腑寮瑰嚭娑堟伅騫跺垎鍙戝埌鍏鋒湁鍏ュ彛瀹炵幇鐨勪笂灞侰Wnd媧劇敓紿楀彛銆傜敤鎴峰彧闇瑕佹敞鍐屾秷鎭紝瀹炵幇娑堟伅鍏ュ彛鍑芥暟灝卞浜嗭紝榪欏湪MFC涓竴鑸斁鍦?cpp鏂囦歡澶撮儴銆俆est.cpp涓ご閮ㄦ湁浠ヤ笅鍐呭錛?<code> <p>BEGIN_MESSAGE_MAP(CTest, CWinApp)<br>    ON_COMMAND(ID_APP_ABOUT, &CTest::OnAppAbout)<br>    // 鍩轟簬鏂囦歡鐨勬爣鍑嗘枃妗e懡浠?br>    ON_COMMAND(ID_FILE_NEW, &CWinApp::OnFileNew)<br>    ON_COMMAND(ID_FILE_OPEN, &CWinApp::OnFileOpen)<br>    // 鏍囧噯鎵撳嵃璁劇疆鍛戒護<br>    ON_COMMAND(ID_FILE_PRINT_SETUP, &CWinApp::OnFilePrintSetup)<br>END_MESSAGE_MAP()</code> <p>榪欓噷鏄負娑堟伅鏋氫婦鍊間笌娑堟伅瀹炵幇鍑芥暟寤虹珛鏄犲皠錛屽叾涓秹鍙婂埌鐨勫畯鐨勫睍寮濡備笅錛?/p><code> <p>#define ON_COMMAND(id, memberFxn) \<br>    { WM_COMMAND, CN_COMMAND, (WORD)id, (WORD)id, AfxSigCmd_v, \<br>        static_cast<AFX_PMSG> (memberFxn) }, <p>#define BEGIN_MESSAGE_MAP(theClass, baseClass) \<br>    PTM_WARNING_DISABLE \<br>    const AFX_MSGMAP* theClass::GetMessageMap() const \<br>        { return GetThisMessageMap(); } \<br>    const AFX_MSGMAP* PASCAL theClass::GetThisMessageMap() \<br>    { \<br>        typedef theClass ThisClass;                           \<br>        typedef baseClass TheBaseClass;                       \<br>        static const AFX_MSGMAP_ENTRY _messageEntries[] =  \<br>        { <p>#define END_MESSAGE_MAP() \<br>        {0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } \<br>    }; \<br>        static const AFX_MSGMAP messageMap = \<br>        { &TheBaseClass::GetThisMessageMap, &_messageEntries[0] }; \<br>        return &messageMap; \<br>    }                                  \<br>    PTM_WARNING_RESTORE <p></code>鎸夌収涓婅堪鎬濊礬寰楀埌鐨勭浉浼間唬鐮佸涓嬶細</p><code> <p>// Test.h<br>typedef void (* funCall)(void*);        // 娑堟伅鎵ц鍑芥暟綾誨瀷 <p>struct tagMsgEntry                      // 娑堟伅鍏ュ彛緇撴瀯<br>{<br>    int            nMsgType;            // 娑堟伅綾誨瀷<br>    funCall        MsgRun;              // 娑堟伅鎵ц鍑芥暟<br>}; <p>struct tagMsgMap                        // 娑堟伅鏄犲皠琛ㄧ粨鏋?br>{<br>    const tagMsgMap* (__stdcall* funGetBaseMsgMap)();<br>    const tagMsgEntry* pMsgEntries;     // 娑堟伅鍏ュ彛闆?br>}; <p>class CMessage<br>{<br>    // ...<br>protected:<br>    static const tagMsgMap* __stdcall GetThisMsgMap();<br>    virtual const tagMsgMap* GetMsgMap() const;<br>}; <p>// Test.cpp<br>const tagMsgMap* CMessage::GetMsgMap() const<br>{<br>    return GetThisMsgMap();<br>} <p>const tagMsgMap* __stdcall CMessage::GetThisMsgMap()<br>{<br>    static const tagMsgEntry MsgEntries[] =<br>    {<br>        { MSG_SOME_ONE, SomeOneFunc },<br>        { MSG_SOME_TWO, SomeTwoFunc },<br>        { MSG_NULL, NULL }<br>    };<br>    static const tagMsgMap msgMap =<br>    {<br>        &CBaseMessage::GetThisMsgMap,    // 鐖剁被娑堟伅鏄犲皠琛?br>        &MsgEntries[0]<br>    };<br>    return &msgMap;<br>} </p> <p>int CMessage::MsgProc(int nMsgType)<br>{<br>    switch( nMsgType )<br>    {<br>    case MSG_SOME_ONE:<br>        { <p>        }<br>        break;<br>    }<br>    return CBaseMessage::MsgProc(nMsgType);<br>}</code> <p>榪欑澶勭悊鐨勪紭鐐瑰湪浜庯紝瀛愮被娌℃湁瀹氫箟鐨勬秷鎭疄鐜版帴鍙o紝鍙互浣跨敤鐖剁被鎺ュ彛瀹炵幇銆備笉榪囧湪鐜板湪鐨勬秷鎭鐞嗕腑錛屾垜浠竴鑸笉闇瑕佺敱鍩虹被鏉ュ畬鎴愶紝鍥犳鍙互涓嶄緷璧栧熀綾繪帴鍙o紝浣跨敤瀹忓彲浠ヤ嬌浠g爜鐪嬩笂鍘繪洿鍔犵畝媧併? <p>___________________________________________________________ <p>綆鍖栫増鏈殑娑堟伅鏄犲皠閲囩敤浠ヤ笅鏂瑰紡錛岀畝鍗曟竻鏅幫細<code> <p>// Test.h<br>#define REG_MSG_FUNC(nMsgType, MsgFunc) \<br>    CMessge::RegisterCallFunc(nMsgType, MsgFunc); \ <p>typedef void (* function)(void*); <p>typedef std::map<int, function> MSG_MAP;<br>typedef MSG_MAP::const_iterator MSG_CITR; <p>class CMessage<br>{<br>    // ...<br>public:<br>    static const MSG_MAP& GetMsgMap();<br>    static void RegisterCallFunc(int nMsgType, void(* Func)(void *))<br>    {<br>        s_MsgMap[nMsgType] = Func;<br>    } <p>    int CMessage::Run(int nMsgType)                // 娑堟伅鍏敤鎵ц鍑芥暟<br>    {<br>        MSG_ITR itr = s_MsgMap.find(nMsgType);<br>        if( s_MsgMap.end() != itr )<br>        {<br>            itr->second(this);<br>        }<br>    } <p>protected:<br>    static MSG_MAP            s_MsgMap;            // 娑堟伅鏄犲皠琛?br>}; <p>// UserTest.cpp -- 鐢ㄦ埛鍦ㄤ嬌鐢ㄦ椂瀵硅嚜宸卞叧蹇冪殑娑堟伅浜堜互娉ㄥ唽, 鍏ュ彛鍑芥暟浜堜互瀹炵幇鍗沖彲<br>REG_MSG_FUNC(MSG_SOME_ONE, SomeOneFunc) <p>void SomeOneFunc(CBaseMessage *pMsg)<br>{<br>    return;<br>}</code> <p>___________________________________________________________ <p>鏈榪戝繖鐨勭劍澶寸儌棰濓紝姝eソ鍐欏埌娑堟伅錛岀◢寰暣鐞嗕竴涓嬶紝鎻愪緵浜涜鍊熼壌銆?/p><img src ="http://www.shnenglu.com/Fox/aggbug/63056.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Fox/" target="_blank">Fox</a> 2008-09-29 18:34 <a href="http://www.shnenglu.com/Fox/archive/2008/09/29/63056.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍐嶈鯨鍚屾/寮傛涓庨樆濉?闈為樆濉?/title><link>http://www.shnenglu.com/Fox/archive/2008/09/11/61555.html</link><dc:creator>Fox</dc:creator><author>Fox</author><pubDate>Wed, 10 Sep 2008 17:11:00 GMT</pubDate><guid>http://www.shnenglu.com/Fox/archive/2008/09/11/61555.html</guid><wfw:comment>http://www.shnenglu.com/Fox/comments/61555.html</wfw:comment><comments>http://www.shnenglu.com/Fox/archive/2008/09/11/61555.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.shnenglu.com/Fox/comments/commentRss/61555.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Fox/services/trackbacks/61555.html</trackback:ping><description><![CDATA[<p>緗戠粶緙栫▼瀛︿範鍜屽疄璺電殑榪囩▼涓紝<strong>鍚屾錛坰ynchronous錛?寮傛錛坅synchronous錛?/strong>涓?strong>闃誨錛坆locking錛?闈為樆濉烇紙non-blocking錛?/strong>鎬繪槸浼氳糠鎯戝緢澶氫漢銆備緷鐒惰寰楁垜鍗婂勾涔嬪墠鍦?a title="MMORPG緗戠粶妯″瀷鍓栨瀽——IOCP綃? href="http://www.shnenglu.com/Fox/archive/2008/03/06/mmorpg_net_iocp.html" target="_blank">璁拌堪IOCP</a>鏃訛紝涓鍙ヤ笉緇忔剰鐨勨?strong>闈為樆濉濱/O鍒欐槸鑷村姏浜庢彁渚涢珮鏁堢殑寮傛I/O</strong>鈥濅究寮曟潵涓鐣彛姘磋浜夈?/p> <p>浠婂ぉ鍦ㄦ煡涓浜涜祫鏂欑殑鏃跺欙紝鐪嬪埌鍏充簬榪欏嚑涓瘝鐨勮杈╃珶涓嶆槸涓鑸殑澶氾紝緇嗙粏鎯蟲潵錛岃繖涓棶棰樹技涔庝篃紜疄鏈夎В閲婄殑蹇呰錛屼笉鍦ㄤ簬浜夎瀵歸敊錛岃屽湪浜庤鯨鏄庢槸闈炪?/p> <p>璁ㄨ涔嬪墠錛屽厛闄愬畾璁ㄨ鐨勮寖鍥達細<strong>姝ゅ涔嬪悓姝?寮傛浠呴檺浜嶪/O鎿嶄綔</strong>錛屼笌OS鎵璁ㄨ鐨勮繘紼?綰跨▼涓殑<strong>鍏朵粬鍚屾/寮傛</strong>娌℃湁鐩存帴鍏崇郴錛涜璁虹殑鍐呭鏄細<strong>涓ゅ鐩鎬技鐨勬湳璇箣闂寸殑鍖哄埆鍒板簳鏈夊澶?/strong>銆?/p> <ul> <li><strong>闈炲父澶э細</strong></li></ul> <p>Douglas C. Schmidt鍦ㄣ奀++緗戠粶緙栫▼銆嬩腑榪欐牱璇村埌錛?/p> <p>They are very different, as follows:</p> <p>AIO is "asynchronous I/O", i.e., the operation is invoked asynchronously and control returns to the client while the OS kernel processes the I/O request.  When the operation completes there is some mechanism for the client to retrieve the results.</p> <p>Non-blocking I/O tries an operation (such as a read() or write()) and if it the operation would block (e.g., due to flow control on a TCP connection or due to lack of data in a socket), the call returns -1 and sets errno to EWOULDBLOCK.</p> <p>緲昏瘧濡備笅錛?/p> <p><a title="寮傛I/O" target="_blank" rel="tag">寮傛I/O</a>錛氫緥濡傦紝鎿嶄綔琚紓姝ヨ皟鐢ㄦ椂錛屾帶鍒舵潈浜ょ粰瀹㈡埛绔紝I/O鎿嶄綔璇鋒眰鍒欎氦鐢辨搷浣滅郴緇熷唴鏍稿鐞嗭紝褰撴搷浣滃畬鎴愬悗錛岄氳繃鏌愮鏈哄埗灝嗙粨鏋滈氱煡瀹㈡埛绔?/p> <p>闈為樆濉濱/O錛氬皾璇曡皟鐢ㄦ煇鎿嶄綔錛屽鏋滄搷浣滆闃誨錛屽垯璋冪敤榪斿洖-1騫剁疆閿欒鍊間負EWOULDBLOCK銆?/p> <p>浠庤繖涓ゆ鈥渧ery different鈥濈殑瑙i噴鏉ョ湅錛屾垜鐨勬劅瑙夋槸騫舵病鏈夋寚鍑轟簩鑰呯殑鍖哄埆錛屽洜涓烘垜浠棤娉曠‘瀹氭墍璋揂IO鏄浣曞鐞嗙殑錛屽鏋淎IO鐩存帴鈥滆皟鐢ㄨ繑鍥?1騫剁疆閿欒鍊間負EWOULDBLOCK鈥濓紝瀹炵幇鈥滄帶鍒舵潈浜ょ粰瀹㈡埛绔濓紝浼間箮騫舵棤浠諱綍涓嶅Ε銆傚喌涓旓紝瀵逛簬闈為樆濉濱/O錛屾垜浠篃闇瑕佲滃綋鎿嶄綔瀹屾垚鍚庯紝閫氳繃鏌愮鏈哄埗灝嗙粨鏋滈氱煡瀹㈡埛绔濊繖鏍風殑澶勭悊銆?/p> <ul> <li><strong>鏃犲樊鍒細</strong></li></ul> <p>鑰屽湪<a title="Wikipedia" target="_blank">Wikipedia</a>涓婂垯鐩存帴絳夊悓浜岃咃細<b>Asynchronous I/O</b>, or <b>non-blocking I/O</b>, is a form of <a title="I/O" target="_blank">input/output</a> processing that permits other processing to continue before the transmission has finished.</p> <p>褰撶劧錛屽浜巖ecv鍜宻end錛屾垜浠竴鑸細璇翠粬浠槸<strong>闃誨</strong>璧風殑錛岃屼笉浼氳浠栦滑鏄?strong>鍚屾</strong>璧風殑錛屼絾榪欐樉鐒朵笉鏄簩鑰呯殑鍖哄埆錛屽洜涓烘垜浠兘鐭ラ亾錛?strong>闃誨鐨勫師鍥犳鏄瓑寰呭悓姝ョ粨鏋滅殑榪斿洖</strong>銆?/p> <p>鍥犳錛屼簩鑰呯殑鍖哄埆鍦ㄤ簬錛?strong>闃誨/闈為樆濉炴槸琛ㄧ幇錛屽悓姝?寮傛鏄師鍥?/strong>錛屾垜浠鏌愭煇鎿嶄綔鏄樆濉炶搗鐨勶紝鎴栬呮煇鏌愮嚎紼嬫槸闃誨璧風殑錛屾槸鍥犱負鍦ㄧ瓑寰呮搷浣滅粨鏋滅殑鍚屾榪斿洖錛涙垜浠鏌愭煇鎿嶄綔鏄潪闃誨鐨勶紝鏄洜涓烘搷浣滅粨鏋滀細閫氳繃寮傛鏂瑰紡榪斿洖銆?/p> <p>璁ㄨ鍒拌繖鍎匡紝鍐嶅挰鏂囧毤瀛楃殑浜夎京涓嬪幓浼間箮宸茬粡娌℃湁浠諱綍瀹為檯鎰忎箟銆?/p> <p>------------------------------------------------------------</p> <p>PS錛氱籂緇撲竴浜涘繀瑕佺殑姒傚康鏄負浜嗗姞娣辯悊瑙o紝澶繃綰犵粨浜嗗弽鍊掍細婊炲鐞嗚В銆傛垜涔嬪墠瀵逛簬鍏舵蹇典篃騫墮潪鐗瑰埆娓呮錛屾墍浠ユ墠浼氬啀緇竴綃囩壒鎰忚█鏄庯紝涔熺畻寮ヨˉ涓涓嬭嚜宸辯殑榪囧け銆?/p><img src ="http://www.shnenglu.com/Fox/aggbug/61555.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Fox/" target="_blank">Fox</a> 2008-09-11 01:11 <a href="http://www.shnenglu.com/Fox/archive/2008/09/11/61555.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>璁捐妯″紡錛堜竴錛?/title><link>http://www.shnenglu.com/Fox/archive/2008/08/06/58154.html</link><dc:creator>Fox</dc:creator><author>Fox</author><pubDate>Wed, 06 Aug 2008 07:43:00 GMT</pubDate><guid>http://www.shnenglu.com/Fox/archive/2008/08/06/58154.html</guid><wfw:comment>http://www.shnenglu.com/Fox/comments/58154.html</wfw:comment><comments>http://www.shnenglu.com/Fox/archive/2008/08/06/58154.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.shnenglu.com/Fox/comments/commentRss/58154.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Fox/services/trackbacks/58154.html</trackback:ping><description><![CDATA[<p><strong><font color=#800000>0. Introduction</font></strong></p> <p>鎺ヨЕ璁捐妯″紡鏈変袱騫存椂闂翠簡錛屼絾涓鐩存病鏈夌郴緇熸暣鐞嗚繃錛屼負浜嗕笉鑷充簬璁╄嚜宸辯殑鎬濈淮琚箒鐞愮殑宸ヤ綔涓鐐圭偣紱侀敘錛岃繕鏄喅瀹氭葷粨涓涓嬶紝涓轟簡鑳藉鐪熸鍋氬埌鏈夋墍鏀惰幏錛屾暣涓郴鍒椾細鎸夌収<a title="Gang of Four" target=_blank>GoF鐨凞esign Patterns: Elements of Reusable Object-Oriented Software</a>鐨勮鏂囨濊礬錛屼絾涓嶄細鐓ф湰瀹g灝辨槸浜嗭紝<a title=Wikipedia target=_blank>Wikipedia</a>涓婂叧浜?3縐嶈璁℃ā寮忕殑浠嬬粛闈炲父鍏ㄩ潰錛孋SDN涓婁篃鍙互涓嬭澆涓?鑻辨枃鐢靛瓙妗o紝鍥犳寰堝濂楄瘽銆佺被鍥句竴姒傜渷鍘匯?/p> <p>鏈鏃╂帴瑙﹁璁℃ā寮忕殑鏃跺欙紝闅懼厤琚悇縐嶆ā寮忕殑鑱旂郴鍜屽尯鍒墍鍥版壈錛屼粠鏁欑涔︾殑鍒嗘瀽鍙互寰楀埌妯″紡涔嬮棿褰㈠紡涓婄殑涓嶅悓銆備絾榪欐牱瀵逛簬棰嗕細璁捐妯″紡鎰忎箟涓嶅ぇ錛屽洜涓烘垜浠帉鎻℃ā寮忕殑鐩殑鏄負浜嗚瀺浼氳瘡閫氾紝鐏墊椿榪愮敤錛屼互瀵瑰紑鍙戞湁鎵甯姪銆?/p> <p>紼嶅井鎴愯妯$殑OO紼嬪簭錛屼細鏈夊ぇ閲忓璞★紝鍏朵腑寰堝瀹炰綋瀵硅薄涔嬮棿瀛樺湪鐫<strong>鐖跺瓙銆佸厔寮?/strong>鍏崇郴錛屽璞$殑<strong>鍒涘緩</strong>鎻愬崌涓轟竴縐嶆ā寮忋傚叾濂藉鍦ㄤ簬璁捐妯″紡鏈韓鎵瀹gО鐨?strong>reusable</strong>錛岃繖灝卞儚鍫嗙Н鏈ㄧ洊鎴垮瓙涓鏍鳳紝鍫嗙殑濂界殑鎯呭喌涓嬶紝鎹竴鎹㈤棬紿椾究鏄彟涓鐣鏅?/p> <p>鍏充簬瀹炵幇錛屾垜涓嶄細涓轟簡鍘樻竻妯″紡闂寸殑鍖哄埆鑰屽埢鎰忎嬌鐢ㄧ浉浼間唬鐮佸疄鐜幫紝鐩稿弽錛屾垜浼氭牴鎹ā寮忔湰韜殑閫傜敤鎯呭喌涓句緥錛岃屼笖澶ч噺浠g爜鍩轟簬<a title=http://sourcemaking.com/design_patterns target=_blank>SourceMaking</a>銆?/p> <p>_______________________________</p> <p><strong><font color=#800000>1. Creational Design Patterns(DP)</font></strong></p> <p>鍒涘緩鍨婦P鎶借薄浜嗙被鍜屽璞$殑鍒涘緩榪囩▼錛?a title="Gang of Four" target=_blank>GoF</a>緇欏嚭浜?縐?strong>鍒涘緩鍨婦P</strong>錛?strong>Abstract Factory</strong>銆?strong>Builder</strong>銆?strong>Factory Method</strong>銆?strong>Builder</strong>銆?strong>Prototype</strong>銆?strong>Singleton</strong>銆?/p> <p><strong><font color=#800000>2. Abstract Factory</font></strong></p> <p><strong>鎰忓浘錛氭彁渚涗竴涓垱寤轟竴緋誨垪鐩稿叧鎴栫浉浜掍緷璧栧璞$殑鎺ュ彛錛岃屾棤闇鎸囧畾瀹冧滑鍏蜂綋鐨勭被銆?/strong></p> <p>1) 鍙彁渚涗簡涓涓垱寤烘帴鍙o紝鍏惰繑鍥炲間負鍏蜂綋浜у搧錛氬<code>AbstractProduct *Client::CreateProduct(AbstractFactory &factory);</code></p> <p>2) 鎺ュ彛鐨勫弬鏁版槸涓涓?strong>宸ュ巶瀵硅薄</strong>錛?code>AbstractFactory &factory</code>錛夌殑寮曠敤錛屽弬鏁扮被鍨嬶紙<code>AbstractFactory</code>錛変負鎶借薄鍩虹被錛岃皟鐢ㄦ椂鏍規嵁闇瑕佷紶鍏ュ叿浣撳伐鍘傚璞″嵆鍙紱</p> <p>3) 鎺ュ彛鍐呴儴瀹炵幇浜?strong>涓緋誨垪鐩稿叧鎴栫浉浜掍緷璧栧璞?/strong>錛堟娊璞′駭鍝侊級鐨勫垱寤猴細褰撲紶鍏ュ叿浣撳伐鍘傛椂錛屾帴鍙e疄鐜扮殑灝辨槸<strong>涓緋誨垪鍏蜂綋浜у搧</strong>鐨勫垱寤猴紱</p> <p>4) 鍒涘緩鐨勪駭鍝?strong>绔嬪嵆榪斿洖</strong>錛?code>CreateProduct</code>錛夈?/p> <p><strong>鍙備笌鑰咃細</strong></p> <p>• AbstractFactory<br>鈥?澹版槑涓涓垱寤烘娊璞′駭鍝佸璞$殑鎿嶄綔鎺ュ彛銆?/p> <p>• ConcreteFactory<br>鈥?瀹炵幇鍒涘緩鍏蜂綋浜у搧瀵硅薄鐨勬搷浣溿?/p> <p>• AbstractProduct<br>鈥?涓轟竴綾諱駭鍝佸璞″0鏄庝竴涓帴鍙c?/p> <p>• ConcreteProduct<br>鈥?瀹氫箟涓涓皢琚浉搴旂殑鍏蜂綋宸ュ巶鍒涘緩鐨勪駭鍝佸璞°?br>鈥?瀹炵幇AbstractProduct鎺ュ彛銆?/p> <p>• Client<br>鈥?浠呬嬌鐢ㄧ敱AbstractFactory鍜孉bstractProduct綾誨0鏄庣殑鎺ュ彛銆?/p> <p><strong>浠g爜錛?/strong></p> <code> <p>class AbstractFactory<br>{<br>public:<br>    virtual AbstractProduct *MakePartA() = 0;<br>    virtual AbstractProduct *MakePartB() = 0;<br>    virtual AbstractProduct *MakePartC() = 0;<br>    virtual AbstractProduct *AddPart(const AbstractProduct *pPart) = 0;<br>}; <p>AbstractProduct *Client::CreateProduct(AbstractFactory &factory)<br>{<br>    AbstractProduct *pProduct = factory.CreateProduct();<br>    AbstractProduct *pPartA = factory.MakePartA();<br>    AbstractProduct *pPartB = factory.MakePartB();<br>    AbstractProduct *pPartC = factory.MakePartC();<br>    factory.AddPart(pPartA);<br>    factory.AddPart(pPartB);<br>    factory.AddPart(pPartC);<br>    return pProduct;<br>} </p> <p>int main(void)<br>{<br>    Client client;            <br>    ConcreteFactory factory;<br>    client.CreateProduct(factory);<br>    return 0;<br>}</code> <p><strong><font color=#800000>3. Builder</font></strong></p> <p><strong>鎰忓浘錛氬皢涓涓鏉傚璞$殑鏋勫緩涓庡畠鐨勮〃紺哄垎紱伙紝浣垮緱鍚屾牱鐨勬瀯寤鴻繃紼嬪彲浠ュ垱寤轟笉鍚岀殑琛ㄧず銆?/strong></p> <p>1) director鎻愪緵鎶借薄浜у搧鍒涘緩鎺ュ彛錛氬<code>void Director::Construct();</code></p> <p>2) 涓嶅悓浜у搧浣跨敤<strong>鍚屼竴鍒涘緩榪囩▼</strong>錛岀敱director鎸囧畾鐗瑰畾builder浠ョ敓浜т笉鍚屼駭鍝侊紱</p> <p>3) 鎺ュ彛鍐呴儴瀹炵幇浜?strong>涓涓鏉傚璞?/strong>錛堟娊璞′駭鍝侊級鐨勫垱寤猴細褰撲紶鍏ュ叿浣撳伐鍘傛椂錛屾帴鍙e疄鐜扮殑鏄?strong>涓涓鏉傜殑鍏蜂綋浜у搧</strong>鐨勫垱寤猴紱</p> <p>4) 鍒涘緩鐨勪駭鍝?strong>騫朵笉绔嬪嵆榪斿洖</strong>錛?strong>鍒涘緩瀹屾瘯</strong>鍚庤繑鍥烇紝鎴?strong>浣跨敤鎺ュ彛</strong>錛?code>GetProduct</code>錛夋彁鍙栫粨鏋溿?/p> <p><strong>鍙備笌鑰咃細</strong></p> <p>• Builder<br>鈥?涓哄垱寤轟竴涓狿roduct瀵硅薄鐨勫悇涓儴浠舵寚瀹氭娊璞℃帴鍙c?/p> <p>• ConcreteBuilder<br>鈥?瀹炵幇Builder鐨勬帴鍙d互鏋勯犲拰瑁呴厤璇ヤ駭鍝佺殑鍚勪釜閮ㄤ歡銆?br>鈥?瀹氫箟騫舵槑紜畠鎵鍒涘緩鐨勮〃紺恒?br>鈥?鎻愪緵涓涓绱駭鍝佺殑鎺ュ彛銆?/p> <p>• Director<br>鈥?鏋勯犱竴涓嬌鐢˙uilder鎺ュ彛鐨勫璞°?/p> <p>• Product<br>鈥?琛ㄧず琚瀯閫犵殑澶嶆潅瀵硅薄銆侰oncreteBuilder鍒涘緩璇ヤ駭鍝佺殑鍐呴儴琛ㄧず騫跺畾涔夊畠鐨勮閰嶈繃紼嬨?br>鈥?鍖呭惈瀹氫箟緇勬垚閮ㄤ歡鐨勭被錛屽寘鎷皢榪欎簺閮ㄤ歡瑁呴厤鎴愭渶緇堜駭鍝佺殑鎺ュ彛銆?/p> <p><strong>浠g爜錛?/strong></p> <code> <p>class Builder<br>{<br>public:<br>    virtual void MakePartA() = 0;<br>    virtual void MakePartB() = 0;<br>    virtual void MakePartC() = 0; <p>    Product *GetProduct()    { return _product; } <p>protected:<br>    Product *_product;<br>}; <p>class Director<br>{<br>public:<br>    void setBuilder(Builder *b)    { _builder = b; }<br>    void Construct(); <p>private:<br>    Builder *_builder;<br>}; <p>void Director::Construct()<br>{<br>    _builder.MakePartA();<br>    _builder.MakePartB();<br>    _builder.MakePartC();<br>} <p>int main(void) {<br>    ConcreteBuilderA concreteBuilderA;<br>    ConcreteBuilderB concreteBuilderB;<br>    Director director;<br>    Product *pProduct; <p>    director.SetBuilder(&concreteBuilderA);<br>    director.Construct();<br>    pProduct = concreteBuilderA.GetProduct();<br>    pProduct->Show(); <p>    director.SetBuilder(&concreteBuilderB);<br>    director.Construct();<br>    pProduct = concreteBuilderB.GetProduct();<br>    pProduct->Show(); <p>    return 0;<br></code>}</p> <p><strong><font color=#800000>4. Factory Method</font></strong></p> <p><strong>鎰忓浘錛氬畾涔変竴涓敤浜庡垱寤哄璞$殑鎺ュ彛錛岃瀛愮被鍐沖畾瀹炰緥鍖栧摢涓涓被銆侳actory Method浣夸竴涓被鐨勫疄渚嬪寲寤惰繜鍒板叾瀛愮被銆?/strong></p> <p>1) 鐪嬪緱鍑鴻妯″紡鍏跺疄灝辨槸<strong>C++鐨勫鎬佺壒鎬?/strong>錛屽?strong>緇ф壙</strong>瀹炵幇銆傚洜姝わ紝鍏跺埆鍚嶄負<strong>铏氭瀯閫犲櫒錛?Virtual Constructor錛?/strong>錛?/p> <p>2) 浣滀負妯″紡涓嶤++澶氭佺壒鎬т笉鍚岀殑鏄紝Creator鍙互瀹氫箟<strong>宸ュ巶鏂規硶鐨勭己鐪佸疄鐜?/strong>錛屽畬鎴愮己鐪佹搷浣滐紝MFC澶ч噺浣跨敤浜嗚繖涓鎬濇兂銆?/p> <p><strong>鍙備笌鑰咃細</strong></p> <p>• Product<br>鈥?瀹氫箟宸ュ巶鏂規硶鎵鍒涘緩鐨勫璞$殑鎺ュ彛銆?/p> <p>• ConcreteProduct<br>鈥?瀹炵幇Product鎺ュ彛銆?/p> <p>• Creator<br>鈥?澹版槑宸ュ巶鏂規硶錛岃鏂規硶榪斿洖涓涓狿roduct綾誨瀷鐨勫璞°侰reator涔熷彲浠ュ畾涔変竴涓伐鍘傛柟娉曠殑緙虹渷瀹炵幇錛屽畠榪斿洖涓涓己鐪佺殑ConcreteProduct瀵硅薄銆?br>鈥?鍙互璋冪敤宸ュ巶鏂規硶浠ュ垱寤轟竴涓狿roduct瀵硅薄銆?/p> <p>• ConcreteCreator<br>鈥?閲嶅畾涔夊伐鍘傛柟娉曚互榪斿洖涓涓狢oncreteProduct瀹炰緥銆?/p> <p><strong>浠g爜錛?/strong></p> <p><code>ConcreteProduct *ConcreteCreator::FactoryMethod()<br>{<br>    <code>ConcreteProduct</code> *pProduct = new <code>ConcreteProduct</code>;<br>    return pProduct;<br>}</code></p> <p><code>Product *Creator::FactoryMethod()<br>{<br>    Product *pProduct = new Product;<br>    return pProduct;<br>} </p> <p>int main(void) {<br>    Creator creator;<br>    ConcreteProduct *pProduct; <p>    pProduct = creator.FactoryMethod();<br>    pProduct->Show(); <p>    return 0;<br>}</code> <p><strong><font color=#800000>5. Prototype</font></strong></p> <p><strong>鎰忓浘錛氱敤鍘熷瀷瀹炰緥鎸囧畾鍒涘緩瀵硅薄鐨勭綾伙紝騫朵笖閫氳繃鎷瘋礉榪欎簺鍘熷瀷鍒涘緩鏂扮殑瀵硅薄銆?/strong></p> <p>1) 鍒涘緩涓嶅啀閫氳繃宸ュ巶鏂扮被<strong>緇ф壙錛坕nheritance錛?/strong>錛岃屾槸閫氳繃<strong>濮旀墭錛坉elegation錛?/strong>錛?/p> <p>2) 鏍歸?strong>鎷瘋礉鍘熷瀷瀹炰緥</strong>鍒涘緩鏂板璞°?/p> <p><strong>鍙備笌鑰咃細</strong></p> <p>• ProtoType<br>鈥?澹版槑涓涓厠闅嗚嚜韜殑鎺ュ彛銆?/p> <p>• ConcreteProtoType<br>鈥?瀹炵幇涓涓厠闅嗚嚜韜殑鎿嶄綔銆?/p> <p>• Client<br>鈥?璁╀竴涓師鍨嬪厠闅嗚嚜韜粠鑰屽垱寤轟竴涓柊鐨勫璞°?/p> <p><strong>浠g爜錛?/strong></p> <code> <p>class ProtoType<br>{<br>public:<br>    virtual void Draw();<br>    virtual ProtoType *Clone() = 0;<br>    virtual void Initialize();<br>}; <p>class ProtoTypeA: public ProtoType<br>{<br>public:<br>    virtual ProtoType *Clone()<br>    {<br>        return new ProtoTypeA;<br>    }<br>}; <p>class ProtoTypeB: public ProtoType<br>{ <br>public:<br>    virtual ProtoType *Clone()<br>    {<br>        return new ProtoTypeB;<br>    }<br>}; <p>class Client<br>{<br>public:<br>    static ProtoType *Clone( int choice ); <p>private:<br>    static ProtoType *s_prototypes[3];<br>}; <p>ProtoType* Client::s_prototypes[] = { 0, new ProtoTypeA, new ProtoTypeB }; <p>ProtoType *Client::Clone(int choice)<br>{<br>    return s_prototypes[choice]->Clone();<br>}</code> <p> </p> <p><strong><font color=#800000>6. Singleton</font></strong></p> <p><strong>鎰忓浘錛氫繚璇佷竴涓被浠呮湁涓涓疄渚嬶紝騫舵彁渚涗竴涓闂畠鐨勫叏灞璁塊棶鐐廣?/strong></p> <p>1) 鐢?strong>闈欐佹垚鍛樺嚱鏁?/strong>淇濊瘉涓婅堪鎰忓浘銆?/p> <p><strong>鍙備笌鑰咃細</strong></p> <p>• Singleton<br>鈥?瀹氫箟涓涓狪nstance鎿嶄綔錛屽厑璁稿鎴瘋闂畠鐨勫敮涓瀹炰緥銆侷nstance鏄竴涓被鎿嶄綔錛堝嵆C++涓殑涓涓潤鎬佹垚鍛樺嚱鏁幫級銆?br>鈥?鍙兘璐熻矗鍒涘緩瀹冭嚜宸辯殑鍞竴瀹炰緥銆?/p> <p> </p> <p><strong>浠g爜錛?/strong></p> <code> <p>class Singleton<br>{<br>public:<br>    static Singleton *GetInstance()<br>    {<br>        if (!s_instance)<br>            s_instance = new Singleton;<br>        return s_instance;<br>    } <p>    void Run()    {} <p>private:<br>    static Singleton *s_instance;<br>    Singleton()    {}                // Singleton cannot be created outside.<br>}; <p>Singleton *GetSingleton(void)<br>{<br>    return Singleton::GetInstance();<br>} <p>int main(void)<br>{<br>    GetSingleton()->Run(); <p>    return 0;<br>}</p> </code> <p>______________________________________________</p> <p>浠g爜鍐欑殑閮芥瘮杈冪畝鍗曪紝鍩烘湰鍙互灝嗗悇縐嶆ā寮忎箣闂寸殑涓嶅悓浣撶幇鍑烘潵浜嗐?/p><img src ="http://www.shnenglu.com/Fox/aggbug/58154.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Fox/" target="_blank">Fox</a> 2008-08-06 15:43 <a href="http://www.shnenglu.com/Fox/archive/2008/08/06/58154.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Big-endian璁板繂錛堥檮闂叉壇錛?/title><link>http://www.shnenglu.com/Fox/archive/2008/07/30/57508.html</link><dc:creator>Fox</dc:creator><author>Fox</author><pubDate>Wed, 30 Jul 2008 06:48:00 GMT</pubDate><guid>http://www.shnenglu.com/Fox/archive/2008/07/30/57508.html</guid><wfw:comment>http://www.shnenglu.com/Fox/comments/57508.html</wfw:comment><comments>http://www.shnenglu.com/Fox/archive/2008/07/30/57508.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.shnenglu.com/Fox/comments/commentRss/57508.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Fox/services/trackbacks/57508.html</trackback:ping><description><![CDATA[<p><strong><font color="#800000">涓銆丅ig-endian & Little-endian</font></strong></p> <p>榪樻槸<a title="Wikipedia" target="_blank">Wikipedia</a>濂藉晩錛佸彲鎯滀腑鏂囩殑鍥藉唴鐪嬩笉浜嗭紝鎰氭槯鍟婏紒瀹炲湪瑙夊緱涓枃鏈夌偣闅炬噦錛岀湅鐪?a title="Wikipedia 鏃ユ湰璇増鏈? target="_blank">鏃ユ湰璇増鏈?/a>鍚?D錛?/p> <p>鍏充簬<strong>绔紙endianness錛?/strong>鐨勪粙緇嶏紝<a title="Wikipedia" target="_blank">Wikipedia</a>涓婃瘮杈冨叏浜嗭細<a title="http://en.wikipedia.org/wiki/Endianness" >http://en.wikipedia.org/wiki/Endianness</a></p> <p>鍏充簬<strong>緗戠粶瀛楄妭搴忥紙network byte order錛?/strong>鍜?strong>涓繪満瀛楄妭搴忥紙host byte order錛?/strong>錛岃鏉ユ尯鏃犲叧绱ц鐨勪竴鐐逛笢瑗匡紝鍥犱負姣忔鎬繪槸蹇樻帀錛屾墍浠ユ瘡嬈¢兘瑕佸ソ濂囩殑鐪嬬湅<strong>澶х錛坆ig-endian錛?/strong>鍜?strong>灝忕錛坙ittle-endian錛?/strong>銆?/p> <p>緇欏畾<code>unsigned long</code>鍨嬫暣鏁板崄鍏繘鍒跺艦寮忥細<tt>0x0A0B0C0D</tt>錛屽叾big-endian鍜宭ittle-endian褰㈠紡鍒嗗埆涓猴細</p> <p><strong>1) Big-endian</strong></p> <p><tt>Memory<br>| </tt><tt>...  |  8-bit atomic element size       </tt><tt>| </tt><tt>...    |  16-bit atomic element size</tt><br><tt>| </tt><tt>0x0A |  a                               <tt>| </tt><tt>0x0A0B |  a<br></tt></tt><tt>| </tt><tt>0x0B |  a+1                             <tt>| </tt><tt>0x0C0D |  a+</tt>1</tt><br><tt>| </tt><tt>0x0C |  a+2<br></tt><tt>| 0x0D |  a+3<br></tt><tt>| ...  |</tt></p> <p><strong>2) Little-endian錛圶86錛?/strong></p> <p><tt>Memory<br>| </tt><tt>...  |  8-bit atomic element size       </tt><tt>| </tt><tt>...    |  16-bit atomic element size</tt><br><tt>| </tt><tt>0x0D |  a                               <tt>| </tt><tt>0x0C0D |  a<br></tt></tt><tt>| </tt><tt>0x0C |  a+1                             <tt>| </tt><tt>0x0A0B |  a+</tt>1</tt><br><tt>| </tt><tt>0x0B |  a+2<br></tt><tt>| 0x0A |  a+3<br></tt><tt>| ...  |</tt></p> <p align="center"><img src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d5/Endianessmap.svg/250px-Endianessmap.svg.png"> </p> <p align="center">Mapping registers to memory locations (from Wikipedia)</p> <p>涓轟粈涔圶86瀛樺偍浼氫嬌鐢╨ittle-endian錛岃搗鍒濇垜鎯沖浜庝綅榪愮畻錛屽挨鍏舵槸浣嶇Щ榪愮畻錛宭ittle-endian寰堟柟渚匡紝浣嗚漿蹇典竴鎯籌紝big-endian涔熸柟渚垮晩錛屾棤闈炴槸宸︾Щ鍜屽彸縐葷殑鍖哄埆鑰屽凡錛屼絾little-endian鐨勪紭鍔垮湪浜巙nsigned char/short/int/long綾誨瀷杞崲鏃訛紝瀛樺偍浣嶇疆鏃犻渶鏀瑰彉銆?/p> <p>鍦ㄧ綉緇滀紶杈撲腑錛岄噰鐢╞ig-endian搴忥紝瀵逛簬<tt>0x0A0B0C0D</tt>錛屼紶杈撻『搴忓氨鏄?tt>0A 0B 0C 0D</tt>錛屽洜姝ig-endian浣滀負network byte order錛宭ittle-endian浣滀負host byte order銆?/p> <p>________________________________________________</p> <p><strong>PS錛氬仛楦℃湁浠涔堜笉濂斤紵</strong></p> <p>涓婂崍璺熸煇鍚屼簨錛堜負灝婇噸铏戯紝涓嬫枃浠縐頒箣錛夎翰鍦ㄧ妱瑙掓棶鏃娊鐑熴備互涓嬩負鍦烘櫙鍐嶇幇錛?/p> <p>錛堝拷鐒舵暣鍑烘潵涓鍙ワ級Y錛氬惉榪囬拱鐨勬晠浜嬫病鏈夛紵</p> <p>錛堟弧鑴哥枒鎯戯級Fox錛氭病鏈夈?/p> <p>Y錛氫竴鍙皬楣版帀鍒伴浮紿濋噷錛?$@%鈥︹?/p> <p>F錛氭垜涓嶆槸楣幫紝鎴戝氨鏄竴鍙浮錛屽仛<strike>鎶鏈?/strike>楦℃湁浠涔堜笉濂斤紵</p> <p>Y錛氬仛鎶鏈病鏈変笉濂藉晩鈥︹?/p> <p>F錛氭垜涓嶆槸璇村仛鎶鏈紝鎴戣鍋氶浮錛屾垜灝辨槸鍦ㄥ湴涓婅蛋鐨勶紝鎴戜負浠涔堟繪槸瑕佹姮澶寸湅澶╋紵</p> <p>Y錛氫綘瑕佸線涓婄湅錛屾病鏈変漢娉ㄥ畾涓嶈兘椋烇紝XX浠ュ墠涔熸病鏈夋兂榪囨湁涓澶╀細椋炶搗鏉ャ?/p> <p>F錛氭垜涓嶆槸鎺夊埌楦$獫閲岋紝鎴戞湰鏉ュ氨鍦ㄩ浮紿濋噷錛屾垜涔熷枩嬈㈠憜鍦ㄩ浮紿濋噷錛屽埆浜洪兘鍦ㄥ湴涓婅蛋錛屾垜涓轟粈涔堣椋炶搗鏉ワ紵</p> <p>Y錛氫綘鎬昏椋炶搗鏉ャ?/p> <p>F錛氭垜璇翠簡鎴戝枩嬈㈠憜鍦ㄩ浮紿濋噷錛屼綘瑙佽繃鏈夐偅鍙浮椋炶搗鏉ヤ簡錛?/p> <p>Y錛氣︹?/p> <p>F錛氭垜灝辨槸涓鍙浮錛屾彃浜嗛浮緲呰繕鏄涓嶈搗鏉ワ紝鍐典笖錛屾垜瀵歸璧鋒潵涔熸病鏈変換浣曞叴瓚c?/p> <p>Y錛氣︹?/p> <p>F錛氬仛楦℃湁浠涔堜笉濂斤紵</p> <p>Y錛氫綘鐪嬭佹瘺錛屼笌浜烘枟鍏朵箰鏃犵┓錛屼粬澧冪晫澶氶珮錛屼笌澶╂枟鍏朵箰鏃犵┓錛岀煡閬撳惂錛屼粬宸茬粡涓嶅睉涓庝漢鏂椾簡銆?/p> <p>F錛氭垜涓嶅枩嬈笌浜烘枟錛屾垜涔熸枟涓嶈繃錛屽仛楦℃湁浠涔堜笉濂斤紵</p> <p>Y錛氣︹?/p><img src ="http://www.shnenglu.com/Fox/aggbug/57508.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Fox/" target="_blank">Fox</a> 2008-07-30 14:48 <a href="http://www.shnenglu.com/Fox/archive/2008/07/30/57508.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>[璇慮Google C++緙栫▼椋庢牸鎸囧崡錛堝叓錛塠瀹宂http://www.shnenglu.com/Fox/archive/2008/07/23/56933.htmlFoxFoxWed, 23 Jul 2008 06:28:00 GMThttp://www.shnenglu.com/Fox/archive/2008/07/23/56933.htmlhttp://www.shnenglu.com/Fox/comments/56933.htmlhttp://www.shnenglu.com/Fox/archive/2008/07/23/56933.html#Feedback11http://www.shnenglu.com/Fox/comments/commentRss/56933.htmlhttp://www.shnenglu.com/Fox/services/trackbacks/56933.html鍘熸枃鍦板潃錛?a title="Google C++ Style Guide" target="_blank" rel="tag">Google C++ Style Guide
  • 瑙勫垯涔嬩緥澶?/font>

鍓嶉潰璇存槑鐨勭紪鐮佷範鎯熀鏈槸寮哄埗鎬х殑錛屼絾鎵鏈変紭縐鐨勮鍒欓兘鍏佽渚嬪銆?/p>

1. 鐜版湁涓嶇粺涓浠g爜錛圗xisting Non-conformant Code錛?/font>

瀵逛簬鐜版湁涓嶇鍚堟棦瀹氱紪紼嬮鏍肩殑浠g爜鍙互緗戝紑涓闈€?/p>

褰撲綘淇敼浣跨敤鍏朵粬椋庢牸鐨勪唬鐮佹椂錛屼負浜嗕笌浠g爜鍘熸湁椋庢牸淇濇寔涓鑷村彲浠ヤ笉浣跨敤鏈寚鍗楃害瀹氥傚鏋滀笉鏀懼績鍙互涓庝唬鐮佸師浣滆呮垨鐜板湪鐨勮礋璐d漢鍛樺晢璁紝璁頒綇錛屼竴鑷存у寘鎷師鏈夌殑涓鑷存с?/p>

1. Windows浠g爜錛圵indows Code錛?/font>

Windows紼嬪簭鍛樻湁鑷繁鐨勭紪鐮佷範鎯紝涓昏婧愪簬Windows鐨勪竴浜涘ご鏂囦歡鍜屽叾浠朚icrosoft浠g爜銆傛垜浠笇鏈涗換浣曚漢閮藉彲浠ラ『鍒╄鎳備綘鐨勪唬鐮侊紝鎵浠ラ拡瀵規墍鏈夊鉤鍙扮殑C++緙栫爜緇欏嚭涓涓崟鐙殑鎸囧鏂規銆?/p>

濡傛灉浣犱竴鐩翠嬌鐢╓indows緙栫爜椋庢牸鐨勶紝榪欏効鏈夊繀瑕侀噸鐢充竴涓嬫煇浜涗綘鍙兘浼氬繕璁扮殑鎸囧崡錛堣瘧鑰呮敞錛屾垜鎬庝箞鎰熻鍍忓湪琚礂鑴?D錛?/font>錛?/p>

1) 涓嶈浣跨敤鍖堢墮鍒╁懡鍚嶆硶錛圚ungarian notation錛屽瀹氫箟鏁村瀷鍙橀噺涓?code>iNum錛?/font>錛屼嬌鐢℅oogle鍛藉悕綰﹀畾錛屽寘鎷婧愭枃浠朵嬌鐢?code>.cc鎵╁睍鍚嶏紱

2) Windows瀹氫箟浜嗗緢澶氬師鏈夊唴寤虹被鍨嬬殑鍚屼箟璇?font color="#800000">錛堣瘧鑰呮敞錛岃繖涓鐐癸紝鎴戜篃寰堝弽鎰燂級錛屽DWORD銆?code>HANDLE絳夌瓑錛屽湪璋冪敤Windows API鏃惰繖鏄畬鍏ㄥ彲浠ユ帴鍙楃敋鑷抽紦鍔辯殑錛屼絾榪樻槸灝介噺浣跨敤鍘熸潵鐨凜++綾誨瀷錛屼緥濡傦紝浣跨敤const TCHAR *鑰屼笉鏄?code>LPCTSTR錛?/p>

3) 浣跨敤Microsoft Visual C++榪涜緙栬瘧鏃訛紝灝?strong>璀﹀憡綰у埆璁劇疆涓?鎴栨洿楂?/strong>錛屽茍灝嗘墍鏈墂arnings褰撲綔errors澶勭悊錛?/p>

4) 涓嶈浣跨敤#pragma once;浣滀負鍖呭惈淇濇姢錛屼嬌鐢–++鏍囧噯鍖呭惈淇濇姢錛?strong>鍖呭惈淇濇姢鐨勬枃浠惰礬寰勫寘鍚埌欏圭洰鏍戦《灞?font color="#800000">錛堣瘧鑰呮敞錛?code>#include<prj_name/public/tools.h>錛?/font>錛?/p>

5) 闄ら潪涓囦笉寰楀凡錛屽惁鍒欎笉浣跨敤浠諱綍涓嶆爣鍑嗙殑鎵╁睍錛屽#pragma鍜?code>__declspec錛屽厑璁鎬嬌鐢?code>__declspec(dllimport)鍜?code>__declspec(dllexport)錛屼絾蹇呴』閫氳繃DLLIMPORT鍜?code>DLLEXPORT絳夊畯錛屼互渚垮叾浠栦漢鍦ㄥ叡浜嬌鐢ㄨ繖浜涗唬鐮佹椂瀹規槗鏀懼純榪欎簺鎵╁睍銆?/p>

鍦╓indows涓婏紝鍙湁寰堝皯涓浜涘伓灝斿彲浠ヤ笉閬靛畧鐨勮鍒欙細

1) 閫氬父鎴戜滑紱佹浣跨敤澶氶噸緇ф壙錛屼絾鍦ㄤ嬌鐢?a title="Component Object Model (COM)" target="_blank">COM鍜?a title="Active Template Library (ATL)" target="_blank">ATL/WTL綾繪椂鍙互浣跨敤澶氶噸緇ф壙錛屼負浜嗘墽琛?a title="Component Object Model (COM)" target="_blank">COM鎴?a title="Active Template Library (ATL)" target="_blank">ATL/WTL綾誨強鍏舵帴鍙f椂鍙互浣跨敤澶氶噸瀹炵幇緇ф壙錛?/p>

2) 铏界劧浠g爜涓笉搴斾嬌鐢ㄥ紓甯?/strong>錛屼絾鍦?a title="Active Template Library (ATL)" target="_blank">ATL鍜岄儴鍒?a title="Standard Template Library (STL)" target="_blank">STL錛堝寘鎷琕isual C++鐨凷TL錛変腑寮傚父琚箍娉涗嬌鐢紝浣跨敤ATL鏃訛紝搴斿畾涔?code>_ATL_NO_EXCEPTIONS浠ュ睆钄藉紓甯革紝浣犺鐮旂┒涓涓嬫槸鍚︿篃灞忚斀鎺塖TL鐨勫紓甯革紝濡傛灉涓嶅睆钄斤紝寮鍚紪璇戝櫒寮傚父涔熷彲浠ワ紝娉ㄦ剰榪欏彧鏄負浜嗙紪璇慡TL錛岃嚜宸變粛鐒朵笉瑕佸啓鍚紓甯稿鐞嗙殑浠g爜錛?/p>

3) 閫氬父姣忎釜欏圭洰鐨勬瘡涓簮鏂囦歡涓兘鍖呭惈涓涓悕涓?code>StdAfx.h鎴?code>precompile.h鐨勫ご鏂囦歡鏂逛究澶存枃浠墮緙栬瘧錛屼負浜嗕嬌浠g爜鏂逛究涓庡叾浠栭」鐩叡浜紝閬垮厤鏄懼紡鍖呭惈姝ゆ枃浠訛紙precompile.cc闄ゅ錛夛紝浣跨敤緙栬瘧鍣ㄩ夐」/FI浠ヨ嚜鍔ㄥ寘鍚紱

4) 閫氬父鍚嶄負resource.h銆佷笖鍙寘鍚畯鐨勮祫婧愬ご鏂囦歡錛屼笉蹇呮嫎娉ヤ簬姝ら鏍兼寚鍗椼?/p>

  • 鍥㈤槦鍚堜綔

鍙傝冨父璇嗭紝淇濇寔涓鑷?/strong>銆?/p>

緙栬緫浠g爜鏃訛紝鑺辯偣鏃墮棿鐪嬬湅欏圭洰涓殑鍏朵粬浠g爜騫剁‘瀹氬叾椋庢牸錛屽鏋滃叾浠栦唬鐮?code>if璇彞涓嬌鐢ㄧ┖鏍鹼紝閭d箞浣犱篃瑕佷嬌鐢ㄣ傚鏋滃叾涓殑娉ㄩ噴鐢ㄦ槦鍙鳳紙*錛夊洿鎴愪竴涓洅瀛愮姸錛屼綘涔熻繖鏍峰仛錛?/p>

/**********************************
* Some comments are here.
* There may be many lines.
**********************************/

緙栫▼椋庢牸鎸囧崡鐨勪嬌鐢ㄨ鐐瑰湪浜庢彁渚涗竴涓叕鍏辯殑緙栫爜瑙勮寖錛屾墍鏈変漢鍙互鎶婄簿鍔涢泦涓湪瀹炵幇鍐呭鑰屼笉鏄〃鐜板艦寮忎笂銆傛垜浠粰鍑轟簡鍏ㄥ眬鐨勯鏍艱鑼冿紝浣嗗眬閮ㄧ殑椋庢牸涔熷緢閲嶈錛屽鏋滀綘鍦ㄤ竴涓枃浠朵腑鏂板姞鐨勪唬鐮佸拰鍘熸湁浠g爜椋庢牸鐩稿幓鐢氳繙鐨勮瘽錛岃繖灝辯牬鍧忎簡鏂囦歡鏈韓鐨勬暣浣撶編瑙備篃褰卞搷闃呰錛屾墍浠ヨ灝介噺閬垮厤銆?/p>

濂戒簡錛屽叧浜庣紪鐮侀鏍煎啓鐨勫樊涓嶅浜嗭紝浠g爜鏈韓鎵嶆槸鏇存湁瓚g殑錛屽敖鎯呬韓鍙楀惂錛?/p>

Benjy Weinberger
Craig Silverstein
Gregory Eitzmann
Mark Mentovai
Tashana Landray

______________________________________

璇戣咃細緇堜簬緲誨畬浜嗭紝鍓嶅悗鍘嗘椂涓ゅ懆錛屾暣涓繃紼嬩腑錛岃櫧鍥犲伐浣滃叧緋誨伓鏈夋噲鎬狅紝浣嗘葷畻涓嶆槸铏庡ご铔囧熬錛堣搗鐮佹垜鐨勬佸害鏄潪甯歌鐪熺殑:D錛夛紝鏃犺鏄惁鑳藉浣犳湁鎵瑁ㄧ泭錛屽鎴戣岃█錛岃嚦灝戞槸娓╀範浜嗕竴浜涗互鍓嶇煡閬撶殑鐭ヨ瘑錛屼篃瀛﹀埌浜嗕竴浜涗箣鍓嶄笉鐭ラ亾鐨勭煡璇?/strong>銆?/strong>

鍒氬ソ榪欎袱澶╄繕涓嶆槸鐗圭揣寮狅紝璧剁揣緲誨畬浜嗭紝瑕佸紑濮嬪共媧諱簡鈥︹?/strong>

Fox 2008-07-23 14:28 鍙戣〃璇勮
]]>[璇慮Google C++緙栫▼椋庢牸鎸囧崡錛堜竷錛?/title><link>http://www.shnenglu.com/Fox/archive/2008/07/23/56922.html</link><dc:creator>Fox</dc:creator><author>Fox</author><pubDate>Wed, 23 Jul 2008 03:43:00 GMT</pubDate><guid>http://www.shnenglu.com/Fox/archive/2008/07/23/56922.html</guid><wfw:comment>http://www.shnenglu.com/Fox/comments/56922.html</wfw:comment><comments>http://www.shnenglu.com/Fox/archive/2008/07/23/56922.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/Fox/comments/commentRss/56922.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Fox/services/trackbacks/56922.html</trackback:ping><description><![CDATA[<p>鍘熸枃鍦板潃錛?a title="Google C++ Style Guide" target="_blank" rel="tag">Google C++ Style Guide</a></p> <ul> <li><strong><font color="#800000">鏍煎紡</font></strong></li></ul> <p>浠g爜椋庢牸鍜屾牸寮忕‘瀹炴瘮杈冮殢鎰忥紝浣嗕竴涓」鐩腑鎵鏈変漢閬靛驚鍚屼竴椋庢牸鏄潪甯稿鏄撶殑錛屼綔涓轟釜浜烘湭蹇呭悓鎰忎笅榪版牸寮忚鍒欑殑姣忎竴澶勶紝浣嗘暣涓」鐩湇浠庣粺涓鐨勭紪紼嬮鏍兼槸寰堥噸瑕佺殑錛岃繖鏍峰仛鎵嶈兘璁╂墍鏈変漢鍦ㄩ槄璇誨拰鐞嗚В浠g爜鏃舵洿鍔犲鏄撱?/p> <p><strong><font color="#800000">1. 琛岄暱搴︼紙Line Length錛?/font></strong></p> <p>姣忎竴琛屼唬鐮佸瓧絎︽暟涓嶈秴榪?0銆?/p> <p>鎴戜滑涔熻璇嗗埌榪欐潯瑙勫垯鏄瓨鏈変簤璁殑錛屼絾濡傛澶氱殑浠g爜閮介伒鐓ц繖涓瑙勫垯錛屾垜浠劅瑙変竴鑷存ф洿閲嶈銆?/p> <p><strong>浼樼偣</strong>錛氭彁鍊¤鍘熷垯鐨勪漢璁や負寮鴻揩浠栦滑璋冩暣緙栬緫鍣ㄧ獥鍙eぇ灝忓緢閲庤洰銆傚緢澶氫漢鍚屾椂騫舵帓寮鍑犱釜紿楀彛錛屾牴鏈病鏈夊浣欑┖闂存嫇瀹芥煇涓獥鍙o紝浜轟滑灝嗙獥鍙f渶澶у昂瀵稿姞浠ラ檺瀹氾紝涓鑷翠嬌鐢?0鍒楀錛屼負浠涔堣鏀瑰彉鍛紵</p> <p><strong>緙虹偣</strong>錛氬弽瀵硅鍘熷垯鐨勪漢鍒欒涓烘洿瀹界殑浠g爜琛屾洿鏄撻槄璇伙紝80鍒楃殑闄愬埗鏄笂涓笘綰?0騫翠唬鐨勫ぇ鍨嬫満鐨勫彜鏉跨己闄鳳紱鐜頒唬璁懼鍏鋒湁鏇村鐨勬樉紺哄睆錛屽緢杞繪澗鐨勫彲浠ユ樉紺烘洿澶氫唬鐮併?/p> <p><strong>緇撹</strong>錛?0涓瓧絎︽槸鏈澶у箋備緥澶栵細</p> <p>1) 濡傛灉涓琛屾敞閲婂寘鍚簡瓚呰繃80瀛楃鐨勫懡浠ゆ垨URL錛屽嚭浜庡鍒剁矘璐寸殑鏂逛究鍙互瓚呰繃80瀛楃錛?/p> <p>2) 鍖呭惈闀胯礬寰勭殑鍙互瓚呭嚭80鍒楋紝灝介噺閬垮厤錛?/p> <p>3) 澶存枃浠朵繚鎶わ紙闃叉閲嶅鍖呭惈<a title="[璇慮Google C++緙栫▼椋庢牸鎸囧崡錛堜竴錛? href="http://www.shnenglu.com/Fox/archive/2008/07/10/55818.html" target="_blank">絎竴綃?/a>錛夊彲浠ユ棤瑙嗚鍘熷垯銆?/p> <p><strong><font color="#800000">2. 闈濧SCII瀛楃錛圢on-ASCII Characters錛?/font></strong></p> <p>灝介噺涓嶄嬌鐢ㄩ潪ASCII瀛楃錛屼嬌鐢ㄦ椂蹇呴』浣跨敤<a title="UTF-8" target="_blank">UTF-8</a>鏍煎紡銆?/p> <p>鍝曟槸鑻辨枃錛屼篃涓嶅簲灝嗙敤鎴風晫闈㈢殑鏂囨湰紜紪鐮佸埌婧愪唬鐮佷腑錛屽洜姝ら潪ASCII瀛楃瑕佸皯鐢ㄣ傜壒孌婃儏鍐典笅鍙互閫傚綋鍖呭惈姝ょ被瀛楃錛屽錛屼唬鐮佸垎鏋愬閮ㄦ暟鎹枃浠舵椂錛屽彲浠ラ傚綋紜紪鐮佹暟鎹枃浠朵腑浣滀負鍒嗛殧絎︾殑闈濧SCII瀛楃涓詫紱鏇村父鐢ㄧ殑鏄紙涓嶉渶瑕佹湰鍦板寲鐨勶級鍗曞厓嫻嬭瘯浠g爜鍙兘鍖呭惈闈濧SCII瀛楃涓層傛綾繪儏鍐典笅錛屽簲浣跨敤UTF-8鏍煎紡錛屽洜涓哄緢澶氬伐鍏烽兘鍙互鐞嗚В鍜屽鐞嗗叾緙栫爜錛屽崄鍏繘鍒剁紪鐮佷篃鍙互錛屽挨鍏舵槸鍦ㄥ寮哄彲璇繪х殑鎯呭喌涓嬧斺斿<code>"\xEF\xBB\xBF"</code>鏄疷nicode鐨?a title="zero-width no-break space" target="_blank">zero-width no-break space</a>瀛楃錛屼互UTF-8鏍煎紡鍖呭惈鍦ㄦ簮鏂囦歡涓槸涓嶅彲瑙佺殑銆?/p> <p><strong><font color="#800000">3. 絀烘牸榪樻槸鍒惰〃浣嶏紙Spaces vs. Tabs錛?/font></strong></p> <p>鍙嬌鐢ㄧ┖鏍鹼紝姣忔緙╄繘2涓┖鏍箋?/p> <p>浣跨敤絀烘牸榪涜緙╄繘錛屼笉瑕佸湪浠g爜涓嬌鐢╰abs錛岃瀹氱紪杈戝櫒灝唗ab杞負絀烘牸銆?/p> <p><strong>璇戣呮敞錛氬湪鍓嶆鏃墮棿鐨?/strong><a title="Debian寮鍙戝涔犳棩璁幫紙浜岋級錛氱郴緇熺畝鍗曢厤緗? href="http://www.shnenglu.com/Fox/archive/2008/06/06/debian_simple_configuration.html" target="_blank"><strong>鍏充簬Debian寮鍙戝涔犳棩璁?/strong></a><strong>涓鏂囦腑錛屾浘緇欏嚭閽堝C/C++緙栫爜浣跨敤鐨剉im閰嶇疆銆?/strong></p> <p><strong><font color="#800000">4. 鍑芥暟澹版槑涓庡畾涔夛紙Function Declarations and Definitions錛?/font></strong></p> <p>榪斿洖綾誨瀷鍜屽嚱鏁板悕鍦ㄥ悓涓琛岋紝鍚堥傜殑璇濓紝鍙傛暟涔熸斁鍦ㄥ悓涓琛屻?/p> <p>鍑芥暟鐪嬩笂鍘誨儚榪欐牱錛?/p><pre>ReturnType ClassName::FunctionName(Type par_name1, Type par_name2) { DoSomething(); ... } </pre> <p>濡傛灉鍚屼竴琛屾枃鏈緝澶氾紝瀹逛笉涓嬫墍鏈夊弬鏁幫細</p><pre>ReturnType ClassName::ReallyLongFunctionName(Type par_name1, Type par_name2, Type par_name3) { DoSomething(); ... } </pre> <p>鐢氳嚦榪炵涓涓弬鏁伴兘鏀句笉涓嬶細</p><pre>ReturnType LongClassName::ReallyReallyReallyLongFunctionName( Type par_name1, // 4 space indent Type par_name2, Type par_name3) { DoSomething(); // 2 space indent ... } </pre> <p>娉ㄦ剰浠ヤ笅鍑犵偣錛?/p> <p>1) 榪斿洖鍊兼繪槸鍜屽嚱鏁板悕鍦ㄥ悓涓琛岋紱</p> <p>2) <font color="#800000">宸﹀渾鎷彿錛坥pen parenthesis錛?/font>鎬繪槸鍜屽嚱鏁板悕鍦ㄥ悓涓琛岋紱</p> <p>3) 鍑芥暟鍚嶅拰宸﹀渾鎷彿闂存病鏈夌┖鏍鹼紱</p> <p>4) 鍦嗘嫭鍙蜂笌鍙傛暟闂存病鏈夌┖鏍鹼紱</p> <p>5) <font color="#800000">宸﹀ぇ鎷彿錛坥pen curly brace錛?/font>鎬誨湪鏈鍚庝竴涓弬鏁板悓涓琛岀殑鏈熬澶勶紱</p> <p>6) <font color="#800000">鍙沖ぇ鎷彿錛坈lose curly brace錛?/font>鎬繪槸鍗曠嫭浣嶄簬鍑芥暟鏈鍚庝竴琛岋紱</p> <p>7) <font color="#800000">鍙沖渾鎷彿錛坈lose parenthesis錛?/font>鍜屽乏澶ф嫭鍙烽棿鎬繪槸鏈変竴涓┖鏍鹼紱</p> <p>8) 鍑芥暟澹版槑鍜屽疄鐜板鐨勬墍鏈夊艦鍙傚悕縐板繀欏諱繚鎸佷竴鑷達紱</p> <p>9) 鎵鏈夊艦鍙傚簲灝藉彲鑳藉榻愶紱</p> <p>10) 緙虹渷緙╄繘涓?涓┖鏍鹼紱</p> <p>11) 鐙珛灝佽鐨勫弬鏁頒繚鎸?涓┖鏍肩殑緙╄繘銆?/p> <p>濡傛灉鍑芥暟涓?code>const</code>鐨勶紝鍏抽敭瀛?code>const</code>搴斾笌鏈鍚庝竴涓弬鏁頒綅浜庡悓涓琛屻?/p><pre>// Everything in this function signature fits on a single line ReturnType FunctionName(Type par) const { ... } // This function signature requires multiple lines, but // the const keyword is on the line with the last parameter. ReturnType ReallyLongFunctionName(Type par1, Type par2) const { ... } </pre> <p>濡傛灉鏈変簺鍙傛暟娌℃湁鐢ㄥ埌錛屽湪鍑芥暟瀹氫箟澶勫皢鍙傛暟鍚嶆敞閲婅搗鏉ワ細</p><pre>// Always have named parameters in interfaces. class Shape { public: virtual void Rotate(double radians) = 0; } // Always have named parameters in the declaration. class Circle : public Shape { public: virtual void Rotate(double radians); } // Comment out unused named parameters in definitions. void Circle::Rotate(double /*radians*/) {}</pre><pre>// Bad - if someone wants to implement later, it's not clear what the // variable means. void Circle::Rotate(double) {} </pre> <p><strong>璇戣呮敞錛氬叧浜嶶NIX/Linux椋庢牸涓轟粈涔堣鎶婂乏澶ф嫭鍙風疆浜庤灝撅紙.cc鏂囦歡鐨勫嚱鏁板疄鐜板錛屽乏澶ф嫭鍙蜂綅浜庤棣栵級錛屾垜鐨勭悊瑙f槸浠g爜鐪嬩笂鍘繪瘮杈冪畝綰︼紝鎯蟲兂琛岄闄や簡鍑芥暟浣撹涓瀵瑰ぇ鎷彿灝佸湪涓璧蜂箣澶栵紝鍙湁鍙沖ぇ鎷彿鐨勪唬鐮佺湅涓婂幓紜疄涔熻垝鏈嶏紱Windows椋庢牸灝嗗乏澶ф嫭鍙風疆浜庤棣栫殑浼樼偣鏄尮閰嶆儏鍐典竴鐩簡鐒躲?/strong></p> <p><strong><font color="#800000">5. 鍑芥暟璋冪敤錛團unction Calls錛?/font></strong></p> <p>灝介噺鏀懼湪鍚屼竴琛岋紝鍚﹀垯錛屽皢瀹炲弬灝佽鍦ㄥ渾鎷彿涓?/p> <p>鍑芥暟璋冪敤閬靛驚濡備笅褰㈠紡錛?/p><pre>bool retval = DoSomething(argument1, argument2, argument3); </pre> <p>濡傛灉鍚屼竴琛屾斁涓嶄笅錛屽彲鏂負澶氳錛屽悗闈㈡瘡涓琛岄兘鍜岀涓涓疄鍙傚榻愶紝宸﹀渾鎷彿鍚庡拰鍙沖渾鎷彿鍓嶄笉瑕佺暀絀烘牸錛?/p><pre>bool retval = DoSomething(averyveryveryverylongargument1, argument2, argument3); </pre> <p>濡傛灉鍑芥暟鍙傛暟姣旇緝澶氾紝鍙互鍑轟簬鍙鎬х殑鑰冭檻姣忚鍙斁涓涓弬鏁幫細</p><pre>bool retval = DoSomething(argument1, argument2, argument3, argument4); </pre> <p>濡傛灉鍑芥暟鍚嶅お闀匡紝浠ヨ嚦浜庤秴榪囪鏈澶ч暱搴︼紝鍙互灝嗘墍鏈夊弬鏁扮嫭绔嬫垚琛岋細</p><pre>if (...) { ... ... if (...) { DoSomethingThatRequiresALongFunctionName( very_long_argument1, // 4 space indent argument2, argument3, argument4); } </pre> <p><strong><font color="#800000">6. 鏉′歡璇彞錛圕onditionals錛?/font></strong></p> <p>鏇存彁鍊′笉鍦ㄥ渾鎷彿涓坊鍔犵┖鏍鹼紝鍏抽敭瀛?code>else</code>鍙﹁搗涓琛屻?/p> <p>瀵瑰熀鏈潯浠惰鍙ユ湁涓ょ鍙互鎺ュ彈鐨勬牸寮忥紝涓縐嶅湪鍦嗘嫭鍙峰拰鏉′歡涔嬮棿鏈夌┖鏍鹼紝涓縐嶆病鏈夈?/p> <p>鏈甯歌鐨勬槸娌℃湁絀烘牸鐨勬牸寮忥紝閭g閮藉彲浠ワ紝榪樻槸<strong>涓鑷存?/strong>涓轟富銆傚鏋滀綘鏄湪淇敼涓涓枃浠訛紝鍙傝冨綋鍓嶅凡鏈夋牸寮忥紱濡傛灉鏄啓鏂扮殑浠g爜錛屽弬鑰冪洰褰曚笅鎴栭」鐩腑鍏朵粬鏂囦歡鐨勬牸寮忥紝榪樺湪寰樺緤鐨勮瘽錛屽氨涓嶈鍔犵┖鏍間簡銆?/p><pre>if (condition) { // no spaces inside parentheses ... // 2 space indent. } else { // The else goes on the same line as the closing brace. ... } </pre> <p>濡傛灉浣犲懼悜浜庡湪鍦嗘嫭鍙峰唴閮ㄥ姞絀烘牸錛?/p><pre>if ( condition ) { // spaces inside parentheses - rare ... // 2 space indent. } else { // The else goes on the same line as the closing brace. ... } </pre> <p>娉ㄦ剰鎵鏈夋儏鍐典笅<code>if</code>鍜屽乏鍦嗘嫭鍙烽棿鏈変釜絀烘牸錛屽彸鍦嗘嫭鍙峰拰宸﹀ぇ鎷彿錛堝鏋滀嬌鐢ㄧ殑璇濓級闂翠篃瑕佹湁涓┖鏍鹼細</p><pre>if(condition) // Bad - space missing after IF. if (condition){ // Bad - space missing before {. if(condition){ // Doubly bad.</pre><pre>if (condition) { // Good - proper space after IF and before {. </pre> <p>鏈変簺鏉′歡璇彞鍐欏湪鍚屼竴琛屼互澧炲己鍙鎬э紝鍙湁褰撹鍙ョ畝鍗曞茍涓旀病鏈変嬌鐢?code>else瀛愬彞</code>鏃朵嬌鐢細</p><pre>if (x == kFoo) return new Foo(); if (x == kBar) return new Bar(); </pre> <p>濡傛灉璇彞鏈?code>else</code>鍒嗘敮鏄笉鍏佽鐨勶細</p><pre>// Not allowed - IF statement on one line when there is an ELSE clause if (x) DoThis(); else DoThat(); </pre> <p>閫氬父錛屽崟琛岃鍙ヤ笉闇瑕佷嬌鐢ㄥぇ鎷彿錛屽鏋滀綘鍠滄涔熸棤鍙帤闈烇紝涔熸湁浜鴻姹?code>if</code>蹇呴』浣跨敤澶ф嫭鍙鳳細</p><pre>if (condition) DoSomething(); // 2 space indent. if (condition) { DoSomething(); // 2 space indent. } </pre> <p>浣嗗鏋滆鍙ヤ腑鍝竴鍒嗘敮浣跨敤浜嗗ぇ鎷彿鐨勮瘽錛屽叾浠栭儴鍒嗕篃蹇呴』浣跨敤錛?/p><pre>// Not allowed - curly on IF but not ELSE if (condition) { foo; } else bar; // Not allowed - curly on ELSE but not IF if (condition) foo; else { bar; }</pre><pre> </pre><pre>// Curly braces around both IF and ELSE required because // one of the clauses used braces. if (condition) { foo; } else { bar; } </pre> <p><strong><font color="#800000">7. 寰幆鍜屽紑鍏抽夋嫨璇彞錛圠oops and Switch Statements錛?/font></strong></p> <p><code>switch</code>璇彞鍙互浣跨敤澶ф嫭鍙峰垎鍧楋紱絀哄驚鐜綋搴斾嬌鐢?code>{}</code>鎴?code>continue</code>銆?/p> <p><code>switch</code>璇彞涓殑<code>case</code>鍧楀彲浠ヤ嬌鐢ㄥぇ鎷彿涔熷彲浠ヤ笉鐢紝鍙栧喅浜庝綘鐨勫枩濂斤紝浣跨敤鏃惰渚濅笅鏂囨墍榪般?/p> <p>濡傛灉鏈変笉婊¤凍<code>case</code>鏋氫婦鏉′歡鐨勫鹼紝瑕佹繪槸鍖呭惈涓涓?code>default</code>錛堝鏋滄湁杈撳叆鍊兼病鏈?code>case</code>鍘誨鐞嗭紝緙栬瘧鍣ㄥ皢鎶ヨ錛夈傚鏋?code>default</code>姘鎬笉浼氭墽琛岋紝鍙互綆鍗曠殑浣跨敤<code>assert</code>錛?/p><pre>switch (var) { case 0: { // 2 space indent ... // 4 space indent break; } case 1: { ... break; } default: { assert(false); } } </pre> <p>絀哄驚鐜綋搴斾嬌鐢?code>{}</code>鎴?code>continue</code>錛岃屼笉鏄竴涓畝鍗曠殑鍒嗗彿錛?/p><pre>while (condition) { // Repeat test until it returns false. } for (int i = 0; i < kSomeNumber; ++i) {} // Good - empty body. while (condition) continue; // Good - continue indicates no logic.</pre><pre>while (condition); // Bad - looks like part of do/while loop. </pre> <p><strong><font color="#800000">8. 鎸囬拡鍜屽紩鐢ㄨ〃杈懼紡錛圥ointers and Reference Expressions錛?/font></strong></p> <p>鍙ョ偣錛?code>.</code>錛夋垨綆ご錛?code>-></code>錛夊墠鍚庝笉瑕佹湁絀烘牸錛屾寚閽?鍦板潃鎿嶄綔絎︼紙<code>*銆?amp;</code>錛夊悗涓嶈鏈夌┖鏍箋?/p> <p>涓嬮潰鏄寚閽堝拰寮曠敤琛ㄨ揪寮忕殑姝g‘鑼冧緥錛?/p><pre>x = *p; p = &x; x = r.y; x = r->y; </pre> <p>娉ㄦ剰錛?/p> <p>1) 鍦ㄨ闂垚鍛樻椂錛屽彞鐐規垨綆ご鍓嶅悗娌℃湁絀烘牸錛?/p> <p>2) 鎸囬拡鎿嶄綔絎?code>*</code>鎴?code>&</code>鍚庢病鏈夌┖鏍箋?/p> <p>鍦ㄥ0鏄庢寚閽堝彉閲忔垨鍙傛暟鏃訛紝鏄熷彿涓庣被鍨嬫垨鍙橀噺鍚嶇揣鎸ㄩ兘鍙互錛?/p><pre>// These are fine, space preceding. char *c; const string &str; // These are fine, space following. char* c; // but remember to do "char* c, *d, *e, ...;"! const string& str;</pre><pre>char * c; // Bad - spaces on both sides of * const string & str; // Bad - spaces on both sides of & </pre> <p>鍚屼竴涓枃浠訛紙鏂板緩鎴栫幇鏈夛級涓搗鐮佽淇濇寔涓鑷淬?/p> <p><strong>璇戣呮敞錛氫釜浜烘瘮杈冧範鎯笌鍙橀噺绱ф尐鐨勬柟寮?/strong><strong>銆?/strong></p> <p><strong><font color="#800000">9. 甯冨皵琛ㄨ揪寮忥紙Boolean Expressions錛?/font></strong></p> <p>濡傛灉涓涓竷灝旇〃杈懼紡瓚呰繃鏍囧噯琛屽錛?0瀛楃錛夛紝濡傛灉鏂瑕佺粺涓涓涓嬨?/p> <p>涓嬩緥涓紝閫昏緫涓庯紙<code>&&</code>錛夋搷浣滅鎬諱綅浜庤灝撅細</p><pre>if (this_one_thing > this_other_thing && a_third_thing == a_fourth_thing && yet_another & last_one) { ... } </pre> <p>涓や釜閫昏緫涓庯紙<code>&&</code>錛夋搷浣滅閮戒綅浜庤灝撅紝鍙互鑰冭檻棰濆鎻掑叆鍦嗘嫭鍙鳳紝鍚堢悊浣跨敤鐨勮瘽瀵瑰寮哄彲璇繪ф槸寰堟湁甯姪鐨勩?/p> <p><strong>璇戣呮敞錛氫釜浜烘瘮杈冧範鎯昏緫榪愮畻絎︿綅浜庤棣栵紝閫昏緫鍏崇郴涓鐩簡鐒訛紝鍚勪漢鍠滃ソ鑰屽凡錛岃嚦浜庡姞涓嶅姞鍦嗘嫭鍙風殑闂錛屽鏋滀綘瀵逛紭鍏堢駭浜嗙劧浜庤兏鐨勮瘽鍙互涓嶅姞錛屼絾鍙鎬ф繪槸宸簡浜?/strong><strong>銆?/strong></p> <p><strong><font color="#800000">10. 鍑芥暟榪斿洖鍊鹼紙Return Values錛?/font></strong></p> <p><code>return</code>琛ㄨ揪寮忎腑涓嶈浣跨敤鍦嗘嫭鍙楓?/p> <p>鍑芥暟榪斿洖鏃朵笉瑕佷嬌鐢ㄥ渾鎷彿錛?/p><pre>return x; // not return(x); </pre> <p><strong><font color="#800000">11. 鍙橀噺鍙婃暟緇勫垵濮嬪寲錛圴ariable and Array Initialization錛?/font></strong></p> <p>閫夋嫨<code>=</code>榪樻槸<code>()</code>銆?/p> <p>闇瑕佸仛浜岃呬箣闂村仛鍑洪夋嫨錛屼笅闈㈢殑褰㈠紡閮芥槸姝g‘鐨勶細</p><pre>int x = 3; int x(3); string name("Some Name"); string name = "Some Name"; </pre> <p><strong><font color="#800000">12. 棰勫鐞嗘寚浠わ紙Preprocessor Directives錛?/font></strong></p> <p>棰勫鐞嗘寚浠や笉瑕佺緝榪涳紝浠庤棣栧紑濮嬨?/p> <p>鍗充嬌棰勫鐞嗘寚浠や綅浜庣緝榪涗唬鐮佸潡涓紝鎸囦護涔熷簲浠庤棣栧紑濮嬨?/p><pre>// Good - directives at beginning of line if (lopsided_score) { #if DISASTER_PENDING // Correct -- Starts at beginning of line DropEverything(); #endif BackToNormal(); }</pre><pre>// Bad - indented directives if (lopsided_score) { #if DISASTER_PENDING // Wrong! The "#if" should be at beginning of line DropEverything(); #endif // Wrong! Do not indent "#endif" BackToNormal(); } </pre> <p><strong><font color="#800000">13. 綾繪牸寮忥紙Class Format錛?/font></strong></p> <p>澹版槑灞炴т緷嬈″簭鏄?code>public:</code>銆?code>protected:</code>銆?code>private:</code>錛屾瘡嬈$緝榪?涓┖鏍?font color="#800000">錛堣瘧鑰呮敞錛屼負浠涔堜笉鏄袱涓憿錛熶篃鏈変漢鎻愬?code>private</code>鍦ㄥ墠錛屽浜庡0鏄庝簡鍝簺鏁版嵁鎴愬憳涓鐩簡鐒訛紝榪樻湁浜烘彁鍊′緷閫昏緫鍏崇郴灝嗗彉閲忎笌鎿嶄綔鏀懼湪涓璧鳳紝閮芥湁閬撶悊<code>:-)</code>錛?/font>銆?/p> <p>綾誨0鏄庯紙瀵圭被娉ㄩ噴涓嶄簡瑙g殑璇濓紝鍙傝?a title="[璇慮Google C++緙栫▼椋庢牸鎸囧崡錛堝叚錛? href="http://www.shnenglu.com/Fox/archive/2008/07/22/56873.html" target="_blank">絎叚綃?/a>涓殑<strong>綾繪敞閲?/strong>涓鑺傦級鐨勫熀鏈牸寮忓涓嬶細</p><pre>class MyClass : public OtherClass { public: // Note the 1 space indent! MyClass(); // Regular 2 space indent. explicit MyClass(int var); ~MyClass() {} void SomeFunction(); void SomeFunctionThatDoesNothing() { } void set_some_var(int var) { some_var_ = var; } int some_var() const { return some_var_; } private: bool SomeInternalFunction(); int some_var_; int some_other_var_; DISALLOW_COPY_AND_ASSIGN(MyClass); }; </pre> <p>娉ㄦ剰錛?/p> <p>1) 鎵浠ュ熀綾誨悕搴斿湪80鍒楅檺鍒朵笅灝介噺涓庡瓙綾誨悕鏀懼湪鍚屼竴琛岋紱</p> <p>2) 鍏抽敭璇?code>public:銆?/code><code>protected:</code>銆?code>private:</code>瑕佺緝榪?涓┖鏍?font color="#800000">錛堣瘧鑰呮敞錛孧SVC澶氫嬌鐢╰ab緙╄繘錛屼笖榪欎笁涓叧閿瘝娌℃湁緙╄繘錛?/font>錛?/p> <p>3) 闄ょ涓涓叧閿瘝錛堜竴鑸槸<code>public錛夊錛屽叾浠栧叧閿瘝鍓嶇┖涓琛岋紝濡傛灉綾繪瘮杈冨皬鐨勮瘽涔熷彲浠ヤ笉絀猴紱</code></p> <p>4) 榪欎簺鍏抽敭璇嶅悗涓嶈絀鴻錛?/p> <p>5) <code>public</code>鏀懼湪鏈鍓嶉潰錛岀劧鍚庢槸<code>protected</code>鍜?code>private</code>錛?/p> <p>6) 鍏充簬澹版槑嬈″簭鍙傝?a title="[璇慮Google C++緙栫▼椋庢牸鎸囧崡錛堜笁錛? href="http://www.shnenglu.com/Fox/archive/2008/07/16/56324.html" target="_blank">絎笁綃?/a><strong>澹版槑嬈″簭</strong>涓鑺傘?/p> <p><strong><font color="#800000">14. 鍒濆鍖栧垪琛紙Initializer Lists錛?/font></strong></p> <p>鏋勯犲嚱鏁板垵濮嬪寲鍒楄〃鏀懼湪鍚屼竴琛屾垨鎸夊洓鏍肩緝榪涘茍鎺掑嚑琛屻?/p> <p>涓ょ鍙互鎺ュ彈鐨勫垵濮嬪寲鍒楄〃鏍煎紡錛?/p><pre>// When it all fits on one line: MyClass::MyClass(int var) : some_var_(var), some_other_var_(var + 1) { </pre> <p>鎴?/p><pre>// When it requires multiple lines, indent 4 spaces, putting the colon on // the first initializer line: MyClass::MyClass(int var) : some_var_(var), // 4 space indent some_other_var_(var + 1) { // lined up ... DoSomething(); ... } </pre> <p><strong><font color="#800000">15. 鍛藉悕絀洪棿鏍煎紡鍖栵紙Namespace Formatting錛?/font></strong></p> <p>鍛藉悕絀洪棿鍐呭涓嶇緝榪涖?/p> <p>鍛藉悕絀洪棿涓嶆坊鍔犻澶栫緝榪涘眰嬈★紝渚嬪錛?/p><pre>namespace { void foo() { // Correct. No extra indentation within namespace. ... } } // namespace </pre> <p>涓嶈緙╄繘錛?/p><pre>namespace { // Wrong. Indented when it should not be. void foo() { ... } } // namespace </pre> <p><strong><font color="#800000">16. 姘村鉤鐣欑櫧錛圚orizontal Whitespace錛?/font></strong></p> <p>姘村鉤鐣欑櫧鐨勪嬌鐢ㄥ洜鍦板埗瀹溿備笉瑕佸湪琛屽熬娣誨姞鏃犺皳鐨勭暀鐧姐?/p> <p><strong>鏅?/strong>錛?/p><pre>void f(bool b) { // Open braces should always have a space before them. ... int i = 0; // Semicolons usually have no space before them. int x[] = { 0 }; // Spaces inside braces for array initialization are int x[] = {0}; // optional. If you use them, put them on both sides! // Spaces around the colon in inheritance and initializer lists. class Foo : public Bar { public: // For inline function implementations, put spaces between the braces // and the implementation itself. Foo(int b) : Bar(), baz_(b) {} // No spaces inside empty braces. void Reset() { baz_ = 0; } // Spaces separating braces from implementation. ... </pre> <p>娣誨姞鍐椾綑鐨勭暀鐧戒細緇欏叾浠栦漢緙栬緫鏃墮犳垚棰濆璐熸媴錛屽洜姝わ紝涓嶈鍔犲叆澶氫綑鐨勭┖鏍箋傚鏋滅‘瀹氫竴琛屼唬鐮佸凡緇忎慨鏀瑰畬姣曪紝灝嗗浣欑殑絀烘牸鍘繪帀錛涙垨鑰呭湪涓撻棬娓呯悊絀烘牸鏃跺幓鎺夛紙紜俊娌℃湁鍏朵粬浜哄湪浣跨敤錛夈?/p> <p><strong>寰幆鍜屾潯浠惰鍙?/strong>錛?/p><pre>if (b) { // Space after the keyword in conditions and loops. } else { // Spaces around else. } while (test) {} // There is usually no space inside parentheses. switch (i) { for (int i = 0; i < 5; ++i) { switch ( i ) { // Loops and conditions may have spaces inside if ( test ) { // parentheses, but this is rare. Be consistent. for ( int i = 0; i < 5; ++i ) { for ( ; i < 5 ; ++i) { // For loops always have a space after the ... // semicolon, and may have a space before the // semicolon. switch (i) { case 1: // No space before colon in a switch case. ... case 2: break; // Use a space after a colon if there's code after it. </pre> <p><strong>鎿嶄綔絎?/strong>錛?/p><pre>x = 0; // Assignment operators always have spaces around // them. x = -5; // No spaces separating unary operators and their ++x; // arguments. if (x && !y) ... v = w * x + y / z; // Binary operators usually have spaces around them, v = w*x + y/z; // but it's okay to remove spaces around factors. v = w * (x + z); // Parentheses should have no spaces inside them. </pre> <p><strong>妯℃澘鍜岃漿鎹?/strong>錛?/p><pre>vector<string> x; // No spaces inside the angle y = static_cast<char*>(x); // brackets (< and >), before // <, or between >( in a cast. vector<char *> x; // Spaces between type and pointer are // okay, but be consistent. set<list<string> > x; // C++ requires a space in > >. set< list<string> > x; // You may optionally make use // symmetric spacing in < <. </pre> <p><strong><font color="#800000">17. 鍨傜洿鐣欑櫧錛圴ertical Whitespace錛?/font></strong></p> <p>鍨傜洿鐣欑櫧瓚婂皯瓚婂ソ銆?/p> <p>榪欎笉浠呬粎鏄鍒欒屾槸鍘熷垯闂浜嗭細涓嶆槸闈炲父鏈夊繀瑕佺殑璇濆氨涓嶈浣跨敤絀鴻銆傚挨鍏舵槸錛氫笉瑕佸湪涓や釜鍑芥暟瀹氫箟涔嬮棿絀鴻秴榪?琛岋紝鍑芥暟浣撳ご銆佸熬涓嶈鏈夌┖琛岋紝鍑芥暟浣撲腑涔熶笉瑕侀殢鎰忔坊鍔犵┖琛屻?/p> <p>鍩烘湰鍘熷垯鏄細鍚屼竴灞忓彲浠ユ樉紺鴻秺澶氱殑浠g爜錛岀▼搴忕殑鎺у埗嫻佸氨瓚婂鏄撶悊瑙c傚綋鐒訛紝榪囦簬瀵嗛泦鐨勪唬鐮佸潡鍜岃繃浜庣枏鏉劇殑浠g爜鍧楀悓鏍烽毦鐪嬶紝鍙栧喅浜庝綘鐨勫垽鏂紝浣嗛氬父鏄秺灝戣秺濂姐?/p> <p>鍑芥暟澶淬佸熬涓嶈鏈夌┖琛岋細</p><pre>void Function() { // Unnecessary blank lines before and after } </pre> <p>浠g爜鍧楀ご銆佸熬涓嶈鏈夌┖琛岋細</p><pre>while (condition) { // Unnecessary blank line after } if (condition) { // Unnecessary blank line before } </pre> <p><code>if-else</code>鍧椾箣闂寸┖涓琛岃繕鍙互鎺ュ彈錛?/p><pre>if (condition) { // Some lines of code too small to move to another function, // followed by a blank line. } else { // Another block of code } </pre> <p>______________________________________ </p> <p>璇戣咃細棣栧厛璇存槑錛屽浜庝唬鐮佹牸寮忥紝鍥犱漢銆佸洜緋葷粺鍚勬湁浼樼己鐐癸紝浣嗗悓涓涓」鐩腑閬靛驚鍚屼竴鏍囧噯榪樻槸鏈夊繀瑕佺殑錛? <p><strong>1. 琛屽鍘熷垯涓婁笉瓚呰繃80鍒楋紝鎶?2瀵哥殑鏄劇ず灞忛兘鍗犲畬錛屾庝箞涔熻涓嶈繃鍘伙紱</strong></p> <p><strong>2. 灝介噺涓嶄嬌鐢ㄩ潪ASCII瀛楃錛屽鏋滀嬌鐢ㄧ殑璇濓紝鍙傝僓TF-8鏍煎紡錛堝挨鍏舵槸UNIX/Linux涓嬶紝Windows涓嬪彲浠ヨ冭檻瀹藉瓧絎︼級錛屽敖閲忎笉灝嗗瓧絎︿覆甯擱噺鑰﹀悎鍒頒唬鐮佷腑錛屾瘮濡傜嫭绔嬪嚭璧勬簮鏂囦歡錛岃繖涓嶄粎浠呮槸椋庢牸闂浜嗭紱</strong></p> <p><strong>3. UNIX/Linux涓嬫棤鏉′歡浣跨敤絀烘牸錛孧SVC鐨勮瘽浣跨敤Tab涔熸棤鍙帤闈烇紱</strong></p> <p><strong>4. 鍑芥暟鍙傛暟銆侀昏緫鏉′歡銆佸垵濮嬪寲鍒楄〃錛氳涔堟墍鏈夊弬鏁板拰鍑芥暟鍚嶆斁鍦ㄥ悓涓琛岋紝瑕佷箞鎵鏈夊弬鏁板茍鎺掑垎琛岋紱</strong></p> <p><strong>5. 闄ゅ嚱鏁板畾涔夌殑宸﹀ぇ鎷彿鍙互緗簬琛岄澶栵紝鍖呮嫭鍑芥暟/綾?緇撴瀯浣?鏋氫婦澹版槑銆佸悇縐嶈鍙ョ殑宸﹀ぇ鎷彿緗簬琛屽熬錛屾墍鏈夊彸澶ф嫭鍙風嫭绔嬫垚琛岋紱</strong></p> <p><strong>6. ./->鎿嶄綔絎﹀墠鍚庝笉鐣欑┖鏍鹼紝*/&涓嶈鍓嶅悗閮界暀錛屼竴涓氨鍙紝闈犲乏闈犲彸渚濆悇浜哄枩濂斤紱</strong></p> <p><strong>7. 棰勫鐞嗘寚浠?鍛藉悕絀洪棿涓嶄嬌鐢ㄩ澶栫緝榪涳紝綾?緇撴瀯浣?鏋氫婦/鍑芥暟/璇彞浣跨敤緙╄繘錛?/strong></p> <p><strong>8. 鍒濆鍖栫敤=榪樻槸()渚濅釜浜哄枩濂斤紝緇熶竴灝卞ソ錛?/strong></p> <p><strong>9. return涓嶈鍔?)錛?/strong></p> <p><strong>10. 姘村鉤/鍨傜洿鐣欑櫧涓嶈婊ョ敤錛屾庝箞鏄撹鎬庝箞鏉ャ?/strong></p><img src ="http://www.shnenglu.com/Fox/aggbug/56922.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Fox/" target="_blank">Fox</a> 2008-07-23 11:43 <a href="http://www.shnenglu.com/Fox/archive/2008/07/23/56922.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>[璇慮Google C++緙栫▼椋庢牸鎸囧崡錛堝叚錛?/title><link>http://www.shnenglu.com/Fox/archive/2008/07/22/56873.html</link><dc:creator>Fox</dc:creator><author>Fox</author><pubDate>Tue, 22 Jul 2008 09:02:00 GMT</pubDate><guid>http://www.shnenglu.com/Fox/archive/2008/07/22/56873.html</guid><wfw:comment>http://www.shnenglu.com/Fox/comments/56873.html</wfw:comment><comments>http://www.shnenglu.com/Fox/archive/2008/07/22/56873.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Fox/comments/commentRss/56873.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Fox/services/trackbacks/56873.html</trackback:ping><description><![CDATA[<p>鍘熸枃鍦板潃錛?a title="Google C++ Style Guide" target="_blank" rel="tag">Google C++ Style Guide</a></p> <ul> <li><strong><font color="#800000">娉ㄩ噴</font></strong></li></ul> <p>娉ㄩ噴铏界劧鍐欒搗鏉ュ緢鐥涜嫤錛屼絾瀵逛繚璇佷唬鐮佸彲璇繪ц嚦涓洪噸瑕侊紝涓嬮潰鐨勮鍒欐弿榪頒簡搴旇娉ㄩ噴浠涔堛佹敞閲婂湪鍝効銆傚綋鐒朵篃瑕佽浣忥紝娉ㄩ噴鐨勭‘寰堥噸瑕侊紝浣嗘渶濂界殑浠g爜<font color="#800000">鏈韓灝辨槸鏂囨。錛坰elf-documenting錛?/font>錛岀被鍨嬪拰鍙橀噺鍛藉悕鎰忎箟鏄庣‘瑕佹瘮閫氳繃娉ㄩ噴瑙i噴妯$硦鐨勫懡鍚嶅ソ寰楀銆?/p> <p>娉ㄩ噴鏄負鍒漢錛堜笅涓涓渶瑕佺悊瑙d綘鐨勪唬鐮佺殑浜猴級鑰屽啓鐨勶紝璁ょ湡鐐瑰惂錛岄偅涓嬩竴涓漢鍙兘灝辨槸浣狅紒</p> <p><strong><font color="#800000">1. 娉ㄩ噴椋庢牸錛圕omment Style錛?/font></strong></p> <p>浣跨敤<code>//</code>鎴?code>/* */</code>錛岀粺涓灝卞ソ銆?/p> <p><code>//</code>鎴?code>/* */</code>閮藉彲浠ワ紝<code>//</code>鍙槸鐢ㄧ殑鏇村姞騫挎硾錛屽湪濡備綍娉ㄩ噴鍜屾敞閲婇鏍間笂紜繚緇熶竴銆?/p> <p></p> <p><strong><font color="#800000">2. 鏂囦歡娉ㄩ噴錛團ile Comments錛?/font></strong> <p>鍦ㄦ瘡涓涓枃浠跺紑澶村姞鍏ョ増鏉冨叕鍛婏紝鐒跺悗鏄枃浠跺唴瀹規弿榪般?/p> <p><strong>娉曞緥鍏憡鍜屼綔鑰呬俊鎭?/strong>錛?/p> <p>姣忎竴鏂囦歡鍖呭惈浠ヤ笅欏癸紝渚濇鏄細</p> <p>1) <font color="#800000">鐗堟潈錛坈opyright statement錛?/font>錛氬<code>Copyright 2008 Google Inc.</code>錛?/p> <p>2) <font color="#800000">璁稿彲鐗堟湰錛坙icense boilerplate錛?/font>錛氫負欏圭洰閫夋嫨鍚堥傜殑璁稿彲璇佺増鏈紝濡?a title="Apache License" target="_blank">Apache 2.0</a>銆?a title="BSD licenses" target="_blank">BSD</a>銆?a title="GNU Lesser General Public License" target="_blank">LGPL</a>銆?a title="GNU General Public License" target="_blank">GPL</a>錛?/p> <p>3) <font color="#800000">浣滆咃紙author line錛?/font>錛氭爣璇嗘枃浠剁殑鍘熷浣滆呫?/p> <p>濡傛灉浣犲鍏朵粬浜哄垱寤虹殑鏂囦歡鍋氫簡閲嶅ぇ淇敼錛屽皢浣犵殑淇℃伅娣誨姞鍒頒綔鑰呬俊鎭噷錛岃繖鏍峰綋鍏朵粬浜哄璇ユ枃浠舵湁鐤戦棶鏃跺彲浠ョ煡閬撹鑱旂郴璋併?/p> <p><strong>鏂囦歡鍐呭</strong>錛?/p> <p>姣忎竴涓枃浠剁増鏉冭鍙強浣滆呬俊鎭悗錛岄兘瑕佸鏂囦歡鍐呭榪涜娉ㄩ噴璇存槑銆?/p> <p>閫氬父錛?code>.h</code>鏂囦歡瑕佸鎵澹版槑鐨勭被鐨勫姛鑳藉拰鐢ㄦ硶浣滅畝鍗曡鏄庯紝<code>.cc</code>鏂囦歡鍖呭惈浜嗘洿澶氱殑瀹炵幇緇嗚妭鎴栫畻娉曡璁猴紝濡傛灉浣犳劅瑙夎繖浜涘疄鐜扮粏鑺傛垨綆楁硶璁ㄨ瀵逛簬闃呰鏈夊府鍔╋紝鍙互鎶?code>.cc</code>涓殑娉ㄩ噴鏀懼埌<code>.h</code>涓紝騫跺湪<code>.cc</code>涓寚鍑烘枃妗e湪<code>.h</code>涓?/p> <p>涓嶈鍗曠函鍦?code>.h</code>鍜?code>.cc</code>闂村鍒舵敞閲婏紝澶嶅埗鐨勬敞閲婂亸紱諱簡瀹為檯鎰忎箟銆?/p> <p><strong><font color="#800000">3. 綾繪敞閲婏紙Class Comments錛?/font></strong></p> <p>姣忎釜綾葷殑瀹氫箟瑕侀檮鐫鎻忚堪綾葷殑鍔熻兘鍜岀敤娉曠殑娉ㄩ噴銆?/p><pre>// Iterates over the contents of a GargantuanTable. Sample usage: // GargantuanTable_Iterator* iter = table->NewIterator(); // for (iter->Seek("foo"); !iter->done(); iter->Next()) { // process(iter->key(), iter->value()); // } // delete iter; class GargantuanTable_Iterator { ... }; </pre> <p>濡傛灉浣犺寰楀凡緇忓湪鏂囦歡欏墮儴璇︾粏鎻忚堪浜嗚綾伙紝鎯崇洿鎺ョ畝鍗曠殑鏉ヤ笂涓鍙モ滃畬鏁存弿榪拌鏂囦歡欏墮儴鈥濈殑璇濓紝榪樻槸澶氬皯鍦ㄧ被涓姞鐐規敞閲婂惂銆?/p> <p>濡傛灉綾繪湁浠諱綍<font color="#800000">鍚屾鍓嶆彁錛坰ynchronization assumptions錛?/font>錛屾枃妗h鏄庝箣銆傚鏋滆綾葷殑瀹炰緥鍙澶氱嚎紼嬭闂紝浣跨敤鏃跺姟蹇呮敞鎰忔枃妗h鏄庛?/p> <p><strong><font color="#800000">4. 鍑芥暟娉ㄩ噴錛團unction Comments錛?/font></strong></p> <p>鍑芥暟澹版槑澶勬敞閲婃弿榪板嚱鏁板姛鑳斤紝瀹氫箟澶勬弿榪板嚱鏁板疄鐜般?/p> <p><strong>鍑芥暟澹版槑</strong>錛?/p> <p>娉ㄩ噴浜庡0鏄庝箣鍓嶏紝鎻忚堪鍑芥暟鍔熻兘鍙婄敤娉曪紝娉ㄩ噴浣跨敤鎻忚堪寮忥紙"Opens the file"錛夎岄潪鎸囦護寮忥紙"Open the file"錛夛紱娉ㄩ噴鍙槸涓轟簡鎻忚堪鍑芥暟鑰屼笉鏄憡璇夊嚱鏁板仛浠涔堛傞氬父錛屾敞閲婁笉浼氭弿榪板嚱鏁板浣曞疄鐜幫紝閭f槸瀹氫箟閮ㄥ垎鐨勪簨鎯呫?/p> <p>鍑芥暟澹版槑澶勬敞閲婄殑鍐呭錛?/p> <p>1) <font color="#800000">inputs錛堣緭鍏ワ級</font>鍙?font color="#800000">outputs錛堣緭鍑猴級</font>錛?/p> <p>2) 瀵圭被鎴愬憳鍑芥暟鑰岃█錛氬嚱鏁拌皟鐢ㄦ湡闂村璞℃槸鍚﹂渶瑕佷繚鎸佸紩鐢ㄥ弬鏁幫紝鏄惁浼氶噴鏀捐繖浜涘弬鏁幫紱</p> <p>3) 濡傛灉鍑芥暟鍒嗛厤浜嗙┖闂達紝闇瑕佺敱璋冪敤鑰呴噴鏀撅紱</p> <p>4) 鍙傛暟鏄惁鍙互涓?code>NULL</code>錛?/p> <p>5) 鏄惁瀛樺湪鍑芥暟浣跨敤鐨?font color="#800000">鎬ц兘闅愬咖錛坧erformance implications錛?/font>錛?/p> <p>6) 濡傛灉鍑芥暟鏄?font color="#800000">鍙噸鍏ョ殑錛坮e-entrant錛?/font>錛屽叾<font color="#800000">鍚屾鍓嶆彁錛坰ynchronization assumptions錛?/font>鏄粈涔堬紵</p> <p>涓句緥濡備笅錛?/p><pre>// Returns an iterator for this table. It is the client's // responsibility to delete the iterator when it is done with it, // and it must not use the iterator once the GargantuanTable object // on which the iterator was created has been deleted. // // The iterator is initially positioned at the beginning of the table. // // This method is equivalent to: // Iterator* iter = table->NewIterator(); // iter->Seek(""); // return iter; // If you are going to immediately seek to another place in the // returned iterator, it will be faster to use NewIterator() // and avoid the extra seek. Iterator* GetIterator() const; </pre> <p>浣嗕笉瑕佹湁鏃犺皳鍐椾綑鎴栨樉鑰屾槗瑙佺殑娉ㄩ噴錛屼笅闈㈢殑娉ㄩ噴灝辨病鏈夊繀瑕佸姞涓娾渞eturns false otherwise鈥濓紝鍥犱負宸茬粡鏆楀惈鍏朵腑浜嗭細</p><pre>// Returns true if the table cannot hold any more entries. bool IsTableFull(); </pre> <p>娉ㄩ噴鏋勯?鏋愭瀯鍑芥暟鏃訛紝璁頒綇錛岃浠g爜鐨勪漢鐭ラ亾鏋勯?鏋愭瀯鍑芥暟鏄粈涔堬紝鎵浠モ渄estroys this object鈥濊繖鏍風殑娉ㄩ噴鏄病鏈夋剰涔夌殑銆傝鏄庢瀯閫犲嚱鏁板鍙傛暟鍋氫簡浠涔堬紙渚嬪錛屾槸鍚︽槸鎸囬拡鐨勬墍鏈夎咃級浠ュ強鏋愭瀯鍑芥暟娓呯悊浜嗕粈涔堬紝濡傛灉閮芥槸鏃犲叧绱ц鐨勫唴瀹癸紝鐩存帴鐪佹帀娉ㄩ噴錛屾瀽鏋勫嚱鏁板墠娌℃湁娉ㄩ噴鏄緢姝e父鐨勩?/p> <p><strong>鍑芥暟瀹氫箟</strong>錛?/p> <p>姣忎釜鍑芥暟瀹氫箟鏃惰浠ユ敞閲婅鏄庡嚱鏁板姛鑳藉拰瀹炵幇瑕佺偣錛屽浣跨敤鐨勬紓浜唬鐮併佸疄鐜扮殑綆瑕佹楠ゃ佸姝ゅ疄鐜扮殑鐞嗙敱銆佷負浠涔堝墠鍗婇儴鍒嗚鍔犻攣鑰屽悗鍗婇儴鍒嗕笉闇瑕併?/p> <p>涓嶈浠?code>.h</code>鏂囦歡鎴栧叾浠栧湴鏂圭殑鍑芥暟澹版槑澶勭洿鎺ュ鍒舵敞閲婏紝綆瑕佽鏄庡嚱鏁板姛鑳芥槸鍙互鐨勶紝浣嗛噸鐐硅鏀懼湪濡備綍瀹炵幇涓娿?/p> <p><strong><font color="#800000">5. 鍙橀噺娉ㄩ噴錛圴ariable Comments錛?/font></strong></p> <p>閫氬父鍙橀噺鍚嶆湰韜凍浠ュ緢濂借鏄庡彉閲忕敤閫旓紝鐗瑰畾鎯呭喌涓嬶紝闇瑕侀澶栨敞閲婅鏄庛?/p> <p><strong>綾繪暟鎹垚鍛?/strong>錛?/p> <p>姣忎釜綾繪暟鎹垚鍛橈紙涔熷彨瀹炰緥鍙橀噺鎴栨垚鍛樺彉閲忥級搴旀敞閲婅鏄庣敤閫旓紝濡傛灉鍙橀噺鍙互鎺ュ彈<code>NULL</code>鎴?1絳?font color="#800000">璀︽垝鍊鹼紙sentinel values錛?/font>錛岄』璇存槑涔嬶紝濡傦細</p><pre>private: // Keeps track of the total number of entries in the table. // Used to ensure we do not go over the limit. -1 means // that we don't yet know how many entries the table has. int num_total_entries_; </pre> <p><strong>鍏ㄥ眬鍙橀噺錛堝父閲忥級</strong>錛?/p> <p>鍜屾暟鎹垚鍛樼浉浼鹼紝鎵鏈夊叏灞鍙橀噺錛堝父閲忥級涔熷簲娉ㄩ噴璇存槑鍚箟鍙婄敤閫旓紝濡傦細</p><pre>// The total number of tests cases that we run through in this regression test. const int kNumTestCases = 6; </pre> <p><strong><font color="#800000">6. 瀹炵幇娉ㄩ噴錛圛mplementation Comments錛?/font></strong></p> <p>瀵逛簬瀹炵幇浠g爜涓閥濡欑殑銆佹櫐娑╃殑銆佹湁瓚g殑銆侀噸瑕佺殑鍦版柟鍔犱互娉ㄩ噴銆?/p> <p><strong>浠g爜鍓嶆敞閲?/strong>錛?/p> <p>鍑哄僵鐨勬垨澶嶆潅鐨勪唬鐮佸潡鍓嶈鍔犳敞閲婏紝濡傦細</p><pre>// Divide result by two, taking into account that x // contains the carry from the add. for (int i = 0; i < result->size(); i++) { x = (x << 8) + (*result)[i]; (*result)[i] = x >> 1; x &= 1; } </pre> <p><strong>琛屾敞閲?/strong>錛?/p> <p>姣旇緝闅愭櫐鐨勫湴鏂硅鍦ㄨ灝懼姞鍏ユ敞閲婏紝鍙互鍦ㄤ唬鐮佷箣鍚庣┖涓ゆ牸鍔犺灝炬敞閲婏紝濡傦細</p><pre>// If we have enough memory, mmap the data portion too. mmap_budget = max<int64>(0, mmap_budget - index_->length()); if (mmap_budget >= data_size_ && !MmapData(mmap_chunk_bytes, mlock)) return; // Error already logged. </pre> <p>娉ㄦ剰錛屾湁涓ゅ潡娉ㄩ噴鎻忚堪榪欐浠g爜錛屽綋鍑芥暟榪斿洖鏃舵敞閲婃彁鍙婇敊璇凡緇忚璁板叆鏃ュ織銆?/p> <p>鍓嶅悗鐩擱偦鍑犺閮芥湁娉ㄩ噴錛屽彲浠ラ傚綋璋冩暣浣夸箣鍙鎬ф洿濂斤細</p><pre>... DoSomething(); // Comment here so the comments line up. DoSomethingElseThatIsLonger(); // Comment here so there are two spaces between // the code and the comment. ... </pre> <p><strong>NULL銆乼rue/false銆?銆?銆?鈥︹?/strong>錛?/p> <p>鍚戝嚱鏁頒紶鍏ャ佸竷灝斿兼垨鏁存暟鏃訛紝瑕佹敞閲婅鏄庡惈涔夛紝鎴栦嬌鐢ㄥ父閲忚浠g爜鏈涙枃鐭ユ剰錛屾瘮杈冧竴涓嬶細</p><pre>bool success = CalculateSomething(interesting_value, 10, false, NULL); // What are these arguments?? </pre> <p>鍜岋細</p><pre>bool success = CalculateSomething(interesting_value, 10, // Default base value. false, // Not the first time we're calling this. NULL); // No callback. </pre> <p>浣跨敤甯擱噺鎴栨弿榪版у彉閲忥細</p><pre>const int kDefaultBaseValue = 10; const bool kFirstTimeCalling = false; Callback *null_callback = NULL; bool success = CalculateSomething(interesting_value, kDefaultBaseValue, kFirstTimeCalling, null_callback); </pre> <p><strong>涓嶈</strong>錛?/p> <p>娉ㄦ剰姘歌繙涓嶈鐢ㄨ嚜鐒惰璦緲昏瘧浠g爜浣滀負娉ㄩ噴錛岃鍋囪璇諱綘浠g爜鐨勪漢C++姣斾綘寮?D錛?/p><pre>// Now go through the b array and make sure that if i occurs, // the next element is i+1. ... // Geez. What a useless comment. </pre> <p><strong><font color="#800000">7. 鏍囩偣銆佹嫾鍐欏拰璇硶錛圥unctuation, Spelling and Grammar錛?/font></strong></p> <p>鐣欐剰鏍囩偣銆佹嫾鍐欏拰璇硶錛屽啓鐨勫ソ鐨勬敞閲婃瘮宸殑瑕佹槗璇葷殑澶氥?/p> <p>娉ㄩ噴涓鑸槸鍖呭惈閫傚綋澶у啓鍜屽彞鐐癸紙.錛夌殑瀹屾暣鐨勫彞瀛愶紝鐭竴鐐圭殑娉ㄩ噴錛堝浠g爜琛屽熬鐨勬敞閲婏級鍙互闅忔剰鐐癸紝渚濈劧瑕佹敞鎰忛鏍肩殑涓鑷存с傚畬鏁寸殑鍙ュ瓙鍙鎬ф洿濂斤紝涔熷彲浠ヨ鏄庤娉ㄩ噴鏄畬鏁寸殑鑰屼笉鏄竴鐐逛笉鎴愮啛鐨勬兂娉曘?/p> <p>铏界劧琚埆浜烘寚鍑鴻鐢?font color="#800000">鍒嗗彿錛坰emicolon錛?/font>鐨勬椂鍊欑敤浜?font color="#800000">閫楀彿錛坈omma錛?/font>鏈夌偣灝村艾銆傛竻鏅版槗璇葷殑浠g爜榪樻槸寰堥噸瑕佺殑錛岄傚綋鐨勬爣鐐廣佹嫾鍐欏拰璇硶瀵規浼氭湁鎵甯姪銆?/p> <p><strong><font color="#800000">8. TODO娉ㄩ噴錛圱ODO Comments錛?/font></strong></p> <p>瀵歸偅浜涗復鏃剁殑銆佺煭鏈熺殑瑙e喅鏂規錛屾垨宸茬粡澶熷ソ浣嗗茍涓嶅畬緹庣殑浠g爜浣跨敤<code>TODO</code>娉ㄩ噴銆?/p> <p>榪欐牱鐨勬敞閲婅浣跨敤鍏ㄥぇ鍐欑殑瀛楃涓?code>TODO</code>錛屽悗闈?font color="#800000">鎷彿錛坧arentheses錛?/font>閲屽姞涓婁綘鐨勫ぇ鍚嶃侀偖浠跺湴鍧絳夛紝榪樺彲浠ュ姞涓?font color="#800000">鍐掑彿錛坈olon錛?/font>錛氱洰鐨勬槸鍙互鏍規嵁緇熶竴鐨?code>TODO</code>鏍煎紡榪涜鏌ユ壘錛?/p><pre>// TODO(kl@gmail.com): Use a "*" here for concatenation operator. // TODO(Zeke) change this to use relations. </pre> <p>濡傛灉鍔犱笂鏄負浜嗗湪鈥滃皢鏉ユ煇涓澶╁仛鏌愪簨鈥濓紝鍙互鍔犱笂涓涓壒瀹氱殑鏃墮棿錛?Fix by November 2005"錛夋垨浜嬩歡錛?Remove this code when all clients can handle XML responses."錛夈?/p> <p>______________________________________ </p> <p>璇戣咃細娉ㄩ噴涔熸槸姣旇緝浜烘у寲鐨勭害瀹氫簡錛? <p><strong>1. 鍏充簬娉ㄩ噴椋庢牸錛屽緢澶欳++鐨刢oders鏇村枩嬈㈣娉ㄩ噴錛孋 coders鎴栬瀵瑰潡娉ㄩ噴渚濈劧鎯呮湁鐙挓錛屾垨鑰呭湪鏂囦歡澶村ぇ孌靛ぇ孌電殑娉ㄩ噴鏃朵嬌鐢ㄥ潡娉ㄩ噴錛?/strong></p> <p><strong>2. </strong><strong>鏂囦歡娉ㄩ噴鍙互鐐浣犵殑鎴愬氨錛屼篃鏄負浜嗘崊浜嗙瘬瀛愬埆浜哄彲浠ユ壘浣狅紱</strong></p> <p><strong>3. 娉ㄩ噴瑕佽█綆鎰忚祬錛屼笉瑕佹嫋娌撳啑浣欙紝澶嶆潅鐨勪笢瑗跨畝鍗曞寲鍜岀畝鍗曠殑涓滆タ澶嶆潅鍖栭兘鏄琚剻瑙嗙殑錛?/strong></p> <p><strong>4. 瀵逛簬Chinese coders鏉ヨ錛岀敤鑻辨枃娉ㄩ噴榪樻槸鐢ㄤ腑鏂囨敞閲婏紝it is a problem錛屼絾涓嶇鎬庢牱錛屾敞閲婃槸涓轟簡璁╁埆浜虹湅鎳傦紝闅鵑亾鏄負浜嗙偒鑰緙栫▼璇█涔嬪鐨勪綘鐨勬瘝璇垨澶栬姘村鉤鍚楋紱</strong></p> <p><strong>5. 娉ㄩ噴涓嶈澶貢錛岄傚綋鐨勭緝榪涙墠浼氳浜轟箰鎰忕湅錛屼絾涔熸病鏈夊繀瑕佽瀹氭敞閲婁粠絎嚑鍒楀紑濮嬶紙鎴戣嚜宸卞啓浠g爜鐨勬椂鍊欐誨枩嬈㈣繖鏍鳳級錛孶NIX/LINUX涓嬭繕鍙互綰﹀畾鏄嬌鐢╰ab榪樻槸space錛屼釜浜哄懼悜浜巗pace錛?/strong></p> <p><strong>6. TODO寰堜笉閿欙紝鏈夋椂鍊欙紝娉ㄩ噴紜疄鏄負浜嗘爣璁頒竴浜涙湭瀹屾垚鐨勬垨瀹屾垚鐨勪笉灝藉浜烘剰鐨勫湴鏂癸紝榪欐牱涓鎼滅儲錛屽氨鐭ラ亾榪樻湁鍝簺媧昏騫詫紝鏃ュ織閮界渷浜嗐?/strong></p><img src ="http://www.shnenglu.com/Fox/aggbug/56873.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Fox/" target="_blank">Fox</a> 2008-07-22 17:02 <a href="http://www.shnenglu.com/Fox/archive/2008/07/22/56873.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>[璇慮Google C++緙栫▼椋庢牸鎸囧崡錛堜簲錛?/title><link>http://www.shnenglu.com/Fox/archive/2008/07/22/56845.html</link><dc:creator>Fox</dc:creator><author>Fox</author><pubDate>Tue, 22 Jul 2008 03:59:00 GMT</pubDate><guid>http://www.shnenglu.com/Fox/archive/2008/07/22/56845.html</guid><wfw:comment>http://www.shnenglu.com/Fox/comments/56845.html</wfw:comment><comments>http://www.shnenglu.com/Fox/archive/2008/07/22/56845.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/Fox/comments/commentRss/56845.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Fox/services/trackbacks/56845.html</trackback:ping><description><![CDATA[<p>鍘熸枃鍦板潃錛?a title="Google C++ Style Guide" target="_blank" rel="tag">Google C++ Style Guide</a></p> <ul> <li><strong><font color="#800000">鍛藉悕綰﹀畾</font></strong></li></ul> <p>鏈閲嶈鐨勪竴鑷存ц鍒欐槸鍛藉悕綆$悊錛屽懡鍚嶉鏍肩洿鎺ュ彲浠ョ洿鎺ョ‘瀹氬懡鍚嶅疄浣撴槸錛氱被鍨嬨佸彉閲忋佸嚱鏁般佸父閲忋佸畯絳夌瓑錛屾棤闇鏌ユ壘瀹炰綋澹版槑錛屾垜浠ぇ鑴戜腑鐨勬ā寮忓尮閰嶅紩鎿庝緷璧栦簬榪欎簺鍛藉悕瑙勫垯銆?/p> <p>鍛藉悕瑙勫垯鍏鋒湁涓瀹氶殢鎰忔э紝浣嗙浉姣旀寜涓漢鍠滃ソ鍛藉悕錛屼竴鑷存ф洿閲嶈錛屾墍浠ヤ笉綆′綘鎬庝箞鎯籌紝瑙勫垯鎬誨綊鏄鍒欍?/p> <p><strong><font color="#800000">1. 閫氱敤鍛藉悕瑙勫垯錛圙eneral Naming Rules錛?/font></strong></p> <p>鍑芥暟鍛藉悕銆佸彉閲忓懡鍚嶃佹枃浠跺懡鍚嶅簲鍏鋒湁鎻忚堪鎬э紝涓嶈榪囧害緙╁啓錛岀被鍨嬪拰鍙橀噺搴旇鏄悕璇嶏紝鍑芥暟鍚嶅彲浠ョ敤鈥滃懡浠ゆр濆姩璇嶃?/p> <p><strong>濡備綍鍛藉悕</strong>錛? <p>灝藉彲鑳界粰鍑烘弿榪版у悕縐幫紝涓嶈鑺傜害絀洪棿錛岃鍒漢寰堝揩鐞嗚В浣犵殑浠g爜鏇撮噸瑕侊紝濂界殑鍛藉悕閫夋嫨錛?pre>int num_errors; // Good. int num_completed_connections; // Good.</pre> <p></p> <p>涓戦檵鐨勫懡鍚嶄嬌鐢ㄦā緋婄殑緙╁啓鎴栭殢鎰忕殑瀛楃錛?pre>int n; // Bad - meaningless. int nerr; // Bad - ambiguous abbreviation. int n_comp_conns; // Bad - ambiguous abbreviation.</pre> <p></p> <p>綾誨瀷鍜屽彉閲忓悕涓鑸負鍚嶈瘝錛氬<code>FileOpener</code>銆?code>num_errors</code>銆? <p>鍑芥暟鍚嶉氬父鏄寚浠ゆх殑錛屽<code>OpenFile()</code>銆?code>set_num_errors()</code>錛岃闂嚱鏁伴渶瑕佹弿榪扮殑鏇寸粏鑷達紝瑕佷笌鍏惰闂殑鍙橀噺鐩稿惢鍚堛? <p><strong>緙╁啓</strong>錛? <p>闄ら潪鏀懼埌欏圭洰澶栦篃闈炲父鏄庝簡錛屽惁鍒欎笉瑕佷嬌鐢ㄧ緝鍐欙紝渚嬪錛?pre>// Good // These show proper names with no abbreviations. int num_dns_connections; // Most people know what "DNS" stands for. int price_count_reader; // OK, price count. Makes sense.</pre><pre> </pre><pre>// Bad! // Abbreviations can be confusing or ambiguous outside a small group. int wgc_connections; // Only your group knows what this stands for. int pc_reader; // Lots of things can be abbreviated "pc".</pre> <p></p> <p>涓嶈鐢ㄧ渷鐣ュ瓧姣嶇殑緙╁啓錛?pre>int error_count; // Good.</pre><pre>int error_cnt; // Bad.</pre> <p></p> <p><strong><font color="#800000">2. 鏂囦歡鍛藉悕錛團ile Names錛?/font></strong> <p>鏂囦歡鍚嶈鍏ㄩ儴灝忓啓錛屽彲浠ュ寘鍚笅鍒掔嚎錛坃錛夋垨鐭嚎錛?錛夛紝鎸夐」鐩害瀹氭潵銆?/p> <p>鍙帴鍙楃殑鏂囦歡鍛藉悕錛?/p> <p><code>my_useful_class.cc<br>my-useful-class.cc<br>myusefulclass.cc</code></p> <p>C++鏂囦歡浠?code>.cc</code>緇撳熬錛屽ご鏂囦歡浠?code>.h</code>緇撳熬銆?/p> <p>涓嶈浣跨敤宸茬粡瀛樺湪浜?code>/usr/include</code>涓嬬殑鏂囦歡鍚?font color="#800000">錛堣瘧鑰呮敞錛屽UNIX銆丩inux絳夌郴緇熻岃█錛?/font>錛屽<code>db.h</code>銆?/p> <p>閫氬父錛屽敖閲忚鏂囦歡鍚嶆洿鍔犳槑紜紝<code>http_server_logs.h</code>灝辨瘮<code>logs.h</code>瑕佸ソ錛屽畾涔夌被鏃舵枃浠跺悕涓鑸垚瀵瑰嚭鐜幫紝濡?code>foo_bar.h</code>鍜?code>foo_bar.cc</code>錛屽搴旂被<code>FooBar</code>銆?/p> <p>鍐呰仈鍑芥暟蹇呴』鏀懼湪<code>.h</code>鏂囦歡涓紝濡傛灉鍐呰仈鍑芥暟姣旇緝鐭紝灝辯洿鎺ユ斁鍦?code>.h</code>涓傚鏋滀唬鐮佹瘮杈冮暱錛屽彲浠ユ斁鍒頒互<code>-inl.h</code>緇撳熬鐨勬枃浠朵腑銆傚浜庡寘鍚ぇ閲忓唴鑱斾唬鐮佺殑綾伙紝鍙互鏈変笁涓枃浠訛細</p><pre>url_table.h // The class declaration. url_table.cc // The class definition. url_table-inl.h // Inline functions that include lots of code.</pre> <p></p> <p>鍙傝?a title="[璇慮Google C++緙栫▼椋庢牸鎸囧崡錛堜竴錛? href="http://www.shnenglu.com/Fox/archive/2008/07/10/55818.html" target="_blank">絎竴綃?/a><strong>-inl.h鏂囦歡</strong>涓鑺傘?/p> <p><strong><font color="#800000">3. 綾誨瀷鍛藉悕錛圱ype Names錛?/font></strong></p> <p>綾誨瀷鍛藉悕姣忎釜鍗曡瘝浠ュぇ鍐欏瓧姣嶅紑澶達紝涓嶅寘鍚笅鍒掔嚎錛?code>MyExcitingClass</code>銆?code>MyExcitingEnum</code>銆?/p> <p>鎵鏈夌被鍨嬪懡鍚嶁斺旂被銆佺粨鏋勪綋銆佺被鍨嬪畾涔夛紙typedef錛夈佹灇涓鋸斺斾嬌鐢ㄧ浉鍚岀害瀹氾紝渚嬪錛?/p> <p><pre>// classes and structs class UrlTable { ... class UrlTableTester { ... struct UrlTableProperties { ... // typedefs typedef hash_map<UrlTableProperties *, string> PropertiesMap; // enums enum UrlTableErrors { ...</pre> <p></p> <p><strong><font color="#800000">4. 鍙橀噺鍛藉悕錛圴ariable Names錛?/font></strong></p> <p>鍙橀噺鍚嶄竴寰嬪皬鍐欙紝鍗曡瘝闂翠互涓嬪垝綰跨浉榪烇紝綾葷殑鎴愬憳鍙橀噺浠ヤ笅鍒掔嚎緇撳熬錛屽<code>my_exciting_local_variable</code>銆?code>my_exciting_member_variable_</code>銆?/p> <p><strong>鏅氬彉閲忓懡鍚?/strong>錛?/p> <p>涓句緥錛?/p><pre>string table_name; // OK - uses underscore. string tablename; // OK - all lowercase.</pre><pre>string tableName; // Bad - mixed case.</pre> <p></p> <p></p> <p><strong>綾繪暟鎹垚鍛?/strong>錛?/p> <p>緇撴瀯浣撶殑鏁版嵁鎴愬憳鍙互鍜屾櫘閫氬彉閲忎竴鏍鳳紝涓嶇敤鍍忕被閭f牱鎺ヤ笅鍒掔嚎錛?/p><pre>struct UrlTableProperties { string name; int num_entries; }</pre> <p></p> <p>緇撴瀯浣撲笌綾葷殑璁ㄨ鍙傝?a title="[璇慮Google C++緙栫▼椋庢牸鎸囧崡錛堜笁錛? href="http://www.shnenglu.com/Fox/archive/2008/07/16/56324.html" target="_blank">絎笁綃?/a><strong>緇撴瀯浣搗s.綾?/strong>涓鑺傘?/p> <p><strong>鍏ㄥ眬鍙橀噺</strong>錛?/p> <p>瀵瑰叏灞鍙橀噺娌℃湁鐗瑰埆瑕佹眰錛屽皯鐢ㄥ氨濂斤紝鍙互浠?code>g_</code>鎴栧叾浠栨槗涓庡眬閮ㄥ彉閲忓尯鍒嗙殑鏍囧織涓哄墠緙銆?/p> <p><strong><font color="#800000">5. 甯擱噺鍛藉悕錛圕onstant Names錛?/font></strong></p> <p>鍦ㄥ悕縐板墠鍔?code>k</code>錛?code>kDaysInAWeek</code>銆?/p> <p>鎵鏈夌紪璇戞椂甯擱噺錛堟棤璁烘槸灞閮ㄧ殑銆佸叏灞鐨勮繕鏄被涓殑錛夊拰鍏朵粬鍙橀噺淇濇寔浜涜鍖哄埆錛?code>k</code>鍚庢帴澶у啓瀛楁瘝寮澶寸殑鍗曡瘝錛?/p><pre>const int kDaysInAWeek = 7;</pre> <p></p> <p><strong><font color="#800000">6. 鍑芥暟鍛藉悕錛團unction Names錛?/font></strong></p> <p><font color="#800000">鏅氬嚱鏁幫紙regular functions錛岃瘧鑰呮敞錛岃繖閲屼笌璁塊棶鍑芥暟絳夌壒孌婂嚱鏁扮浉瀵癸級</font>澶у皬鍐欐販鍚堬紝<font color="#800000">瀛樺彇鍑芥暟錛坅ccessors and mutators錛?/font>鍒欒姹備笌鍙橀噺鍚嶅尮閰嶏細<code>MyExcitingFunction()</code>銆?code>MyExcitingMethod()</code>銆?code>my_exciting_member_variable()</code>銆?code>set_my_exciting_member_variable()</code>銆?/p> <p><strong>鏅氬嚱鏁?/strong>錛?/p> <p>鍑芥暟鍚嶄互澶у啓瀛楁瘝寮澶達紝姣忎釜鍗曡瘝棣栧瓧姣嶅ぇ鍐欙紝娌℃湁涓嬪垝綰匡細</p><pre>AddTableEntry() DeleteUrl()</pre> <p></p> <p><strong>瀛樺彇鍑芥暟</strong>錛?/p> <p>瀛樺彇鍑芥暟瑕佷笌瀛樺彇鐨勫彉閲忓悕鍖歸厤錛岃繖鍎挎憳褰曚竴涓嫢鏈夊疄渚嬪彉閲?code>num_entries_</code>鐨勭被錛?/p><pre>class MyClass { public: ... int num_entries() const { return num_entries_; } void set_num_entries(int num_entries) { num_entries_ = num_entries; } private: int num_entries_; };</pre> <p></p> <p>鍏朵粬鐭皬鐨勫唴鑱斿嚱鏁板悕涔熷彲浠ヤ嬌鐢ㄥ皬鍐欏瓧姣嶏紝渚嬪錛屽湪寰幆涓皟鐢ㄨ繖鏍風殑鍑芥暟鐢氳嚦閮戒笉闇瑕佺紦瀛樺叾鍊鹼紝灝忓啓鍛藉悕灝卞彲浠ユ帴鍙椼?/p> <p><strong>璇戣呮敞錛氫粠榪欎竴鐐逛笂鍙互鐪嬪嚭錛屽皬鍐欑殑鍑芥暟鍚嶆剰鍛崇潃鍙互鐩存帴鍐呰仈浣跨敤銆?/strong></p> <p><strong><font color="#800000">7. 鍛藉悕絀洪棿錛圢amespace Names錛?/font></strong></p> <p>鍛藉悕絀洪棿鐨勫悕縐版槸鍏ㄥ皬鍐欑殑錛屽叾鍛藉悕鍩轟簬欏圭洰鍚嶇О鍜岀洰褰曠粨鏋勶細<code>google_awesome_project</code>銆?/p> <p>鍏充簬鍛藉悕絀洪棿鐨勮璁哄拰濡備綍鍛藉悕錛屽弬鑰?a title="[璇慮Google C++緙栫▼椋庢牸鎸囧崡錛堜簩錛? href="http://www.shnenglu.com/Fox/archive/2008/07/14/56109.html" target="_blank">絎簩綃?/a><strong>鍛藉悕絀洪棿</strong>銆?/p> <p><strong><font color="#800000">8. 鏋氫婦鍛藉悕錛圗numerator Names錛?/font></strong></p> <p>鏋氫婦鍊煎簲鍏ㄩ儴澶у啓錛屽崟璇嶉棿浠ヤ笅鍒掔嚎鐩歌繛錛?code>MY_EXCITING_ENUM_VALUE</code>銆?/p> <p>鏋氫婦鍚嶇О灞炰簬綾誨瀷錛屽洜姝ゅぇ灝忓啓娣峰悎錛?code>UrlTableErrors</code>銆?/p><pre>enum UrlTableErrors { OK = 0, ERROR_OUT_OF_MEMORY, ERROR_MALFORMED_INPUT, };</pre> <p></p> <p><strong><font color="#800000">9. 瀹忓懡鍚嶏紙Macro Names錛?/font></strong></p> <p>浣犲茍涓嶆墦綆椾嬌鐢ㄥ畯錛屽鍚э紵濡傛灉浣跨敤錛屽儚榪欐牱錛?code>MY_MACRO_THAT_SCARES_SMALL_CHILDREN</code>銆?/p> <p>鍙傝?a title="[璇慮Google C++緙栫▼椋庢牸鎸囧崡錛堝洓錛? href="http://www.shnenglu.com/Fox/archive/2008/07/21/56760.html" target="_blank">絎洓綃?/a><strong>棰勫鐞嗗畯</strong>錛岄氬父鏄笉浣跨敤瀹忕殑錛屽鏋滅粷瀵硅鐢紝鍏跺懡鍚嶅儚鏋氫婦鍛藉悕涓鏍峰叏閮ㄥぇ鍐欍佷嬌鐢ㄤ笅鍒掔嚎錛?/p> <p><pre>#define ROUND(x) ... #define PI_ROUNDED 3.0 MY_EXCITING_ENUM_VALUE</pre> <p></p> <p><strong><font color="#800000">10. 鍛藉悕瑙勫垯渚嬪錛圗xceptions to Naming Rules錛?/font></strong></p> <p>褰撳懡鍚嶄笌鐜版湁C/C++瀹炰綋鐩鎬技鐨勫璞℃椂錛屽彲鍙傝冪幇鏈夊懡鍚嶇害瀹氾細 <dl> <dt><code>bigopen()</code> <dd>鍑芥暟鍚嶏紝鍙傝?code>open()</code> <dt><code>uint</code> <dd><code>typedef綾誨瀷瀹氫箟</code> <dt><code>bigpos</code> <dd><code>struct</code>鎴?code>class錛屽弬鑰?/code><code>pos</code> <dt><code>sparse_hash_map</code> <dd>STL鐩鎬技瀹炰綋錛涘弬鑰僑TL鍛藉悕綰﹀畾 <dt><code>LONGLONG_MAX</code> <dd>甯擱噺錛岀被浼?code>INT_MAX</code></dd></dl> <p>______________________________________ </p> <p>璇戣咃細鍛藉悕綰﹀畾灝辯浉瀵硅交鏉捐澶氾紝鍦ㄩ伒浠庝唬鐮佷竴鑷存с佸彲璇繪х殑鍓嶆彁涓嬶紝鐣ユ樉闅忔剰錛? <p><strong>1. 鎬諱綋瑙勫垯錛氫笉瑕侀殢鎰忕緝鍐欙紝濡傛灉璇碈hangeLocalValue鍐欎綔ChgLocVal榪樻湁鎯呭彲鍘熺殑璇濓紝鎶奙odifyPlayerName鍐欎綔MdfPlyNm灝卞お榪囧垎浜嗭紝闄ゅ嚱鏁板悕鍙傚綋涓哄姩璇嶅錛屽叾浠栧懡鍚嶅敖閲忎嬌鐢ㄦ竻鏅版槗鎳傜殑鍚嶈瘝錛?/strong></p> <p><strong>2. </strong><strong>瀹忋佹灇涓劇瓑浣跨敤鍏ㄩ儴澶у啓+涓嬪垝綰匡紱</strong></p> <p><strong>3. 鍙橀噺錛堝惈綾匯佺粨鏋勪綋鎴愬憳鍙橀噺錛夈佹枃浠躲佸懡鍚嶇┖闂淬佸瓨鍙栧嚱鏁扮瓑浣跨敤鍏ㄩ儴灝忓啓+涓嬪垝綰匡紝綾繪垚鍛樺彉閲忎互涓嬪垝綰跨粨灝撅紝鍏ㄥ眬鍙橀噺浠_寮澶達紱</strong></p> <p><strong>4. 鏅氬嚱鏁般佺被鍨嬶紙鍚被涓庣粨鏋勪綋銆佹灇涓劇被鍨嬶級銆佸父閲忕瓑浣跨敤澶у皬鍐欐販鍚堬紝涓嶅惈涓嬪垝綰匡紱</strong></p> <p><strong>5. 鍙傝冪幇鏈夋垨鐩歌繎鍛藉悕綰﹀畾銆?/strong></p><img src ="http://www.shnenglu.com/Fox/aggbug/56845.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Fox/" target="_blank">Fox</a> 2008-07-22 11:59 <a href="http://www.shnenglu.com/Fox/archive/2008/07/22/56845.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>[璇慮Google C++緙栫▼椋庢牸鎸囧崡錛堝洓錛?/title><link>http://www.shnenglu.com/Fox/archive/2008/07/21/56760.html</link><dc:creator>Fox</dc:creator><author>Fox</author><pubDate>Mon, 21 Jul 2008 06:55:00 GMT</pubDate><guid>http://www.shnenglu.com/Fox/archive/2008/07/21/56760.html</guid><wfw:comment>http://www.shnenglu.com/Fox/comments/56760.html</wfw:comment><comments>http://www.shnenglu.com/Fox/archive/2008/07/21/56760.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.shnenglu.com/Fox/comments/commentRss/56760.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Fox/services/trackbacks/56760.html</trackback:ping><description><![CDATA[<p>鍘熸枃鍦板潃錛?a title="Google C++ Style Guide" target="_blank" rel="tag">Google C++ Style Guide</a></p> <ul> <li><strong><font color="#800000">Google鐗規湁鐨勯鎯?/font></strong></li></ul> <p>Google鏈夊緢澶氳嚜宸卞疄鐜扮殑浣緾++浠g爜鏇村姞鍋ュ.鐨勬妧宸с佸姛鑳斤紝浠ュ強鏈夊紓浜庡埆澶勭殑C++鐨勪嬌鐢ㄦ柟寮忋?/p> <p><strong><font color="#800000">1. 鏅鴻兘鎸囬拡錛圫mart Pointers錛?/font></strong></p> <p>濡傛灉紜疄闇瑕佷嬌鐢ㄦ櫤鑳芥寚閽堢殑璇濓紝scoped_ptr瀹屽叏鍙互鑳滀換銆傚湪闈炲父鐗規畩鐨勬儏鍐典笅錛屼緥濡傚STL瀹瑰櫒涓璞★紝浣犲簲璇ュ彧浣跨敤std::tr1::shared_ptr錛屼換浣曟儏鍐典笅閮戒笉瑕佷嬌鐢╝uto_ptr銆?/p> <p>鈥滄櫤鑳解濇寚閽堢湅涓婂幓鏄寚閽堬紝鍏跺疄鏄檮鍔犱簡璇箟鐨勫璞°備互scoped_ptr涓轟緥錛宻coped_ptr琚攢姣佹椂錛屽垹闄や簡瀹冩墍鎸囧悜鐨勫璞°俿hared_ptr涔熸槸濡傛錛岃屼笖錛宻hared_ptr瀹炵幇浜?font color="#800000">寮曠敤璁℃暟錛坮eference-counting錛?/font>錛屼粠鑰屽彧鏈夊綋瀹冩墍鎸囧悜鐨勬渶鍚庝竴涓璞¤閿姣佹椂錛屾寚閽堟墠浼氳鍒犻櫎銆?/p> <p>涓鑸潵璇達紝鎴戜滑鍊懼悜浜庤璁″璞¢毝灞炴槑紜殑浠g爜錛屾渶鏄庣‘鐨勫璞¢毝灞炴槸鏍規湰涓嶄嬌鐢ㄦ寚閽堬紝鐩存帴灝嗗璞′綔涓轟竴涓?font color="#800000">鍩燂紙field錛?/font>鎴栧眬閮ㄥ彉閲忎嬌鐢ㄣ傚彟涓縐嶆瀬绔槸寮曠敤璁℃暟鎸囬拡涓嶅睘浜庝換浣曞璞★紝榪欐牱璁捐鐨勯棶棰樻槸瀹規槗瀵艱嚧寰幆寮曠敤鎴栧叾浠栧鑷村璞℃棤娉曞垹闄ょ殑璇″紓鏉′歡錛岃屼笖鍦ㄦ瘡涓嬈℃嫹璐濇垨璧嬪兼椂榪炲師瀛愭搷浣滈兘浼氬緢鎱€?/p> <p>铏界劧涓嶆帹鑽愯繖涔堝仛錛屼絾鏈変簺鏃跺欙紝寮曠敤璁℃暟鎸囬拡鏄渶綆鍗曟湁鏁堢殑瑙e喅鏂規銆? <p><strong>璇戣呮敞錛氱湅鏉ワ紝Google鎵璋撶殑涓嶅悓涔嬪錛屽湪浜庡敖閲忛伩鍏嶄嬌鐢ㄦ櫤鑳芥寚閽?D錛屼嬌鐢ㄦ椂涔熷敖閲忓眬閮ㄥ寲錛屽茍涓旓紝瀹夊叏絎竴銆?/strong> <ul> <li><strong><font color="#800000">鍏朵粬C++鐗規?/font></strong></li></ul> <p><strong><font color="#800000">1. 寮曠敤鍙傛暟錛圧eference Arguments錛?/font></strong></p> <p>鎵浠ユ寜寮曠敤浼犻掔殑鍙傛暟蹇呴』鍔犱笂const銆?/p> <p><strong>瀹氫箟錛?/strong>鍦–璇█涓紝濡傛灉鍑芥暟闇瑕佷慨鏀瑰彉閲忕殑鍊鹼紝<font color="#800000">褰㈠弬錛坧arameter錛?/font>蹇呴』涓烘寚閽堬紝濡俰nt foo(int *pval)銆傚湪C++涓紝鍑芥暟榪樺彲浠ュ0鏄庡紩鐢ㄥ艦鍙傦細int foo(int &val)銆?/p> <p><strong>浼樼偣錛?/strong>瀹氫箟褰㈠弬涓哄紩鐢ㄩ伩鍏嶄簡鍍?*pval)++榪欐牱涓戦檵鐨勪唬鐮侊紝鍍忔嫹璐濇瀯閫犲嚱鏁拌繖鏍風殑搴旂敤涔熸槸蹇呴渶鐨勶紝鑰屼笖涓嶅儚鎸囬拡閭f牱涓嶆帴鍙楃┖鎸囬拡NULL銆?/p> <p><strong>緙虹偣錛?/strong>瀹規槗寮曡搗璇В錛屽洜涓哄紩鐢ㄥ湪璇硶涓婃槸鍊煎嵈鎷ユ湁鎸囬拡鐨勮涔夈?/p> <p><strong>緇撹錛?/strong></p> <p>鍑芥暟褰㈠弬琛ㄤ腑錛屾墍鏈夊紩鐢ㄥ繀欏繪槸const錛?/p><code> <p>void Foo(const string &in, string *out);</p></code> <p>浜嬪疄涓婅繖鏄竴涓‖鎬х害瀹氾細杈撳叆鍙傛暟涓哄兼垨甯告暟寮曠敤錛岃緭鍑哄弬鏁頒負鎸囬拡錛涜緭鍏ュ弬鏁板彲浠ユ槸甯告暟鎸囬拡錛屼絾涓嶈兘浣跨敤闈炲父鏁板紩鐢ㄥ艦鍙傘?/p> <p>鍦ㄥ己璋冨弬鏁頒笉鏄嫹璐濊屾潵錛屽湪瀵硅薄鐢熷懡鏈熷唴蹇呴』涓鐩村瓨鍦ㄦ椂鍙互浣跨敤甯告暟鎸囬拡錛屾渶濂藉皢榪欎簺鍦ㄦ敞閲婁腑璇︾粏璇存槑銆俠ind2nd鍜宮em_fun絳塖TL閫傞厤鍣ㄤ笉鎺ュ彈寮曠敤褰㈠弬錛岃繖縐嶆儏鍐典笅涔熷繀欏諱互鎸囬拡褰㈠弬澹版槑鍑芥暟銆?/p> <p><strong><font color="#800000">2. 鍑芥暟閲嶈澆錛團unction Overloading錛?/font></strong></p> <p>浠呭湪杈撳叆鍙傛暟綾誨瀷涓嶅悓銆佸姛鑳界浉鍚屾椂浣跨敤閲嶈澆鍑芥暟錛堝惈鏋勯犲嚱鏁幫級錛屼笉瑕佷嬌鐢ㄥ嚱鏁伴噸杞芥ā浠跨己鐪佸嚱鏁板弬鏁般?/p> <p><strong>瀹氫箟錛?/strong>鍙互瀹氫箟涓涓嚱鏁板弬鏁扮被鍨嬩負const string&錛屽茍瀹氫箟鍏墮噸杞藉嚱鏁扮被鍨嬩負const char*銆?/p><code> <p>class MyClass {<br>public:<br>  void Analyze(const string &text);<br>  void Analyze(const char *text, size_t textlen);<br>};</p></code> <p><strong>浼樼偣錛?/strong>閫氳繃閲嶈澆涓嶅悓鍙傛暟鐨勫悓鍚嶅嚱鏁幫紝浠や唬鐮佹洿鍔犵洿瑙傦紝妯℃澘鍖栦唬鐮侀渶瑕侀噸杞斤紝鍚屾椂涓鴻闂呭甫鏉ヤ究鍒┿?/p> <p><strong>緙虹偣錛?/strong>闄愬埗浣跨敤閲嶈澆鐨勪竴涓師鍥犳槸鍦ㄧ壒瀹氳皟鐢ㄥ寰堥毦紜畾鍒板簳璋冪敤鐨勬槸鍝釜鍑芥暟錛屽彟涓涓師鍥犳槸褰撴淳鐢熺被鍙噸杞藉嚱鏁扮殑閮ㄥ垎鍙橀噺浼氫護寰堝浜哄緇ф壙璇箟浜х敓鍥版儜銆傛澶栧湪闃呰搴撶殑瀹㈡埛绔唬鐮佹椂錛屽洜緙虹渷鍑芥暟鍙傛暟閫犳垚涓嶅繀瑕佺殑璐硅В銆?/p> <p><strong>緇撹錛?/strong>濡傛灉浣犳兂閲嶈澆涓涓嚱鏁幫紝鑰冭檻璁╁嚱鏁板悕鍖呭惈鍙傛暟淇℃伅錛屼緥濡傦紝浣跨敤AppendString()銆丄ppendInt()鑰屼笉鏄疉ppend()銆?/p> <p><strong><font color="#800000">3. 緙虹渷鍙傛暟錛圖efault Arguments錛?/font></strong></p> <p>紱佹浣跨敤緙虹渷鍑芥暟鍙傛暟銆?/p> <p><strong>浼樼偣錛?/strong>緇忓父鐢ㄥ埌涓涓嚱鏁板甫鏈夊ぇ閲忕己鐪佸鹼紝鍋跺皵浼氶噸鍐欎竴涓嬭繖浜涘鹼紝緙虹渷鍙傛暟涓哄緢灝戞秹鍙婄殑渚嬪鎯呭喌鎻愪緵浜嗗皯瀹氫箟涓浜涘嚱鏁扮殑鏂逛究銆? <p><strong>緙虹偣錛?/strong>澶у緇忓父浼氶氳繃鏌ョ湅鐜版湁浠g爜紜畾濡備綍浣跨敤API錛岀己鐪佸弬鏁頒嬌寰楀鍒剁矘璐翠互鍓嶇殑浠g爜闅句互鍛堢幇鎵鏈夊弬鏁幫紝褰撶己鐪佸弬鏁頒笉閫傜敤浜庢柊浠g爜鏃跺彲鑳藉鑷撮噸澶ч棶棰樸? <p><strong>緇撹錛?/strong>鎵鏈夊弬鏁板繀欏繪槑紜寚瀹氾紝寮哄埗紼嬪簭鍛樿冭檻API鍜屼紶鍏ョ殑鍚勫弬鏁板鹼紝閬垮厤浣跨敤鍙兘涓嶄負紼嬪簭鍛樻墍鐭ョ殑緙虹渷鍙傛暟銆? <p><strong><font color="#800000">4. 鍙橀暱鏁扮粍鍜宎lloca錛圴ariable-Length Arrays and alloca()錛?/font></strong></p> <p>紱佹浣跨敤鍙橀暱鏁扮粍鍜宎lloca()銆?/p> <p><strong>浼樼偣錛?/strong>鍙橀暱鏁扮粍鍏鋒湁嫻戠劧澶╂垚鐨勮娉曪紝鍙橀暱鏁扮粍鍜宎lloca()涔熼兘寰堥珮鏁堛?/p> <p><strong>緙虹偣錛?/strong>鍙橀暱鏁扮粍鍜宎lloca()涓嶆槸鏍囧噯C++鐨勭粍鎴愰儴鍒嗭紝鏇撮噸瑕佺殑鏄紝瀹冧滑鍦?font color="#800000">鍫嗘爤錛坰tack錛?/font>涓婃牴鎹暟鎹垎閰嶅ぇ灝忓彲鑳藉鑷撮毦浠ュ彂鐜扮殑鍐呭瓨娉勬紡錛氣滃湪鎴戠殑鏈哄櫒涓婅繍琛岀殑濂藉ソ鐨勶紝鍒頒簡浜у搧涓嵈鑾悕鍏跺鐨勬寕鎺変簡鈥濄?/p> <p><strong>緇撹錛?/strong></p> <p>浣跨敤瀹夊叏鐨?font color="#800000">鍒嗛厤鍣紙allocator錛?/font>錛屽scoped_ptr/scoped_array銆? <p><strong><font color="#800000">5. 鍙嬪厓錛團riends錛?/font></strong></p> <p>鍏佽鍚堢悊浣跨敤鍙嬪厓綾誨強鍙嬪厓鍑芥暟銆?/p> <p>閫氬父灝嗗弸鍏冨畾涔夊湪鍚屼竴鏂囦歡涓嬶紝閬垮厤璇昏呰窇鍒板叾浠栨枃浠朵腑鏌ユ壘鍏跺鏌愪釜綾葷鏈夋垚鍛樼殑浣跨敤銆傜粡甯哥敤鍒板弸鍏冪殑涓涓湴鏂規槸灝咶ooBuilder澹版槑涓篎oo鐨勫弸鍏冿紝FooBuilder浠ヤ究鍙互姝g‘鏋勯燜oo鐨勫唴閮ㄧ姸鎬侊紝鑰屾棤闇灝嗚鐘舵佹毚闇插嚭鏉ャ傛煇浜涙儏鍐典笅錛屽皢涓涓崟鍏冩祴璇曠敤綾誨0鏄庝負寰呮祴綾葷殑鍙嬪厓浼氬緢鏂逛究銆?/p> <p>鍙嬪厓寤朵幾浜嗭紙浣嗘病鏈夋墦鐮達級綾葷殑灝佽鐣岀嚎錛屽綋浣犲笇鏈涘彧鍏佽鍙︿竴涓被璁塊棶鏌愪釜鎴愬憳鏃訛紝浣跨敤鍙嬪厓閫氬父姣斿皢鍏跺0鏄庝負public瑕佸ソ寰楀銆傚綋鐒訛紝澶у鏁扮被搴旇鍙彁渚涘叕鍏辨垚鍛樹笌鍏朵氦浜掋? <p><strong><font color="#800000">6. 寮傚父錛圗xceptions</font></strong><strong><font color="#800000">錛?/font></strong></p> <p>涓嶈浣跨敤C++寮傚父銆?/p> <p><strong>浼樼偣錛?/strong></p> <p>1) 寮傚父鍏佽涓婂眰搴旂敤鍐沖畾濡備綍澶勭悊鍦ㄥ簳灞傚祵濂楀嚱鏁頒腑鍙戠敓鐨勨滀笉鍙兘鍙戠敓鈥濈殑澶辮觸錛屼笉鍍忓嚭閿欎唬鐮佺殑璁板綍閭d箞妯$硦璐硅В錛?/p> <p>2) 搴旂敤浜庡叾浠栧緢澶氱幇浠h璦涓紝寮曞叆寮傚父浣垮緱C++涓嶱ython銆丣ava鍙婂叾浠栦笌C++鐩歌繎鐨勮璦鏇村姞鍏煎錛?/p> <p>3) 璁稿C++絎笁鏂瑰簱浣跨敤寮傚父錛屽叧闂紓甯稿皢瀵艱嚧闅句互涓庝箣緇撳悎錛?/p> <p>4) 寮傚父鏄В鍐蟲瀯閫犲嚱鏁板け璐ョ殑鍞竴鏂規錛岃櫧鐒跺彲浠ラ氳繃<font color="#800000">宸ュ巶鍑芥暟錛坒actory function錛?/font>鎴朓nit()鏂規硶妯℃嫙寮傚父錛屼絾浠栦滑鍒嗗埆闇瑕佸爢鍒嗛厤鎴栨柊鐨勨滈潪娉曗濈姸鎬侊紱</p> <p>5) 鍦?font color="#800000">嫻嬭瘯妗嗘灦錛坱esting framework錛?/font>涓紝寮傚父紜疄寰堝ソ鐢ㄣ?/p> <p><strong>緙虹偣錛?/strong></p> <p>1) 鍦ㄧ幇鏈夊嚱鏁頒腑娣誨姞throw璇彞鏃訛紝蹇呴』媯鏌ユ墍鏈夎皟鐢ㄥ錛屽嵆浣垮畠浠嚦灝戝叿鏈夊熀鏈殑寮傚父瀹夊叏淇濇姢錛屾垨鑰呯▼搴忔甯哥粨鏉燂紝姘歌繙涓嶅彲鑳芥崟鑾瘋寮傚父銆備緥濡傦細if <code>f()</code> calls <code>g()</code> calls <code>h()</code>錛?code>h</code>鎶涘嚭琚?code>f</code>鎹曡幏鐨勫紓甯革紝<code>g</code>灝辮褰撳績浜嗭紝閬垮厤娌℃湁瀹屽叏娓呯悊錛?/p> <p>2) 閫氫織涓鐐硅錛屽紓甯鎬細瀵艱嚧紼嬪簭<font color="#800000">鎺у埗嫻侊紙control flow錛?/font>閫氳繃鏌ョ湅浠g爜鏃犳硶紜畾錛氬嚱鏁版湁鍙兘鍦ㄤ笉紜畾鐨勫湴鏂硅繑鍥烇紝浠庤屽鑷翠唬鐮佺鐞嗗拰璋冭瘯鍥伴毦錛屽綋鐒訛紝浣犲彲浠ラ氳繃瑙勫畾浣曟椂浣曞湴濡備綍浣跨敤寮傚父鏉ユ渶灝忓寲鐨勯檷浣庡紑閿錛屽嵈緇欏紑鍙戜漢鍛樺甫鏉ユ帉鎻¤繖浜涜瀹氱殑璐熸媴錛?/p> <p>3) 寮傚父瀹夊叏闇瑕丷AII鍜屼笉鍚岀紪鐮佸疄璺點傝交鏉俱佹紜紪鍐欏紓甯稿畨鍏ㄤ唬鐮侀渶瑕佸ぇ閲忔敮鎾戙傚厑璁鎬嬌鐢ㄥ紓甯革紱</p> <p>4) 鍔犲叆寮傚父浣夸簩榪涘埗鎵ц浠g爜浣撶Н鍙樺ぇ錛屽鍔犱簡緙栬瘧鏃墮暱錛堟垨璁稿獎鍝嶄笉澶э級錛岃繕鍙兘澧炲姞鍦板潃絀洪棿鍘嬪姏錛?/p> <p>5) 寮傚父鐨勫疄鐢ㄦу彲鑳戒細鍒烘縺寮鍙戜漢鍛樺湪涓嶆伆褰撶殑鏃跺欐姏鍑哄紓甯革紝鎴栬呭湪涓嶅畨鍏ㄧ殑鍦版柟浠庡紓甯鎬腑鎭㈠錛屼緥濡傦紝闈炴硶鐢ㄦ埛杈撳叆鍙兘瀵艱嚧鎶涘嚭寮傚父銆傚鏋滃厑璁鎬嬌鐢ㄥ紓甯鎬細浣垮緱榪欐牱涓綃囩紪紼嬮鏍兼寚鍗楅暱鍑哄緢澶氾紙<font color="#800000">璇戣呮敞錛岃繖涓悊鐢辨湁鐐圭壍寮?-(</font>錛夛紒</p> <p><strong>緇撹錛?/strong></p> <p>浠庤〃闈笂鐪嬶紝浣跨敤寮傚父鍒╁ぇ浜庡紛錛屽挨鍏舵槸鍦ㄦ柊欏圭洰涓紝鐒惰岋紝瀵逛簬鐜版湁浠g爜錛屽紩鍏ュ紓甯鎬細鐗佃繛鍒版墍鏈変緷璧栦唬鐮併傚鏋滃厑璁稿紓甯稿湪鏂伴」鐩腑浣跨敤錛屽湪璺熶互鍓嶆病鏈変嬌鐢ㄥ紓甯哥殑浠g爜鏁村悎鏃朵篃鏄竴涓夯鐑︺傚洜涓篏oogle鐜版湁鐨勫ぇ澶氭暟C++浠g爜閮芥病鏈夊紓甯稿鐞嗭紝寮曞叆甯︽湁寮傚父澶勭悊鐨勬柊浠g爜鐩稿綋鍥伴毦銆? <p>閴翠簬Google鐜版湁浠g爜涓嶆帴鍙楀紓甯革紝鍦ㄧ幇鏈変唬鐮佷腑浣跨敤寮傚父姣斿湪鏂伴」鐩腑浣跨敤鐨勪唬浠峰灝戣澶т竴鐐癸紝榪佺Щ榪囩▼浼氭瘮杈冩參錛屼篃瀹規槗鍑洪敊銆傛垜浠篃涓嶇浉淇″紓甯哥殑鏈夋晥鏇夸唬鏂規錛屽閿欒浠g爜銆佹柇璦絳夛紝閮芥槸涓ラ噸璐熸媴銆? <p>鎴戜滑騫朵笉鏄熀浜庡摬瀛︽垨閬撳痙灞傞潰鍙嶅浣跨敤寮傚父錛岃屾槸鍦ㄥ疄璺電殑鍩虹涓娿傚洜涓烘垜浠笇鏈涗嬌鐢℅oogle涓婄殑寮婧愰」鐩紝浣嗛」鐩腑浣跨敤寮傚父浼氫負姝ゅ甫鏉ヤ笉渚匡紝鍥犱負鎴戜滑涔熷緩璁笉瑕佸湪Google涓婄殑寮婧愰」鐩腑浣跨敤寮傚父錛屽鏋滄垜浠渶瑕佹妸榪欎簺欏圭洰鎺ㄥ掗噸鏉ユ樉鐒朵笉澶幇瀹炪? <p>瀵逛簬Windows浠g爜鏉ヨ錛岃繖涓鐐規湁涓緥澶栵紙絳夊埌鏈鍚庝竴綃囧惂:D錛夈? <p><strong>璇戣呮敞錛氬浜庡紓甯稿鐞嗭紝鏄劇劧涓嶆槸鐭煭鍑犲彞璇濊兘澶熻娓呮鐨勶紝浠ユ瀯閫犲嚱鏁頒負渚嬶紝寰堝C++涔︾睄涓婇兘鎻愬埌褰撴瀯閫犲け璐ユ椂鍙湁寮傚父鍙互澶勭悊錛孏oogle紱佹浣跨敤寮傚父榪欎竴鐐癸紝浠呬粎鏄負浜嗚嚜韜殑鏂逛究錛岃澶т簡錛屾棤闈炴槸鍩轟簬杞歡綆$悊鎴愭湰涓婏紝瀹為檯浣跨敤涓繕鏄嚜宸卞喅瀹氥?/strong> <p><strong><font color="#800000">7. 榪愯鏃剁被鍨嬭瘑鍒紙Run-Time Type Information, RTTI</font></strong><strong><font color="#800000">錛?/font></strong></p> <p>鎴戜滑紱佹浣跨敤RTTI銆?/p> <p><strong>瀹氫箟錛?/strong>RTTI鍏佽紼嬪簭鍛樺湪榪愯鏃惰瘑鍒獵++綾誨璞$殑綾誨瀷銆?/p> <p><strong>浼樼偣錛?/strong></p> <p>RTTI鍦ㄦ煇浜涘崟鍏冩祴璇曚腑闈炲父鏈夌敤錛屽鍦ㄨ繘琛屽伐鍘傜被嫻嬭瘯鏃剁敤浜庢楠屼竴涓柊寤哄璞℃槸鍚︿負鏈熸湜鐨勫姩鎬佺被鍨嬨?/p> <p>闄ゆ祴璇曞錛屾瀬灝戠敤鍒般?/p> <p><strong>緙虹偣錛?/strong>榪愯鏃惰瘑鍒被鍨嬫剰鍛寵憲璁捐鏈韓鏈夐棶棰橈紝濡傛灉浣犻渶瑕佸湪榪愯鏈熼棿紜畾涓涓璞$殑綾誨瀷錛岃繖閫氬父璇存槑浣犻渶瑕侀噸鏂拌冭檻浣犵殑綾葷殑璁捐銆?/p> <p><strong>緇撹錛?/strong></p> <p>闄ゅ崟鍏冩祴璇曞錛屼笉瑕佷嬌鐢≧TTI錛屽鏋滀綘鍙戠幇闇瑕佹墍鍐欎唬鐮佸洜瀵硅薄綾誨瀷涓嶅悓鑰屽姩浣滃悇寮傜殑璇濓紝鑰冭檻鎹竴縐嶆柟寮忚瘑鍒璞$被鍨嬨?/p> <p>铏氬嚱鏁板彲浠ュ疄鐜伴殢瀛愮被綾誨瀷涓嶅悓鑰屾墽琛屼笉鍚屼唬鐮侊紝宸ヤ綔閮芥槸浜ょ粰瀵硅薄鏈韓鍘誨畬鎴愩?/p> <p>濡傛灉宸ヤ綔鍦ㄥ璞′箣澶栫殑浠g爜涓畬鎴愶紝鑰冭檻鍙岄噸鍒嗗彂鏂規錛屽Visitor妯″紡錛屽彲浠ユ柟渚跨殑鍦ㄥ璞℃湰韜箣澶栫‘瀹氱被鐨勭被鍨嬨?/p> <p>濡傛灉浣犺涓轟笂闈㈢殑鏂規硶浣犳帉鎻′笉浜嗭紝鍙互浣跨敤RTTI錛屼絾鍔″繀璇蜂笁鎬濓紝涓嶈鍘繪墜宸ュ疄鐜頒竴涓?font color="#800000">璨屼技RTTI鐨勬柟妗堬紙RTTI-like workaround錛?/font>錛屾垜浠弽瀵逛嬌鐢≧TTI錛屽悓鏍峰弽瀵硅創涓婄被鍨嬫爣絳劇殑璨屼技綾葷戶鎵跨殑鏇夸唬鏂規錛?font color="#800000">璇戣呮敞錛屼嬌鐢ㄥ氨浣跨敤鍚э紝涓嶄嬌鐢ㄤ篃涓嶈閫犺疆瀛?D</font>錛夈?/p> <p><font color="#800000"><strong>8. 綾誨瀷杞崲錛圕asting</strong></font><font color="#800000"><strong>錛?/strong></font></p> <p>浣跨敤<code>static_cast<>()</code>絳塁++鐨勭被鍨嬭漿鎹紝涓嶈浣跨敤<code>int y = (int)x</code>鎴?code>int y = int(x);</code>銆?/p> <p><strong>瀹氫箟錛?/strong>C++寮曞叆浜嗘湁鍒簬C鐨勪笉鍚岀被鍨嬬殑綾誨瀷杞崲鎿嶄綔銆?/p> <p><strong>浼樼偣錛?/strong>C璇█鐨勭被鍨嬭漿鎹㈤棶棰樺湪浜庢搷浣滄瘮杈冨惈緋婏細鏈夋椂鏄湪鍋氬己鍒惰漿鎹紙濡?code>(int)3.5</code>錛夛紝鏈夋椂鏄湪鍋氱被鍨嬭漿鎹紙濡?code>(int)"hello"</code>錛夈傚彟澶栵紝C++鐨勭被鍨嬭漿鎹㈡煡鎵炬洿瀹規槗銆佹洿閱掔洰銆?/p> <p><strong>緙虹偣錛?/strong>璇硶姣旇緝<font color="#800000">鎭跺績錛坣asty錛?/font>銆?/p> <p><strong>緇撹錛?/strong>浣跨敤C++椋庢牸鑰屼笉瑕佷嬌鐢–椋庢牸綾誨瀷杞崲銆?/p> <p>1) static_cast錛氬拰C椋庢牸杞崲鐩鎬技鍙仛鍊肩殑寮哄埗杞崲錛屾垨鎸囬拡鐨勭埗綾誨埌瀛愮被鐨勬槑紜殑鍚戜笂杞崲錛?/p> <p>2) const_cast錛氱Щ闄onst灞炴э紱</p> <p>3) reinterpret_cast錛氭寚閽堢被鍨嬪拰鏁村瀷鎴栧叾浠栨寚閽堥棿涓嶅畨鍏ㄧ殑鐩鎬簰杞崲錛屼粎鍦ㄤ綘瀵規墍鍋氫竴鍒囦簡鐒朵簬蹇冩椂浣跨敤錛?/p> <p>4) dynamic_cast錛氶櫎嫻嬭瘯澶栦笉瑕佷嬌鐢紝闄ゅ崟鍏冩祴璇曞錛屽鏋滀綘闇瑕佸湪榪愯鏃剁‘瀹氱被鍨嬩俊鎭紝璇存槑璁捐鏈夌己闄鳳紙鍙傝?strong>RTTI</strong>錛夈?/p> <p><strong><font color="#800000">9. 嫻侊紙Streams</font></strong><strong><font color="#800000">錛?/font></strong></p> <p>鍙湪璁板綍鏃ュ織鏃朵嬌鐢ㄦ祦銆?/p> <p><strong>瀹氫箟錛?/strong>嫻佹槸<code>printf()</code>鍜?code>scanf()</code>鐨勬浛浠c?/p> <p><strong>浼樼偣錛?/strong>鏈変簡嫻侊紝鍦ㄨ緭鍑烘椂涓嶉渶瑕佸叧蹇冨璞$殑綾誨瀷錛屼笉鐢ㄦ媴蹇冩牸寮忓寲瀛楃涓蹭笌鍙傛暟鍒楄〃涓嶅尮閰嶏紙铏界劧鍦╣cc涓嬌鐢╬rintf涔熶笉瀛樺湪榪欎釜闂錛夛紝鎵撳紑銆佸叧闂搴旀枃浠舵椂錛屾祦鍙互鑷姩鏋勯犮佹瀽鏋勩?/p> <p><strong>緙虹偣錛?/strong>嫻佷嬌寰?code>pread()</code>絳夊姛鑳藉嚱鏁板緢闅炬墽琛岋紝濡傛灉涓嶄嬌鐢?code>printf</code>涔嬬被鐨勫嚱鏁拌屾槸浣跨敤嫻佸緢闅懼鏍煎紡榪涜鎿嶄綔錛堝挨鍏舵槸甯哥敤鐨勬牸寮忓瓧絎︿覆<code>%.*s</code>錛夛紝嫻佷笉鏀寔瀛楃涓叉搷浣滅閲嶆柊瀹氬簭錛?code>%1s</code>錛夛紝鑰岃繖涓鐐瑰鍥介檯鍖栧緢鏈夌敤銆?/p> <p><strong>緇撹錛?/strong></p> <p>涓嶈浣跨敤嫻侊紝闄ら潪鏄棩蹇楁帴鍙i渶瑕侊紝浣跨敤<code>printf</code>涔嬬被鐨勪唬鏇褲?/p> <p>浣跨敤嫻佽繕鏈夊緢澶氬埄寮婏紝浠g爜涓鑷存ц儨榪囦竴鍒囷紝涓嶈鍦ㄤ唬鐮佷腑浣跨敤嫻併?/p> <p><strong>鎷撳睍璁ㄨ錛?/strong></p> <p>瀵硅繖涓鏉¤鍒欏瓨鍦ㄤ竴浜涗簤璁猴紝榪欏効緇欏嚭娣卞眰嬈″師鍥犮傚洖蹇?font color="#800000">鍞竴鎬у師鍒欙紙Only One Way錛?/font>錛氭垜浠笇鏈涘湪浠諱綍鏃跺欓兘鍙嬌鐢ㄤ竴縐嶇‘瀹氱殑I/O綾誨瀷錛屼嬌浠g爜鍦ㄦ墍鏈塈/O澶勪繚鎸佷竴鑷淬傚洜姝わ紝鎴戜滑涓嶅笇鏈涚敤鎴鋒潵鍐沖畾鏄嬌鐢ㄦ祦榪樻槸<code>printf + read/write</code>錛屾垜浠簲璇ュ喅瀹氬埌搴曠敤鍝竴縐嶆柟寮忋傛妸鏃ュ織浣滀負渚嬪鏄洜涓烘祦闈炲父閫傚悎榪欎箞鍋氾紝涔熸湁涓瀹氱殑鍘嗗彶鍘熷洜銆?/p> <p>嫻佺殑鏀寔鑰呬滑涓誨紶嫻佹槸涓嶄簩涔嬮夛紝浣嗚鐐瑰茍涓嶆槸閭d箞娓呮櫚鏈夊姏錛屼粬浠墍鎸囧嚭嫻佺殑鎵鏈変紭鍔夸篃姝f槸鍏跺姡鍔挎墍鍦ㄣ傛祦鏈澶х殑浼樺娍鏄湪杈撳嚭鏃朵笉闇瑕佸叧蹇冭緭鍑哄璞$殑綾誨瀷錛岃繖鏄竴涓寒鐐癸紝涔熸槸涓涓笉瓚籌細寰堝鏄撶敤閿欑被鍨嬶紝鑰岀紪璇戝櫒涓嶄細鎶ヨ銆備嬌鐢ㄦ祦鏃跺鏄撻犳垚鐨勪竴綾婚敊璇槸錛?/p><pre>cout << this; // Prints the address cout << *this; // Prints the contents</pre> <p></p> <p>緙栬瘧鍣ㄤ笉浼氭姤閿欙紝鍥犱負<<琚噸杞斤紝灝卞洜涓鴻繖涓鐐規垜浠弽瀵逛嬌鐢ㄦ搷浣滅閲嶈澆銆?/p> <p>鏈変漢璇?code>printf</code>鐨勬牸寮忓寲涓戦檵涓嶅牚銆佹槗璇繪у樊錛屼絾嫻佷篃濂戒笉鍒板摢鍎垮幓銆傜湅鐪嬩笅闈袱孌典唬鐮佸惂錛屽摢涓洿鍔犳槗璇伙紵</p><pre>cerr << "Error connecting to '" << foo->bar()->hostname.first << ":" << foo->bar()->hostname.second << ": " << strerror(errno); fprintf(stderr, "Error connecting to '%s:%u: %s", foo->bar()->hostname.first, foo->bar()->hostname.second, strerror(errno));</pre> <p></p> <p>浣犲彲鑳戒細璇達紝鈥滄妸嫻佸皝瑁呬竴涓嬪氨浼氭瘮杈冨ソ浜嗏濓紝榪欏効鍙互錛屽叾浠栧湴鏂瑰憿錛熻屼笖涓嶈蹇樹簡錛屾垜浠殑鐩爣鏄嬌璇█灝藉彲鑳藉皬錛岃屼笉鏄坊鍔犱竴浜涘埆浜洪渶瑕佸涔犵殑鏂扮殑鍐呭銆?/p> <p>姣忎竴縐嶆柟寮忛兘鏄悇鏈夊埄寮婏紝鈥滄病鏈夋渶濂斤紝鍙湁鏇村ソ鈥濓紝綆鍗曞寲鐨勬暀鏉″憡璇垜浠繀欏諱粠涓夋嫨鍏朵竴錛屾渶鍚庣殑澶氭暟鍐沖畾鏄?code>printf + read/write</code>銆?/p> <p><font color="#800000"><strong>10. 鍓嶇疆鑷鍜岃嚜鍑忥紙Preincrement and Predecrement</strong></font><font color="#800000"><strong>錛?/strong></font></p> <p>瀵逛簬榪唬鍣ㄥ拰鍏朵粬妯℃澘瀵硅薄浣跨敤鍓嶇紑褰㈠紡錛?code>++i</code>錛夌殑鑷銆佽嚜鍑忚繍綆楃銆?/p> <p><strong>瀹氫箟</strong>錛氬浜庡彉閲忓湪鑷錛?code>++i</code>鎴?code>i++</code>錛夋垨鑷噺錛?code>--i</code>鎴?code>i--</code>錛夊悗琛ㄨ揪寮忕殑鍊煎張娌℃湁娌$敤鍒扮殑鎯呭喌涓嬶紝闇瑕佺‘瀹氬埌搴曟槸浣跨敤鍓嶇疆榪樻槸鍚庣疆鐨勮嚜澧炶嚜鍑忋?/p> <p><strong>浼樼偣</strong>錛氫笉鑰冭檻榪斿洖鍊肩殑璇濓紝鍓嶇疆鑷錛?code>++i</code>錛夐氬父瑕佹瘮鍚庣疆鑷錛?code>i++</code>錛夋晥鐜囨洿楂橈紝鍥犱負鍚庣疆鐨勮嚜澧炶嚜鍑忛渶瑕佸琛ㄨ揪寮忕殑鍊?code>i</code>榪涜涓嬈℃嫹璐濓紝濡傛灉<code>i</code>鏄凱浠e櫒鎴栧叾浠栭潪鏁板肩被鍨嬶紝鎷瘋礉鐨勪唬浠鋒槸姣旇緝澶х殑銆傛棦鐒朵袱縐嶈嚜澧炴柟寮忓姩浣滀竴鏍鳳紙<font color="#800000">璇戣呮敞錛屼笉鑰冭檻琛ㄨ揪寮忕殑鍊鹼紝鐩鎬俊浣犵煡閬撴垜鍦ㄨ浠涔?/font>錛夛紝涓轟粈涔堜笉鐩存帴浣跨敤鍓嶇疆鑷鍛紵</p> <p><strong>緙虹偣</strong>錛欳璇█涓紝褰撹〃杈懼紡鐨勫兼病鏈変嬌鐢ㄦ椂錛屼紶緇熺殑鍋氭硶鏄嬌鐢ㄥ悗緗嚜澧烇紝鐗瑰埆鏄湪<code>for</code>寰幆涓紝鏈変簺浜鴻寰楀悗緗嚜澧炴洿鍔犳槗鎳傦紝鍥犱負榪欏緢鍍忚嚜鐒惰璦錛屼富璇紙<code>i</code>錛夊湪璋撹鍔ㄨ瘝錛?code>++</code>錛夊墠銆?/p> <p><strong>緇撹</strong>錛氬綆鍗曟暟鍊鹼紙闈炲璞★級鏉ヨ錛屼袱縐嶉兘鏃犳墍璋擄紝瀵硅凱浠e櫒鍜屾ā鏉跨被鍨嬫潵璇達紝瑕佷嬌鐢ㄥ墠緗嚜澧烇紙鑷噺錛夈?/p> <p><strong><font color="#800000">11. const鐨勪嬌鐢紙Use of const</font></strong><strong><font color="#800000">錛?/font></strong></p> <p>鎴戜滑寮虹儓寤鴻浣犲湪浠諱綍鍙互浣跨敤鐨勬儏鍐典笅閮借浣跨敤<code>const</code>銆?/p> <p><strong>瀹氫箟</strong>錛氬湪澹版槑鐨勫彉閲忔垨鍙傛暟鍓嶅姞涓婂叧閿瓧<code>const</code>鐢ㄤ簬鎸囨槑鍙橀噺鍊間笉鍙慨鏀癸紙濡?code>const int foo</code>錛夛紝涓虹被涓殑鍑芥暟鍔犱笂<code>const</code>闄愬畾琛ㄦ槑璇ュ嚱鏁頒笉浼氫慨鏀圭被鎴愬憳鍙橀噺鐨勭姸鎬侊紙濡?code>class Foo { int Bar(char c) const; };</code>錛夈?/p> <p><strong>浼樼偣</strong>錛氫漢浠洿瀹規槗鐞嗚В鍙橀噺鏄浣曚嬌鐢ㄧ殑錛岀紪杈戝櫒鍙互鏇村ソ鍦拌繘琛岀被鍨嬫嫻嬨佹洿濂藉湴鐢熸垚浠g爜銆備漢浠緙栧啓姝g‘鐨勪唬鐮佹洿鍔犺嚜淇★紝鍥犱負浠栦滑鐭ラ亾鎵璋冪敤鐨勫嚱鏁拌闄愬畾浜嗚兘鎴栦笉鑳戒慨鏀瑰彉閲忓箋傚嵆浣挎槸鍦ㄦ棤閿佺殑澶氱嚎紼嬬紪紼嬩腑錛屼漢浠篃鐭ラ亾浠涔堟牱鐨勫嚱鏁版槸瀹夊叏鐨勩?/p> <p><strong>緙虹偣</strong>錛氬鏋滀綘鍚戜竴涓嚱鏁頒紶鍏?code>const</code>鍙橀噺錛屽嚱鏁板師鍨嬩腑涔熷繀欏繪槸<code>const</code>鐨勶紙鍚﹀垯鍙橀噺闇瑕?code>const_cast</code>綾誨瀷杞崲錛夛紝鍦ㄨ皟鐢ㄥ簱鍑芥暟鏃惰繖灝ゅ叾鏄釜楹葷儲銆?/p> <p><strong>緇撹</strong>錛?code>const</code>鍙橀噺銆佹暟鎹垚鍛樸佸嚱鏁板拰鍙傛暟涓虹紪璇戞椂綾誨瀷媯嫻嬪鍔犱簡涓灞備繚闅滐紝鏇村ソ鐨勫敖鏃╁彂鐜伴敊璇傚洜姝わ紝鎴戜滑寮虹儓寤鴻鍦ㄤ換浣曞彲浠ヤ嬌鐢ㄧ殑鎯呭喌涓嬩嬌鐢?code>const</code>錛?/p> <p>1) 濡傛灉鍑芥暟涓嶄細淇敼浼犲叆鐨勫紩鐢ㄦ垨鎸囬拡綾誨瀷鐨勫弬鏁幫紝榪欐牱鐨勫弬鏁板簲璇ヤ負<code>const</code>錛?/p> <p>2) 灝藉彲鑳藉皢鍑芥暟澹版槑涓?code>const</code>錛岃闂嚱鏁板簲璇ユ繪槸<code>const</code>錛屽叾浠栧嚱鏁板鏋滀笉浼氫慨鏀逛換浣曟暟鎹垚鍛樹篃搴旇鏄?code>const</code>錛屼笉瑕佽皟鐢ㄩ潪<code>const</code>鍑芥暟錛屼笉瑕佽繑鍥炲鏁版嵁鎴愬憳鐨勯潪<code>const</code>鎸囬拡鎴栧紩鐢紱</p> <p>3) 濡傛灉鏁版嵁鎴愬憳鍦ㄥ璞℃瀯閫犱箣鍚庝笉鍐嶆敼鍙橈紝鍙皢鍏跺畾涔変負<code>const</code>銆?/p> <p>鐒惰岋紝涔?strong>涓嶈瀵?code>const</code>榪囧害浣跨敤</strong>錛屽儚<code>const int * const * const x;</code>灝辨湁浜涜繃浜嗭紝鍗充究榪欐牱鍐欑簿紜弿榪頒簡<code>x</code>錛屽叾瀹炲啓鎴?code>const int** x</code>灝卞彲浠ヤ簡銆?/p> <p>鍏抽敭瀛?code>mutable</code>鍙互浣跨敤錛屼絾鏄湪澶氱嚎紼嬩腑鏄笉瀹夊叏鐨勶紝浣跨敤鏃墮鍏堣鑰冭檻綰跨▼瀹夊叏銆?/p> <p><strong><code>const</code>浣嶇疆</strong>錛?/p> <p>鏈変漢鍠滄<code>int const *foo</code>褰㈠紡涓嶅枩嬈?code>const int* foo</code>錛屼粬浠涓哄墠鑰呮洿鍔犱竴鑷村洜姝ゅ彲璇繪ф洿濂斤細閬靛驚浜?code>const</code>鎬諱綅浜庡叾鎻忚堪鐨勫璞★紙<code>int</code>錛変箣鍚庣殑鍘熷垯銆備絾鏄紝涓鑷存у師鍒欎笉閫傜敤浜庢錛屸滀笉瑕佽繃搴︿嬌鐢ㄢ濈殑鏉冨▉鎶墊秷浜嗕竴鑷存т嬌鐢ㄣ傚皢<code>const</code>鏀懼湪鍓嶉潰鎵嶆洿鏄撹錛屽洜涓哄湪鑷劧璇█涓艦瀹硅瘝錛?code>const</code>錛夋槸鍦ㄥ悕璇嶏紙<code>int</code>錛変箣鍓嶇殑銆?/p> <p>榪欐槸璇達紝鎴戜滑鎻愬?code>const</code>鍦ㄥ墠錛屽茍涓嶆槸瑕佹眰錛屼絾瑕佸吋欏句唬鐮佺殑涓鑷存э紒</p> <p><font color="#800000"><strong>12. 鏁村瀷錛圛nteger Types</strong></font><font color="#800000"><strong>錛?/strong></font></p> <p>C++鍐呭緩鏁村瀷涓紝鍞竴鐢ㄥ埌鐨勬槸<code>int</code>錛屽鏋滅▼搴忎腑闇瑕佷笉鍚屽ぇ灝忕殑鍙橀噺錛屽彲浠ヤ嬌鐢?code><stdint.h></code>涓殑<font color="#800000">綺劇‘瀹藉害錛坧recise-width錛?/font>鐨勬暣鍨嬶紝濡?code>int16_t</code>銆?/p> <p><strong>瀹氫箟</strong>錛欳++娌℃湁鎸囧畾鏁村瀷鐨勫ぇ灝忥紝閫氬父浜轟滑璁や負<code>short</code>鏄?6浣嶏紝<code>int</code>鏄?2浣嶏紝<code>long</code>鏄?2浣嶏紝<code>long long</code>鏄?4浣嶃?/p> <p><strong>浼樼偣</strong>錛氫繚鎸佸0鏄庣粺涓銆?/p> <p><strong>緙虹偣</strong>錛欳++涓暣鍨嬪ぇ灝忓洜緙栬瘧鍣ㄥ拰浣撶郴緇撴瀯鐨勪笉鍚岃屼笉鍚屻?/p> <p><strong>緇撹</strong>錛?/p> <p><code><stdint.h></code>瀹氫箟浜?code>int16_t</code>銆?code>uint32_t</code>銆?code>int64_t</code>絳夋暣鍨嬶紝鍦ㄩ渶瑕佺‘瀹氬ぇ灝忕殑鏁村瀷鏃跺彲浠ヤ嬌鐢ㄥ畠浠唬鏇?code>short</code>銆?code>unsigned long long</code>絳夛紝鍦–鏁村瀷涓紝鍙嬌鐢?code>int</code>銆傞傚綋鎯呭喌涓嬶紝鎺ㄨ崘浣跨敤鏍囧噯綾誨瀷濡?code>size_t</code>鍜?code>ptrdiff_t</code>銆?/p> <p>鏈甯鎬嬌鐢ㄧ殑鏄紝瀵規暣鏁版潵璇達紝閫氬父涓嶄細鐢ㄥ埌澶ぇ錛屽寰幆璁℃暟絳夛紝鍙互浣跨敤鏅氱殑<code>int</code>銆備綘鍙互璁や負<code>int</code>鑷沖皯涓?2浣嶏紝浣嗕笉瑕佽涓哄畠浼氬浜?2浣嶏紝闇瑕?4浣嶆暣鍨嬬殑璇濓紝鍙互浣跨敤<code>int64_t</code>鎴?code>uint64_t</code>銆?/p> <p>瀵逛簬澶ф暣鏁幫紝浣跨敤<code>int64_t</code>銆?/p> <p>涓嶈浣跨敤<code>uint32_t</code>絳夋棤絎﹀彿鏁村瀷錛岄櫎闈炰綘鏄湪琛ㄧず涓涓?font color="#800000">浣嶇粍錛坆it pattern錛?/font>鑰屼笉鏄竴涓暟鍊箋傚嵆浣挎暟鍊間笉浼氫負璐熷間篃涓嶈浣跨敤鏃犵鍙風被鍨嬶紝浣跨敤<font color="#800000">鏂█錛坅ssertion錛岃瘧鑰呮敞錛岃繖涓鐐瑰緢鏈夐亾鐞嗭紝璁$畻鏈哄彧浼氭牴鎹彉閲忋佽繑鍥炲肩瓑鏈夋棤絎﹀彿紜畾鏁板兼璐燂紝浠嶇劧鏃犳硶紜畾瀵歸敊錛?/font>鏉ヤ繚鎶ゆ暟鎹?/p> <p><strong>鏃犵鍙鋒暣鍨?/strong>錛?/p> <p>鏈変簺浜猴紝鍖呮嫭涓浜涙暀縐戜功浣滆咃紝鎺ㄨ崘浣跨敤鏃犵鍙風被鍨嬭〃紺洪潪璐熸暟錛岀被鍨嬭〃鏄庝簡鏁板煎彇鍊煎艦寮忋備絾鏄紝鍦–璇█涓紝榪欎竴浼樼偣琚敱鍏跺鑷寸殑bugs鎵娣規病銆傜湅鐪嬶細</p><pre>for (unsigned int i = foo.Length()-1; i >= 0; --i) ...</pre> <p></p> <p>涓婅堪浠g爜姘歌繙涓嶄細緇堟錛佹湁鏃秅cc浼氬彂鐜拌bug騫舵姤璀︼紝浣嗛氬父涓嶄細銆傜被浼肩殑bug榪樹細鍑虹幇鍦ㄦ瘮杈冩湁絎﹀悎鍙橀噺鍜屾棤絎﹀彿鍙橀噺鏃訛紝涓昏鏄疌鐨?font color="#800000">綾誨瀷鎻愬崌鏈哄埗錛坱ype-promotion scheme錛孋璇█涓悇縐嶅唴寤虹被鍨嬩箣闂寸殑鎻愬崌杞崲鍏崇郴錛?/font>浼氳嚧浣挎棤絎﹀彿綾誨瀷鐨勮涓哄嚭涔庝綘鐨勬剰鏂欍?/p> <p>鍥犳錛屼嬌鐢ㄦ柇璦澹版槑鍙橀噺涓洪潪璐熸暟錛屼笉瑕佷嬌鐢ㄦ棤絎﹀彿鍨嬨?/p> <p><font color="#800000"><strong>13. 64浣嶄笅鐨勫彲縐繪鎬э紙64-bit Portability</strong></font><font color="#800000"><strong>錛?/strong></font></p> <p>浠g爜鍦?4浣嶅拰32浣嶇殑緋葷粺涓紝鍘熷垯涓婂簲璇ラ兘姣旇緝鍙嬪ソ錛屽挨鍏跺浜庤緭鍑恒佹瘮杈冦?font color="#800000">緇撴瀯瀵歸綈錛坰tructure alignment錛?/font>鏉ヨ錛?/p> <p>1) <code>printf()</code>鎸囧畾鐨勪竴浜涚被鍨嬪湪32浣嶅拰64浣嶇郴緇熶笂鍙Щ妞嶆т笉鏄緢濂斤紝C99鏍囧噯瀹氫箟浜嗕竴浜涘彲縐繪鐨勬牸寮忋備笉騫哥殑鏄紝MSVC 7.1騫墮潪鍏ㄩ儴鏀寔錛岃屼笖鏍囧噯涓篃鏈夋墍閬楁紡銆傛墍浠ユ湁鏃舵垜浠氨涓嶅緱涓嶈嚜宸卞畾涔変笐闄嬬殑鐗堟湰錛堜嬌鐢ㄦ爣鍑嗛鏍艱鍖呭惈鏂囦歡<code>inttypes.h</code>錛夛細</p><pre>// printf macros for size_t, in the style of inttypes.h #ifdef _LP64 #define __PRIS_PREFIX "z" #else #define __PRIS_PREFIX #endif // Use these macros after a % in a printf format string // to get correct 32/64 bit behavior, like this: // size_t size = records.size(); // printf("%"PRIuS"\n", size); #define PRIdS __PRIS_PREFIX "d" #define PRIxS __PRIS_PREFIX "x" #define PRIuS __PRIS_PREFIX "u" #define PRIXS __PRIS_PREFIX "X" #define PRIoS __PRIS_PREFIX "o" </pre> <p></p> <div align="center"> <table cellspacing="0" cellpadding="1" width="529" align="center" border="0"> <tbody> <tr> <td valign="top" width="154">綾誨瀷</td> <td valign="top" width="109">涓嶈浣跨敤</td> <td valign="top" width="142">浣跨敤</td> <td valign="top" width="122">澶囨敞</td></tr> <tr> <td valign="top" width="154"><code>void *</code>錛堟垨鍏朵粬鎸囬拡綾誨瀷錛?/td> <td valign="top" width="109"><code>%lx</code></td> <td valign="top" width="142"><code>%p</code></td> <td valign="top" width="122"> </td></tr> <tr> <td valign="top" width="154"><code>int64_t</code></td> <td valign="top" width="109"><code>%qd</code>, <code>%lld</code></td> <td valign="top" width="142"><code>%"PRId64"</code></td> <td valign="top" width="122"> </td></tr> <tr> <td valign="top" width="154"><code>uint64_t</code></td> <td valign="top" width="109"><code>%qu</code>, <code>%llu</code>, <code>%llx</code></td> <td valign="top" width="142"><code>%"PRIu64"</code>, <code>%"PRIx64"</code></td> <td valign="top" width="122"> </td></tr> <tr> <td valign="top" width="154"><code>size_t</code></td> <td valign="top" width="109"><code>%u</code></td> <td valign="top" width="142"><code>%"PRIuS"</code>, <code>%"PRIxS"</code></td> <td valign="top" width="122">C99鎸囧畾<code>%zu</code></td></tr> <tr> <td valign="top" width="154"><code>ptrdiff_t</code></td> <td valign="top" width="109"><code>%d</code></td> <td valign="top" width="142"><code>%"PRIdS"</code></td> <td valign="top" width="122">C99鎸囧畾<code>%zd</code></td></tr></tbody></table></div> <p><br>娉ㄦ剰瀹?code>PRI*</code>浼氳緙栬瘧鍣ㄦ墿灞曚負鐙珛瀛楃涓詫紝鍥犳濡傛灉浣跨敤闈炲父閲忕殑鏍煎紡鍖栧瓧絎︿覆錛岄渶瑕佸皢瀹忕殑鍊艱屼笉鏄畯鍚嶆彃鍏ユ牸寮忎腑錛屽湪浣跨敤瀹?code>PRI*</code>鏃跺悓鏍峰彲浠ュ湪<code>%</code>鍚庢寚瀹氶暱搴︾瓑淇℃伅銆備緥濡傦紝<code>printf("x = %30"PRIuS"\n", x)</code>鍦?2浣峀inux涓婂皢琚墿灞曚負<code>printf("x = %30" "u" "\n", x)</code>錛岀紪璇戝櫒浼氬鐞嗕負<code>printf("x = %30u\n", x)</code>銆?/p> <p>2) 璁頒綇<code>sizeof(void *)</code> != <code>sizeof(int)</code>錛屽鏋滈渶瑕佷竴涓寚閽堝ぇ灝忕殑鏁存暟瑕佷嬌鐢?code>intptr_t</code>銆?/p> <p>3) 闇瑕佸緇撴瀯瀵歸綈鍔犱互鐣欏績錛屽挨鍏舵槸瀵逛簬瀛樺偍鍦ㄧ鐩樹笂鐨勭粨鏋勪綋銆傚湪64浣嶇郴緇熶腑錛屼換浣曟嫢鏈?code>int64_t</code>/<code>uint64_t</code>鎴愬憳鐨勭被/緇撴瀯浣撳皢榛樿琚鐞嗕負8瀛楄妭瀵歸綈銆傚鏋?2浣嶅拰64浣嶄唬鐮佸叡鐢ㄧ鐩樹笂鐨勭粨鏋勪綋錛岄渶瑕佺‘淇濅袱縐嶄綋緋葷粨鏋勪笅鐨勭粨鏋勪綋鐨勫榻愪竴鑷淬傚ぇ澶氭暟緙栬瘧鍣ㄦ彁渚涗簡璋冩暣緇撴瀯浣撳榻愮殑鏂規銆俫cc涓彲浣跨敤<code>__attribute__((packed))</code>錛孧SVC鎻愪緵浜?code>#pragma pack()</code>鍜?code>__declspec(align())</code><font color="#800000">錛堣瘧鑰呮敞錛岃В鍐蟲柟妗堢殑欏圭洰灞炴ч噷涔熷彲浠ョ洿鎺ヨ緗級</font>銆?/p> <p>4) 鍒涘緩64浣嶅父閲忔椂浣跨敤<code>LL</code>鎴?code>ULL</code>浣滀負鍚庣紑錛屽錛?/p> <p><pre>int64_t my_value = 0x123456789LL; uint64_t my_mask = 3ULL << 48;</pre> <p></p> <p>5) 濡傛灉浣犵‘瀹為渶瑕?2浣嶅拰64浣嶇郴緇熷叿鏈変笉鍚屼唬鐮侊紝鍙互鍦ㄤ唬鐮佸彉閲忓墠浣跨敤銆傦紙灝介噺涓嶈榪欎箞鍋氾紝浣跨敤鏃跺敖閲忎嬌淇敼灞閮ㄥ寲錛夈?/p> <p><font color="#800000"><strong>14. 棰勫鐞嗗畯錛圥reprocessor Macros</strong></font><font color="#800000"><strong>錛?/strong></font></p> <p>浣跨敤瀹忔椂瑕佽皚鎱庯紝灝介噺浠ュ唴鑱斿嚱鏁般佹灇涓懼拰甯擱噺浠f浛涔嬨?/p> <p>瀹忔剰鍛崇潃浣犲拰緙栬瘧鍣ㄧ湅鍒扮殑浠g爜鏄笉鍚岀殑錛屽洜姝ゅ彲鑳藉鑷村紓甯歌涓猴紝灝ゅ叾鏄綋瀹忓瓨鍦ㄤ簬鍏ㄥ眬浣滅敤鍩熶腑銆?/p> <p>鍊煎緱搴嗗垢鐨勬槸錛孋++涓紝瀹忎笉鍍廋涓偅涔堝繀瑕併傚畯鍐呰仈<font color="#800000">鏁堢巼鍏抽敭浠g爜錛坧erformance-critical code錛?/font>鍙互鍐呰仈鍑芥暟鏇夸唬錛涘畯瀛樺偍甯擱噺鍙互<code>const</code>鍙橀噺鏇夸唬錛涘畯鈥滅緝鍐欌濋暱鍙橀噺鍚嶅彲浠ュ紩鐢ㄦ浛浠o紱浣跨敤瀹忚繘琛屾潯浠剁紪璇戯紝榪欎釜鈥︹︼紝鏈濂戒笉瑕佽繖涔堝仛錛屼細浠ゆ祴璇曟洿鍔犵棝鑻︼紙<code>#define</code>闃叉澶存枃浠墮噸鍖呭惈褰撶劧鏄釜渚嬪錛夈?/p> <p>瀹忓彲浠ュ仛涓浜涘叾浠栨妧鏈棤娉曞疄鐜扮殑浜嬫儏錛屽湪涓浜涗唬鐮佸簱錛堝挨鍏舵槸搴曞眰搴撲腑錛夊彲浠ョ湅鍒板畯鐨勬煇浜涚壒鎬э紙濡?font color="#800000">瀛楃涓插寲錛坰tringifying錛岃瘧鑰呮敞錛屼嬌鐢?code>#</code>錛?/font>銆?font color="#800000">榪炴帴錛坈oncatenation錛岃瘧鑰呮敞錛屼嬌鐢?code>##</code>錛?/font>絳夌瓑錛夈備絾鍦ㄤ嬌鐢ㄥ墠錛屼粩緇嗚冭檻涓涓嬭兘涓嶈兘涓嶄嬌鐢ㄥ畯瀹炵幇鍚屾牱鏁堟灉銆?/p> <p><strong>璇戣呮敞錛氬叧浜庡畯鐨勯珮綰у簲鐢紝鍙互鍙傝?/strong><a title="C璇█瀹忕殑楂樼駭搴旂敤" target="_blank"><strong>C璇█瀹忕殑楂樼駭搴旂敤</strong></a><strong>銆?/strong></p> <p>涓嬮潰緇欏嚭鐨勭敤娉曟ā寮忓彲浠ラ伩鍏嶄竴浜涗嬌鐢ㄥ畯鐨勯棶棰橈紝渚涗嬌鐢ㄥ畯鏃跺弬鑰冿細</p> <p>1) 涓嶈鍦?code>.h</code>鏂囦歡涓畾涔夊畯錛?/p> <p>2) 浣跨敤鍓嶆紜?code>#define</code>錛屼嬌鐢ㄥ悗姝g‘<code>#undef</code>錛?/p> <p>3) 涓嶈鍙槸瀵瑰凡緇忓瓨鍦ㄧ殑瀹忎嬌鐢?code>#undef</code>錛岄夋嫨涓涓笉浼氬啿紿佺殑鍚嶇О錛?/p> <p>4) 涓嶄嬌鐢ㄤ細瀵艱嚧涓嶇ǔ瀹氱殑<font color="#800000">C++鏋勯狅紙unbalanced C++ constructs錛岃瘧鑰呮敞錛?/font>鐨勫畯錛岃嚦灝戞枃妗h鏄庡叾琛屼負銆?/p> <p><font color="#800000"><strong>15. 0鍜孨ULL錛? and NULL</strong></font><font color="#800000"><strong>錛?/strong></font></p> <p>鏁存暟鐢?code>0</code>錛屽疄鏁扮敤<code>0.0</code>錛屾寚閽堢敤<code>NULL</code>錛屽瓧絎︼紙涓詫級鐢?code>'\0'</code>銆?/p> <p>鏁存暟鐢?code>0</code>錛屽疄鏁扮敤<code>0.0</code>錛岃繖涓鐐規槸姣棤浜夎鐨勩?/p> <p>瀵逛簬鎸囬拡錛堝湴鍧鍊鹼級錛屽埌搴曟槸鐢?code>0</code>榪樻槸<code>NULL</code>錛孊jarne Stroustrup寤鴻浣跨敤鏈鍘熷鐨?code>0</code>錛屾垜浠緩璁嬌鐢ㄧ湅涓婂幓鍍忔槸鎸囬拡鐨?code>NULL</code>錛屼簨瀹炰笂涓浜汣++緙栬瘧鍣紙濡俫cc 4.1.0錛変笓闂ㄦ彁渚涗簡<code>NULL</code>鐨勫畾涔夛紝鍙互緇欏嚭鏈夌敤鐨勮鍛婏紝灝ゅ叾鏄?code>sizeof(NULL)鍜?code>sizeof(0)</code>涓嶇浉絳?/code>鐨勬儏鍐點?/p> <p>瀛楃錛堜覆錛夌敤<code>'\0'</code>錛屼笉浠呯被鍨嬫紜屼笖鍙鎬уソ銆?/p> <p><font color="#800000"><strong>16. sizeof錛坰izeof</strong></font><font color="#800000"><strong>錛?/strong></font></p> <p>灝藉彲鑳界敤<code>sizeof(<var>varname</var>)</code>浠f浛<code>sizeof(<var>type</var>)</code>銆?/p> <p>浣跨敤<code>sizeof(<var>varname</var>)</code>鏄洜涓哄綋鍙橀噺綾誨瀷鏀瑰彉鏃朵唬鐮佽嚜鍔ㄥ悓姝ワ紝鏈変簺鎯呭喌涓?code>sizeof(<var>type</var>)</code>鎴栬鏈夋剰涔夛紝榪樻槸瑕佸敖閲忛伩鍏嶏紝濡傛灉鍙橀噺綾誨瀷鏀瑰彉鐨勮瘽涓嶈兘鍚屾銆?/p><pre>Struct data; memset(&data, 0, sizeof(data));</pre><pre>memset(&data, 0, sizeof(Struct));</pre> <p></p> <p><font color="#800000"><strong>17. Boost搴擄紙Boost</strong></font><font color="#800000"><strong>錛?/strong></font></p> <p>鍙嬌鐢˙oost涓璁ゅ彲鐨勫簱銆?/p> <p><strong>瀹氫箟</strong>錛欱oost搴撻泦鏄竴涓潪甯稿彈嬈㈣繋鐨勩?font color="#800000">鍚岀駭璇勮鐨勶紙peer-reviewed錛?/font>銆佸厤璐圭殑銆佸紑婧愮殑C++搴撱?/p> <p><strong>浼樼偣</strong>錛欱oost浠g爜璐ㄩ噺鏅亶杈冮珮銆佸彲縐繪鎬уソ錛屽~琛ヤ簡C++鏍囧噯搴撳緢澶氱┖鐧斤紝濡?font color="#800000">鍨嬪埆鐗規э紙type traits錛?/font>銆佹洿瀹屽杽鐨?font color="#800000">緇戝畾錛坆inders錛?/font>銆佹洿濂界殑鏅鴻兘鎸囬拡錛屽悓鏃惰繕鎻愪緵浜員R1錛堟爣鍑嗗簱鐨勬墿灞曪級鐨勫疄鐜般?/p> <p><strong>緙虹偣</strong>錛氭煇浜汢oost搴撴彁鍊$殑緙栫▼瀹炶返鍙鎬у樊錛屽儚<font color="#800000">鍏冪▼搴忥紙metaprogramming錛?/font>鍜屽叾浠栭珮綰фā鏉挎妧鏈紝浠ュ強榪囧害<font color="#800000">鈥滃嚱鏁板寲鈥濓紙"functional"錛?/font>鐨勭紪紼嬮鏍箋?/p> <p><strong>緇撹</strong>錛氫負浜嗗悜闃呰鍜岀淮鎶や唬鐮佺殑浜哄憳鎻愪緵鏇村ソ鐨勫彲璇繪э紝鎴戜滑鍙厑璁鎬嬌鐢˙oost鐗規х殑涓涓垚鐔熷瓙闆嗭紝褰撳墠錛岃繖浜涘簱鍖呮嫭錛?/p> <p>1) <a >Compressed Pair</a>錛?code>boost/compressed_pair.hpp</code>錛?/p> <p>2) <a >Pointer Container</a>錛?code>boost/ptr_container</code>涓嶅寘鎷?code>ptr_array.hpp</code>鍜屽簭鍒楀寲錛坰erialization錛夈?/p> <p>鎴戜滑浼氱Н鏋佽冭檻娣誨姞鍙互鐨凚oost鐗規э紝鎵浠ヤ笉蹇呮嫎娉ヤ簬璇ヨ鍒欍?/p> <p>______________________________________ </p> <p>璇戣咃細鍏充簬C++鐗規х殑娉ㄦ剰浜嬮」錛屾葷粨涓涓嬶細 <p><strong>1. 瀵逛簬鏅鴻兘鎸囬拡錛屽畨鍏ㄧ涓銆佹柟渚跨浜岋紝灝藉彲鑳藉眬閮ㄥ寲錛坰coped_ptr錛?/strong><strong>錛?/strong> <p><strong>2. 寮曠敤褰㈠弬鍔犱笂const錛屽惁鍒欎嬌鐢ㄦ寚閽堝艦鍙傦紱</strong> <p><strong>3. 鍑芥暟閲嶈澆鐨勪嬌鐢ㄨ娓呮櫚銆佹槗璇伙紱</strong> <p><strong>4. 閴翠簬瀹規槗璇敤錛岀姝嬌鐢ㄧ己鐪佸嚱鏁板弬鏁幫紙鍊煎緱鍟嗘Ψ錛夛紱</strong> <p><strong>5. 紱佹浣跨敤鍙橀暱鏁扮粍錛?/strong> <p><strong>6. 鍚堢悊浣跨敤鍙嬪厓錛?/strong> <p><strong>7. 涓轟簡鏂逛究浠g爜綆$悊錛岀姝嬌鐢ㄥ紓甯革紙鍊煎緱鍟嗘Ψ錛夛紱</strong> <p><strong>8. 紱佹浣跨敤RTTI錛屽惁鍒欓噸鏂拌璁′唬鐮佸惂錛?/strong> <p><strong>9. 浣跨敤C++椋庢牸鐨勭被鍨嬭漿鎹紝闄ゅ崟鍏冩祴璇曞涓嶈浣跨敤dynamic_cast錛?/strong> <p><strong>10. 浣跨敤嫻佽繕printf + read/write錛宨t is a problem錛?/strong> <p><strong>11. 鑳界敤鍓嶇疆鑷/鍑忎笉鐢ㄥ悗緗嚜澧?鍑忥紱</strong> <p><strong>12. const鑳界敤鍒欑敤錛屾彁鍊onst鍦ㄥ墠錛?/strong></p> <p><strong>13. 浣跨敤紜畾澶у皬鐨勬暣鍨嬶紝闄や綅緇勫涓嶈浣跨敤鏃犵鍙峰瀷錛?/strong></p> <p><strong>14. 鏍煎紡鍖栬緭鍑哄強緇撴瀯瀵歸綈鏃訛紝娉ㄦ剰32浣嶅拰64浣嶇殑緋葷粺宸紓錛?/strong></p> <p><strong>15. 闄ゅ瓧絎︿覆鍖栥佽繛鎺ュ灝介噺閬垮厤浣跨敤瀹忥紱</strong></p> <p><strong>16. 鏁存暟鐢?錛屽疄鏁扮敤0.0錛屾寚閽堢敤NULL錛屽瓧絎︼紙涓詫級鐢?\0'錛?/strong></p> <p><strong>17. 鐢╯izeof(varname)浠f浛sizeof(type)錛?/strong></p> <p><strong>18. 鍙嬌鐢˙oost涓璁ゅ彲鐨勫簱銆?/strong></p><img src ="http://www.shnenglu.com/Fox/aggbug/56760.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Fox/" target="_blank">Fox</a> 2008-07-21 14:55 <a href="http://www.shnenglu.com/Fox/archive/2008/07/21/56760.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鏃ュ織璇ユ庝箞璁板綍錛?/title><link>http://www.shnenglu.com/Fox/archive/2008/07/18/56481.html</link><dc:creator>Fox</dc:creator><author>Fox</author><pubDate>Fri, 18 Jul 2008 02:03:00 GMT</pubDate><guid>http://www.shnenglu.com/Fox/archive/2008/07/18/56481.html</guid><wfw:comment>http://www.shnenglu.com/Fox/comments/56481.html</wfw:comment><comments>http://www.shnenglu.com/Fox/archive/2008/07/18/56481.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.shnenglu.com/Fox/comments/commentRss/56481.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Fox/services/trackbacks/56481.html</trackback:ping><description><![CDATA[<p>涓涓ソ鐨勬棩蹇楃郴緇燂紝闄や簡鍙互璁板綍灝藉彲鑳藉鐨勫繀瑕佷俊鎭紝鏂逛究trace bugs銆佹彁渚沝ata analysis source榪欎簺鍩烘湰鍔熻兘涔嬪錛屽叾浠栫殑璨屼技涓嶅繀澶湪鎰忋備絾鐪熸褰揵ugs鍐掑嚭鏉ョ殑鏃跺欙紝瑕佸懡鐨勬槸鏃㈡病鏈塪ump錛屼篃娌℃湁鏈変環鍊肩殑鏃ュ織錛屾洿瑕佸懡鐨勬槸鏃ュ織灞呯劧宸茬粡璁板綍浜嗛偅涔堝錛屽眳鐒惰浣犳煡浜嗗崐澶╋紝灞呯劧閮芥槸娌℃湁浠峰肩殑錛?/p> <p>鎮插墽鍟婏紒</p> <p>鏃ュ織闇瑕佽褰曠殑淇℃伅澶ф鍒嗕負涓ょ被錛?/p> <p><strong>1) 緋葷粺榪愯鎯呭喌</strong>錛氬惎鍔ㄣ佸姞杞姐佽鍐欍佸叧闂?strong>寮傚父</strong>錛?/p> <p><strong>2) 鐢ㄦ埛浣跨敤鎯呭喌</strong>錛氳繘鍏ャ佹搷浣溿佺寮銆?strong>寮傚父</strong>銆?/p> <p>鎴戝彲浠ユ兂鍒扮殑鍏充簬鏃ュ織緋葷粺鐨勮姹傚ぇ鑷翠互涓嬪嚑鐐癸細</p> <p><strong>1) 鏃ュ織緋葷粺浣跨敤鐩綍鏍戠粨鏋?/strong>錛氱郴緇熸棩蹇楀拰鐢ㄦ埛鏃ュ織鍒嗗埆璁板綍錛屾甯告棩蹇楀拰寮傚父鏃ュ織鍒嗗埆璁板綍錛屼笉緗簬鍚屼竴鏂囦歡澶逛笅錛屾棩蹇楁枃浠跺懡鍚嶅仛鍒頒護瑙傝呬竴鐩簡鐒訛紱</p> <p><strong>2) 璁板綍璇﹀敖浣嗕笉鍐椾綑</strong>錛氭紜褰曟棩蹇楁椂闂淬佷綅緗佷簨浠躲佸洜鏋滐紝鏈夊彲鑳界殑璇濓紝<strong>璁板綍涓婁笅鏂?/strong>錛堣繖瑕佹眰鏈夌偣楂樹簡錛夛紱</p> <p><strong>3) 鏍煎紡緇熶竴浣嗕弗紱佸崈綃囦竴寰?/strong>錛氭牸寮忕粺涓鏄寚璁板綍鍐呭閬靛驚涓瀹氭牸寮忥紝鏂逛究鏌ョ湅錛屼弗紱佸崈綃囦竴寰嬫槸鎸囪褰曡鏈夊眰嬈°佽交閲嶏紝涓嶅悓浜嬩歡瀵艱嚧鐨勨滃悓涓鈥濆紓甯告棩蹇椾笉搴斾笉鍔犲尯鍒紝鍚屾牱鏄負浜嗘柟渚挎煡鐪嬶紱</p> <p><strong>4) 涓庡紓甯稿鐞嗙浉杈呯浉鎴?/strong>錛氭湁dump鏃訛紝浠ユ棩蹇楄緟鍔╁揩閫熷畾浣嶏紝娌℃湁dump鏃訛紝鏃ュ織搴斿敖鍙兘鎻愪緵鏈夋晥淇℃伅錛?strong>紱葷郴緇熷穿婧冪殑鍦版柟瓚婅繎瓚婂ソ</strong>錛堣繖涓鐐逛技涔庝篃鏈夐毦搴︼級銆?/p> <p>________________________________________________</p> <p>紿佺劧鎯沖埌鐨勶紝涔熻繕娌℃湁鍔ㄦ墜鍘誨仛錛屽厛璁頒笅浜嗭紝嬈㈣繋琛ュ厖銆?/p> <p>_____Added on Jul.25th, 2008_______________________</p> <p>榪樼湅鍒頒竴浣嶅厔寮熷湪涓烘垜璇磋瘽錛岃阿璋紒</p> <p>浠婂ぉ鍦ㄨ冭檻瀹炵幇鏃訛紝鎯沖埌涓涓緢鐜板疄鐨勯棶棰橈紝鏃ュ織鍑犱箮鏄棤澶勪笉鍦ㄧ殑錛岄殢鏃墮殢鍦頒細鏈夋棩蹇楄褰曘備笉鐭ラ亾鏈夎皝瀵笽/O錛堝綋鐒朵富瑕佹槸Output錛夋秷鑰楀拰瀵圭郴緇熺殑褰卞搷鍋氳繃涓撻棬嫻嬭瘯錛岀寽嫻嬪氨綆椾簡:-)錛屾垜寰堟兂鐭ラ亾鏈夋病鏈夊繀瑕佹斁鍒頒笓闂ㄧ殑綰跨▼涓紝濡傛灉鏀懼埌鐙珛綰跨▼涓殑璇濓紝闂灝卞嚭鏉ヤ簡錛屽闀挎椂闂村啓涓嬈★紵姣曠珶錛岃褰曟棩蹇楃殑涓昏鐩殑灝辨槸涓轟簡鍏ㄩ潰璁板綍緋葷粺榪愯鍜岀敤鎴蜂嬌鐢ㄦ儏鍐碉紝濡傛灉鍦ㄦ湇鍔″櫒crash鐨勬椂鍊欙紝榪樻湁鏃ュ織錛堝挨鍏舵槸crash涓婁笅鏂囨棩蹇楋級娌℃湁琚『鍒╁啓鍏ワ紝鏃ュ織鐨勬剰涔変篃灝卞ぇ鎵撴姌鎵c?/p> <p>璋佺粰鐐瑰緩璁紵</p><img src ="http://www.shnenglu.com/Fox/aggbug/56481.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Fox/" target="_blank">Fox</a> 2008-07-18 10:03 <a href="http://www.shnenglu.com/Fox/archive/2008/07/18/56481.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>[璇慮Google C++緙栫▼椋庢牸鎸囧崡錛堜笁錛?/title><link>http://www.shnenglu.com/Fox/archive/2008/07/16/56324.html</link><dc:creator>Fox</dc:creator><author>Fox</author><pubDate>Wed, 16 Jul 2008 09:43:00 GMT</pubDate><guid>http://www.shnenglu.com/Fox/archive/2008/07/16/56324.html</guid><wfw:comment>http://www.shnenglu.com/Fox/comments/56324.html</wfw:comment><comments>http://www.shnenglu.com/Fox/archive/2008/07/16/56324.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.shnenglu.com/Fox/comments/commentRss/56324.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Fox/services/trackbacks/56324.html</trackback:ping><description><![CDATA[<p>榪欎竴綃囦富瑕佹彁鍒扮殑鏄被錛孡ippman鍦ㄣ?a title="Inside The C++ Object Model" href="www.amazon.com/Inside-Object-Model-Stanley-Lippman/dp/0201834545" target="_blank">Inside The C++ Object Model</a>銆嬬浜岀珷涓鏋勯犲嚱鏁頒綔浜嗚灝借鏄庯紝鏈枃涓彁鍒扮殑鍑犱釜鍗曡瘝鍩烘湰浠胯涔︿腑璇戞湰渚嵎鍏堢敓鐨勭炕璇戯細</p> <p>explicit錛氭槑紜殑</p> <p>implicit錛氶殣鍚殑</p> <p>trivial錛氭病鏈夋剰涔夌殑</p> <p>non-trivial錛氭湁鎰忎箟鐨?/p> <p> </p> <p>鍘熸枃鍦板潃錛?a title="Google C++ Style Guide" target="_blank" rel="tag">Google C++ Style Guide</a></p> <ul> <li><strong><font color="#800000">綾?/font></strong></li></ul> <p>綾繪槸C++涓熀鏈殑浠g爜鍗曞厓錛岃嚜鐒惰騫挎硾浣跨敤銆傛湰鑺傚垪涓句簡鍦ㄥ啓涓涓被鏃惰鍋氫粈涔堛佷笉瑕佸仛浠涔堛?/p> <p><strong><font color="#800000">1. 鏋勯犲嚱鏁幫紙Constructor錛夌殑鑱岃矗</font></strong></p> <p>鏋勯犲嚱鏁頒腑鍙繘琛岄偅浜?font color="#800000">娌℃湁瀹為檯鎰忎箟鐨勶紙trivial錛岃瘧鑰呮敞錛氱畝鍗曞垵濮嬪寲瀵逛簬紼嬪簭鎵ц娌℃湁瀹為檯鐨勯昏緫鎰忎箟錛屽洜涓烘垚鍛樺彉閲忕殑鈥滄湁鎰忎箟鈥濈殑鍊煎ぇ澶氫笉鍦ㄦ瀯閫犲嚱鏁頒腑紜畾錛?/font>鍒濆鍖栵紝鍙兘鐨勮瘽錛屼嬌鐢↖nit()鏂規硶闆嗕腑鍒濆鍖栦負<font color="#800000">鏈夋剰涔夌殑錛坣on-trivial錛?/font>鏁版嵁銆?/p> <p><strong>瀹氫箟錛?/strong>鍦ㄦ瀯閫犲嚱鏁頒腑鎵ц鍒濆鍖栨搷浣溿?/p> <p><strong>浼樼偣錛?/strong>鎺掔増鏂逛究錛屾棤闇鎷呭績綾繪槸鍚﹀垵濮嬪寲銆?/p> <p><strong>緙虹偣錛?/strong>鍦ㄦ瀯閫犲嚱鏁頒腑鎵ц鎿嶄綔寮曡搗鐨勯棶棰樻湁錛?/p> <p>1) 鏋勯犲嚱鏁頒腑涓嶆槗鎶ュ憡閿欒錛屼笉鑳戒嬌鐢ㄥ紓甯搞?/p> <p>2) 鎿嶄綔澶辮觸浼氶犳垚瀵硅薄鍒濆鍖栧け璐ワ紝寮曡搗涓嶇‘瀹氱姸鎬併?/p> <p>3) 鏋勯犲嚱鏁板唴璋冪敤铏氬嚱鏁幫紝璋冪敤涓嶄細媧懼彂鍒板瓙綾誨疄鐜頒腑錛屽嵆浣垮綋鍓嶆病鏈夊瓙綾誨寲瀹炵幇錛屽皢鏉ヤ粛鏄殣鎮c?/p> <p>4) 濡傛灉鏈変漢鍒涘緩璇ョ被鍨嬬殑鍏ㄥ眬鍙橀噺錛堣櫧鐒惰繚鑳屼簡涓婅妭鎻愬埌鐨勮鍒欙級錛屾瀯閫犲嚱鏁板皢鍦╩ain()涔嬪墠琚皟鐢紝鏈夊彲鑳界牬鍧忔瀯閫犲嚱鏁頒腑鏆楀惈鐨勫亣璁炬潯浠躲備緥濡傦紝gflags灝氭湭鍒濆鍖栥?/p> <p><strong>緇撹錛?/strong>濡傛灉瀵硅薄闇瑕?font color="#800000">鏈夋剰涔夌殑錛坣on-trivial錛?/font>鍒濆鍖栵紝鑰冭檻浣跨敤鍙﹀鐨処nit()鏂規硶騫訛紙鎴栵級澧炲姞涓涓垚鍛樻爣璁扮敤浜庢寚紺哄璞℃槸鍚﹀凡緇忓垵濮嬪寲鎴愬姛銆?/p> <p><strong><font color="#800000">2. 榛樿鏋勯犲嚱鏁幫紙Default Constructors錛?/font></strong></p> <p>濡傛灉涓涓被瀹氫箟浜嗚嫢騫叉垚鍛樺彉閲忓張娌℃湁鍏朵粬鏋勯犲嚱鏁幫紝闇瑕佸畾涔変竴涓粯璁ゆ瀯閫犲嚱鏁幫紝鍚﹀垯緙栬瘧鍣ㄥ皢鑷姩鐢熶駭榛樿鏋勯犲嚱鏁般?/p> <p><strong>瀹氫箟錛?/strong>鏂板緩涓涓病鏈夊弬鏁扮殑瀵硅薄鏃訛紝榛樿鏋勯犲嚱鏁拌璋冪敤錛屽綋璋冪敤new[]錛堜負鏁扮粍錛夋椂錛岄粯璁ゆ瀯閫犲嚱鏁版繪槸琚皟鐢ㄣ?/p> <p><strong>浼樼偣錛?/strong>榛樿灝嗙粨鏋勪綋鍒濆鍖栦負鈥滀笉鍙兘鐨勨濆鹼紝浣胯皟璇曟洿鍔犲鏄撱?/p> <p><strong>緙虹偣錛?/strong>瀵逛唬鐮佺紪鍐欒呮潵璇達紝榪欐槸澶氫綑鐨勫伐浣溿?/p> <p><strong>緇撹錛?/strong></p> <p>濡傛灉綾諱腑瀹氫箟浜嗘垚鍛樺彉閲忥紝娌℃湁鎻愪緵鍏朵粬鏋勯犲嚱鏁幫紝浣犻渶瑕佸畾涔変竴涓粯璁ゆ瀯閫犲嚱鏁幫紙娌℃湁鍙傛暟錛夈傞粯璁ゆ瀯閫犲嚱鏁版洿閫傚悎浜庡垵濮嬪寲瀵硅薄錛屼嬌瀵硅薄<font color="#800000">鍐呴儴鐘舵侊紙internal state錛?/font>涓鑷淬佹湁鏁堛?/p> <p>鎻愪緵榛樿鏋勯犲嚱鏁扮殑鍘熷洜鏄細濡傛灉浣犳病鏈夋彁渚涘叾浠栨瀯閫犲嚱鏁幫紝鍙堟病鏈夊畾涔夐粯璁ゆ瀯閫犲嚱鏁幫紝緙栬瘧鍣ㄥ皢涓轟綘鑷姩鐢熸垚涓涓紝緙栬瘧鍣ㄧ敓鎴愮殑鏋勯犲嚱鏁板茍涓嶄細瀵瑰璞¤繘琛屽垵濮嬪寲銆? <p>濡傛灉浣犲畾涔夌殑綾葷戶鎵跨幇鏈夌被錛岃屼綘鍙堟病鏈夊鍔犳柊鐨勬垚鍛樺彉閲忥紝鍒欎笉闇瑕佷負鏂扮被瀹氫箟榛樿鏋勯犲嚱鏁般? <p><strong><font color="#800000">3. 鏄庣‘鐨勬瀯閫犲嚱鏁幫紙Explicit Constructors錛?/font></strong></p> <p>瀵瑰崟鍙傛暟鏋勯犲嚱鏁頒嬌鐢–++鍏抽敭瀛梕xplicit銆?/p> <p><strong>瀹氫箟錛?/strong>閫氬父錛屽彧鏈変竴涓弬鏁扮殑鏋勯犲嚱鏁板彲琚敤浜?font color="#800000">杞崲錛坈onversion錛岃瘧鑰呮敞錛氫富瑕佹寚闅愬紡杞崲錛屼笅鏂囧彲瑙侊級</font>錛屼緥濡傦紝瀹氫箟浜咶oo::Foo(string name)錛屽綋鍚戦渶瑕佷紶鍏ヤ竴涓狥oo瀵硅薄鐨勫嚱鏁頒紶鍏ヤ竴涓瓧絎︿覆鏃訛紝鏋勯犲嚱鏁癋oo::Foo(string name)琚皟鐢ㄥ茍灝嗚瀛楃涓茶漿鎹負涓涓狥oo涓存椂瀵硅薄浼犵粰璋冪敤鍑芥暟銆傜湅涓婂幓寰堟柟渚匡紝浣嗗鏋滀綘騫朵笉甯屾湜濡傛閫氳繃杞崲鐢熸垚涓涓柊瀵硅薄鐨勮瘽錛岄夯鐑︿篃闅忎箣鑰屾潵銆備負閬垮厤鏋勯犲嚱鏁拌璋冪敤閫犳垚闅愬紡杞崲錛屽彲浠ュ皢鍏跺0鏄庝負explicit銆?/p> <p><strong>浼樼偣錛?/strong>閬垮厤涓嶅悎鏃跺疁鐨勫彉鎹€? <p><strong>緙虹偣錛?/strong>鏃犮? <p><strong>緇撹錛?/strong> <p>鎵鏈夊崟鍙傛暟鏋勯犲嚱鏁板繀欏繪槸鏄庣‘鐨勩傚湪綾誨畾涔変腑錛屽皢鍏抽敭瀛梕xplicit鍔犲埌鍗曞弬鏁版瀯閫犲嚱鏁板墠錛歟xplicit Foo(string name); <p>渚嬪錛氬湪灝戞暟鎯呭喌涓嬶紝鎷瘋礉鏋勯犲嚱鏁板彲浠ヤ笉澹版槑涓篹xplicit錛涚壒鎰忎綔涓哄叾浠栫被鐨勯忔槑鍖呰鍣ㄧ殑綾匯傜被浼間緥澶栨儏鍐靛簲鍦ㄦ敞閲婁腑鏄庣‘璇存槑銆? <p><strong><font color="#800000">4. 鎷瘋礉鏋勯犲嚱鏁幫紙Copy Constructors錛?/font></strong></p> <p>浠呭湪浠g爜涓渶瑕佹嫹璐濅竴涓被瀵硅薄鐨勬椂鍊欎嬌鐢ㄦ嫹璐濇瀯閫犲嚱鏁幫紱涓嶉渶瑕佹嫹璐濇椂搴斾嬌鐢?code>DISALLOW_COPY_AND_ASSIGN</code>銆?/p> <p><strong>瀹氫箟錛?/strong>閫氳繃鎷瘋礉鏂板緩瀵硅薄鏃跺彲浣跨敤鎷瘋礉鏋勯犲嚱鏁幫紙鐗瑰埆鏄璞$殑浼犲兼椂錛夈?/p> <p><strong>浼樼偣錛?/strong>鎷瘋礉鏋勯犲嚱鏁頒嬌寰楁嫹璐濆璞℃洿鍔犲鏄擄紝STL瀹瑰櫒瑕佹眰鎵鏈夊唴瀹瑰彲鎷瘋礉銆佸彲璧嬪箋?/p> <p><strong>緙虹偣錛?/strong>C++涓璞$殑闅愬紡鎷瘋礉鏄鑷村緢澶氭ц兘闂鍜宐ugs鐨勬牴婧愩傛嫹璐濇瀯閫犲嚱鏁伴檷浣庝簡浠g爜鍙鎬э紝鐩告瘮鎸夊紩鐢ㄤ紶閫掞紝璺熻釜鎸夊間紶閫掔殑瀵硅薄鏇村姞鍥伴毦錛屽璞′慨鏀圭殑鍦版柟鍙樺緱闅句互鎹夋懜銆?/p> <p><strong>緇撹錛?/strong></p> <p>澶ч噺鐨勭被騫朵笉闇瑕佸彲鎷瘋礉錛屼篃涓嶉渶瑕佷竴涓嫹璐濇瀯閫犲嚱鏁版垨<font color="#800000">璧嬪兼搷浣滐紙assignment operator錛?/font>銆備笉騫哥殑鏄紝濡傛灉浣犱笉涓誨姩澹版槑瀹冧滑錛岀紪璇戝櫒浼氫負浣犺嚜鍔ㄧ敓鎴愶紝鑰屼笖鏄痯ublic鐨勩?/p> <p>鍙互鑰冭檻鍦ㄧ被鐨刾rivate涓坊鍔?font color="#800000">絀虹殑錛坉ummy錛?/font>鎷瘋礉鏋勯犲嚱鏁板拰璧嬪兼搷浣滐紝鍙湁澹版槑錛屾病鏈夊畾涔夈傜敱浜庤繖浜涚┖紼嬪簭澹版槑涓簆rivate錛屽綋鍏朵粬浠g爜璇曞浘浣跨敤瀹冧滑鐨勬椂鍊欙紝緙栬瘧鍣ㄥ皢鎶ラ敊銆備負浜嗘柟渚匡紝鍙互浣跨敤瀹廌ISALLOW_COPY_AND_ASSIGN錛?/p><code> <p>// 紱佹浣跨敤鎷瘋礉鏋勯犲嚱鏁板拰璧嬪兼搷浣滅殑瀹?br>// 搴斿湪綾葷殑private:涓嬌鐢?br>#define DISALLOW_COPY_AND_ASSIGN(TypeName) \<br>  TypeName(const TypeName&);               \<br>  void operator=(const TypeName&)</p> <p>class Foo {<br>public:<br>  Foo(int f);<br>  ~Foo(); <p>private:<br>  DISALLOW_COPY_AND_ASSIGN(Foo);<br>};</p></code> <p>濡備笂鎵榪幫紝緇濆ぇ澶氭暟鎯呭喌涓嬮兘搴斾嬌鐢―ISALLOW_COPY_AND_ASSIGN錛屽鏋滅被紜疄闇瑕佸彲鎷瘋礉錛屽簲鍦ㄨ綾葷殑澶存枃浠朵腑璇存槑鍘熺敱錛屽茍閫傚綋瀹氫箟鎷瘋礉鏋勯犲嚱鏁板拰璧嬪兼搷浣滐紝娉ㄦ剰鍦╫perator=涓嫻?font color="#800000">鑷祴鍊鹼紙self-assignment錛?/font>鎯呭喌銆?/p> <p>鍦ㄥ皢綾諱綔涓篠TL瀹瑰櫒鍊煎緱鏃跺欙紝浣犲彲鑳芥湁浣跨被鍙嫹璐濈殑鍐插姩銆傜被浼兼儏鍐典笅錛岀湡姝h鍋氱殑鏄嬌鐢ㄦ寚閽堟寚鍚慡TL瀹瑰櫒涓殑瀵硅薄錛屽彲浠ヨ冭檻浣跨敤std::tr1::shared_ptr銆?/p> <p><strong><font color="#800000">5. 緇撴瀯浣撳拰綾伙紙Structs vs. Classes錛?/font></strong></p> <p>浠呭綋鍙湁鏁版嵁鏃朵嬌鐢╯truct錛屽叾瀹冧竴姒備嬌鐢╟lass銆?/p> <p>鍦–++涓紝鍏抽敭瀛梥truct鍜宑lass鍑犱箮鍚箟絳夊悓錛屾垜浠負鍏朵漢涓烘坊鍔犺涔夛紝浠ヤ究涓哄畾涔夌殑鏁版嵁綾誨瀷鍚堢悊閫夋嫨浣跨敤鍝釜鍏抽敭瀛椼?/p> <p>struct琚敤鍦ㄤ粎鍖呭惈鏁版嵁鐨勬秷鏋佸璞★紙passive objects錛変笂錛屽彲鑳藉寘鎷湁鍏寵仈鐨勫父閲忥紝浣嗘病鏈夊瓨鍙栨暟鎹垚鍛樹箣澶栫殑鍑芥暟鍔熻兘錛岃屽瓨鍙栧姛鑳介氳繃鐩存帴璁塊棶瀹炵幇鑰屾棤闇鏂規硶璋冪敤錛岃繖鍎挎彁鍒扮殑鏂規硶鏄寚鍙敤浜庡鐞嗘暟鎹垚鍛樼殑錛屽鏋勯犲嚱鏁般佹瀽鏋勫嚱鏁般両nitialize()銆丷eset()銆乂alidate()銆?/p> <p>濡傛灉闇瑕佹洿澶氱殑鍑芥暟鍔熻兘錛宑lass鏇撮傚悎錛屽鏋滀笉紜畾鐨勮瘽錛岀洿鎺ヤ嬌鐢╟lass銆?/p> <p>濡傛灉涓嶴TL緇撳悎錛屽浜?font color="#800000">浠垮嚱鏁幫紙functors錛夊拰鐗規э紙traits錛?/font>鍙互涓嶇敤class鑰屾槸浣跨敤struct銆?/p> <p>娉ㄦ剰錛氱被鍜岀粨鏋勪綋鐨勬垚鍛樺彉閲忎嬌鐢ㄤ笉鍚岀殑鍛藉悕瑙勫垯銆?/p> <p><strong><font color="#800000">6. 緇ф壙錛圛nheritance</font></strong><strong><font color="#800000">錛?/font></strong></p> <p>浣跨敤<font color="#800000">緇勫悎錛坈omposition錛岃瘧鑰呮敞錛岃繖涓鐐逛篃鏄疓oF鍦ㄣ奃esign Patterns銆嬮噷鍙嶅寮鴻皟鐨勶級</font>閫氬父姣斾嬌鐢ㄧ戶鎵挎洿閫傚疁錛屽鏋滀嬌鐢ㄧ戶鎵跨殑璇濓紝鍙嬌鐢ㄥ叕鍏辯戶鎵褲?/p> <p><strong>瀹氫箟錛?/strong>褰撳瓙綾葷戶鎵垮熀綾繪椂錛屽瓙綾誨寘鍚簡鐖跺熀綾繪墍鏈夋暟鎹強鎿嶄綔鐨勫畾涔夈侰++瀹炶返涓紝緇ф壙涓昏鐢ㄤ簬涓ょ鍦哄悎錛?font color="#800000">瀹炵幇緇ф壙錛坕mplementation inheritance錛?/font>錛屽瓙綾葷戶鎵跨埗綾葷殑瀹炵幇浠g爜錛?font color="#800000">鎺ュ彛緇ф壙錛坕nterface inheritance錛?/font>錛屽瓙綾諱粎緇ф壙鐖剁被鐨勬柟娉曞悕縐般?/p> <p><strong>浼樼偣錛?/strong>瀹炵幇緇ф壙閫氳繃鍘熷皝涓嶅姩鐨勯噸鐢ㄥ熀綾諱唬鐮佸噺灝戜簡浠g爜閲忋傜敱浜庣戶鎵挎槸<font color="#800000">緙栬瘧鏃跺0鏄庯紙compile-time declaration錛?/font>錛岀紪鐮佽呭拰緙栬瘧鍣ㄩ兘鍙互鐞嗚В鐩稿簲鎿嶄綔騫跺彂鐜伴敊璇傛帴鍙g戶鎵垮彲鐢ㄤ簬紼嬪簭涓婂寮虹被鐨勭壒瀹欰PI鐨勫姛鑳斤紝鍦ㄧ被娌℃湁瀹氫箟API鐨勫繀瑕佸疄鐜版椂錛岀紪璇戝櫒鍚屾牱鍙互渚﹂敊銆?/p> <p><strong>緙虹偣錛?/strong>瀵逛簬瀹炵幇緇ф壙錛岀敱浜庡疄鐜板瓙綾葷殑浠g爜鍦ㄧ埗綾誨拰瀛愮被闂村歡灞曪紝瑕佺悊瑙e叾瀹炵幇鍙樺緱鏇村姞鍥伴毦銆傚瓙綾諱笉鑳介噸鍐欑埗綾葷殑闈炶櫄鍑芥暟錛屽綋鐒朵篃灝變笉鑳戒慨鏀瑰叾瀹炵幇銆傚熀綾諱篃鍙兘瀹氫箟浜嗕竴浜涙暟鎹垚鍛橈紝榪樿鍖哄垎鍩虹被鐨?font color="#800000">鐗╃悊杞粨錛坧hysical layout錛?/font>銆?/p> <p><strong>緇撹錛?/strong></p> <p>鎵鏈夌戶鎵垮繀欏繪槸public鐨勶紝濡傛灉鎯崇鏈夌戶鎵跨殑璇濓紝搴旇閲囧彇鍖呭惈鍩虹被瀹炰緥浣滀負鎴愬憳鐨勬柟寮忎綔涓烘浛浠c?</p> <p>涓嶈榪囧浣跨敤瀹炵幇緇ф壙錛岀粍鍚堥氬父鏇村悎閫備竴浜涖傚姫鍔涘仛鍒板彧鍦?font color="#800000">鈥滄槸涓涓濓紙"is-a"錛岃瘧鑰呮敞錛屽叾浠?has-a"鎯呭喌涓嬭浣跨敤緇勫悎錛?/font>鐨勬儏鍐典笅浣跨敤緇ф壙錛氬鏋淏ar鐨勭‘鈥滄槸涓縐嶁滷oo錛屾墠浠ar鏄疐oo鐨勫瓙綾匯? <p>蹇呰鐨勮瘽錛屼護鏋愭瀯鍑芥暟涓簐irtual錛屽繀瑕佹槸鎸囷紝濡傛灉璇ョ被鍏鋒湁铏氬嚱鏁幫紝鍏舵瀽鏋勫嚱鏁板簲璇ヤ負铏氬嚱鏁般? <p><strong>璇戣呮敞錛氳嚦浜庡瓙綾繪病鏈夐澶栨暟鎹垚鍛橈紝鐢氳嚦鐖剁被涔熸病鏈変換浣曟暟鎹垚鍛樼殑鐗規畩鎯呭喌涓嬶紝鏋愭瀯鍑芥暟鐨勮皟鐢ㄦ槸鍚﹀繀瑕佹槸璇箟浜夎錛屼粠緙栫▼璁捐瑙勮寖鐨勮搴︾湅錛屽湪鍚湁铏氬嚱鏁扮殑鐖剁被涓紝瀹氫箟铏氭瀽鏋勫嚱鏁扮粷瀵瑰繀瑕併?/strong> <p>闄愬畾浠呭湪瀛愮被璁塊棶鐨勬垚鍛樺嚱鏁頒負protected錛岄渶瑕佹敞鎰忕殑鏄暟鎹垚鍛樺簲濮嬬粓涓虹鏈夈? <p>褰撻噸瀹氫箟媧劇敓鐨勮櫄鍑芥暟鏃訛紝鍦ㄦ淳鐢熺被涓槑紜0鏄庡叾涓簐irtual銆傛牴鏈師鍥狅細濡傛灉閬楁紡virtual錛岄槄璇昏呴渶瑕佹绱㈢被鐨勬墍鏈夌鍏堜互紜畾璇ュ嚱鏁版槸鍚︿負铏氬嚱鏁?font color="#800000">錛堣瘧鑰呮敞錛岃櫧鐒朵笉褰卞搷鍏朵負铏氬嚱鏁扮殑鏈川錛?/font>銆? <p><strong><font color="#800000">7. 澶氶噸緇ф壙錛圡ultiple Inheritance</font></strong><strong><font color="#800000">錛?/font></strong></p> <p>鐪熸闇瑕佺敤鍒?font color="#800000">澶氶噸瀹炵幇緇ф壙錛坢ultiple implementation inheritance錛?/font>鐨勬椂鍊欓潪甯稿皯錛屽彧鏈夊綋鏈澶氫竴涓熀綾諱腑鍚湁瀹炵幇錛屽叾浠栧熀綾婚兘鏄互<code>Interface</code>涓哄悗緙鐨勭函鎺ュ彛綾繪椂鎵嶄細浣跨敤澶氶噸緇ф壙銆?/p> <p><strong>瀹氫箟錛?/strong>澶氶噸緇ф壙鍏佽瀛愮被鎷ユ湁澶氫釜鍩虹被錛岃灝嗕綔涓虹函鎺ュ彛鐨勫熀綾誨拰鍏鋒湁瀹炵幇鐨勫熀綾誨尯鍒紑鏉ャ?/p> <p><strong>浼樼偣錛?/strong>鐩告瘮鍗曠戶鎵匡紝澶氶噸瀹炵幇緇ф壙鍙護浣犻噸鐢ㄦ洿澶氫唬鐮併?/p> <p><strong>緙虹偣錛?/strong>鐪熸闇瑕佺敤鍒板閲嶅疄鐜扮戶鎵跨殑鏃跺欓潪甯稿皯錛屽閲嶅疄鐜扮戶鎵跨湅涓婂幓鏄笉閿欑殑瑙e喅鏂規錛岄氬父鍙互鎵懼埌鏇村姞鏄庣‘銆佹竻鏅扮殑銆佷笉鍚岀殑瑙e喅鏂規銆?/p> <p><strong>緇撹錛?/strong>鍙湁褰撴墍鏈?font color="#800000">瓚呯被錛坰uperclass錛?/font>闄ょ涓涓閮芥槸綰帴鍙f椂鎵嶈兘浣跨敤澶氶噸緇ф壙銆備負紜繚瀹冧滑鏄函鎺ュ彛錛岃繖浜涚被蹇呴』浠?code>Interface</code>涓哄悗緙銆?/p> <p>娉ㄦ剰錛氬叧浜庢瑙勫垯錛學indows涓嬫湁縐嶄緥澶栨儏鍐碉紙璇戣呮敞錛屽皢鍦ㄦ湰璇戞枃鏈鍚庝竴綃囩殑瑙勫垯渚嬪涓槓榪幫級銆?/p> <p><strong><font color="#800000">8. 鎺ュ彛錛圛nterface</font></strong><strong><font color="#800000">錛?/font></strong></p> <p>鎺ュ彛鏄寚婊¤凍鐗瑰畾鏉′歡鐨勭被錛岃繖浜涚被浠nterface涓哄悗緙錛堥潪蹇呴渶錛夈?/p> <p><strong>瀹氫箟錛?/strong>褰撲竴涓被婊¤凍浠ヤ笅瑕佹眰鏃訛紝縐頒箣涓虹函鎺ュ彛錛?/p> <p>1) 鍙湁綰櫄鍑芥暟錛?=0"錛夊拰闈欐佸嚱鏁幫紙涓嬫枃鎻愬埌鐨勬瀽鏋勫嚱鏁伴櫎澶栵級錛?/p> <p>2) 娌℃湁闈為潤鎬佹暟鎹垚鍛橈紱</p> <p>3) 娌℃湁瀹氫箟浠諱綍鏋勯犲嚱鏁般傚鏋滄湁錛屼篃涓嶅惈鍙傛暟錛屽茍涓斾負protected錛?/p> <p>4) 濡傛灉鏄瓙綾伙紝涔熷彧鑳界戶鎵挎弧瓚充笂榪版潯浠跺茍浠nterface涓哄悗緙鐨勭被銆?/p> <p>鎺ュ彛綾諱笉鑳借鐩存帴瀹炰緥鍖栵紝鍥犱負瀹冨0鏄庝簡綰櫄鍑芥暟銆備負紜繚鎺ュ彛綾葷殑鎵鏈夊疄鐜板彲琚紜攢姣侊紝蹇呴』涓轟箣澹版槑铏氭瀽鏋勫嚱鏁幫紙浣滀負絎?鏉¤鍒欑殑渚嬪錛屾瀽鏋勫嚱鏁頒笉鑳芥槸綰櫄鍑芥暟錛夈傚叿浣撶粏鑺傚彲鍙傝僑troustrup鐨勩?a title="The C++ Programming Language, 3rd edition" href="www.amazon.com/Programming-Language-3rd-Bjarne-Stroustrup/dp/0201889544" target="_blank">The C++ Programming Language, 3rd edition</a>銆嬬12.4鑺傘?/p> <p><strong>浼樼偣錛?/strong>浠nterface涓哄悗緙鍙護浠栦漢鐭ラ亾涓嶈兘涓鴻鎺ュ彛綾誨鍔犲疄鐜板嚱鏁版垨闈為潤鎬佹暟鎹垚鍛橈紝榪欎竴鐐瑰浜庡閲嶇戶鎵垮挨鍏墮噸瑕併傚彟澶栵紝瀵逛簬Java紼嬪簭鍛樻潵璇達紝鎺ュ彛鐨勬蹇靛凡緇忔繁鍏ヤ漢蹇冦?/p> <p><strong>緙虹偣錛?/strong>Interface鍚庣紑澧炲姞浜嗙被鍚嶉暱搴︼紝涓洪槄璇誨拰鐞嗚В甯︽潵涓嶄究錛屽悓鏃訛紝鎺ュ彛鐗規т綔涓哄疄鐜扮粏鑺備笉搴旀毚闇茬粰瀹㈡埛銆?/p> <p><strong>緇撹錛?/strong>銆傚彧鏈夊湪婊¤凍涓婅堪闇瑕佹椂錛岀被鎵嶄互Interface緇撳熬錛屼絾鍙嶈繃鏉ワ紝婊¤凍涓婅堪闇瑕佺殑綾繪湭蹇呬竴瀹氫互Interface緇撳熬銆?/p> <p><strong><font color="#800000">9. 鎿嶄綔絎﹂噸杞斤紙Operator Overloading</font></strong><strong><font color="#800000">錛?/font></strong></p> <p>闄ゅ皯鏁扮壒瀹氱幆澧冨錛屼笉瑕侀噸杞芥搷浣滅銆?/p> <p><strong>瀹氫箟錛?/strong>涓涓被鍙互瀹氫箟璇稿+銆?絳夋搷浣滅錛屼嬌鍏跺彲浠ュ儚鍐呭緩綾誨瀷涓鏍風洿鎺ヤ嬌鐢ㄣ?/p> <p><strong>浼樼偣錛?/strong>浣夸唬鐮佺湅涓婂幓鏇村姞鐩磋錛屽氨鍍忓唴寤虹被鍨嬶紙濡俰nt錛夐偅鏍鳳紝閲嶈澆鎿嶄綔絎︿嬌閭d簺Equals()銆丄dd()絳夐化娣℃棤鍏夌殑鍑芥暟鍚嶅ソ鐜╁浜嗐備負浜嗕嬌涓浜涙ā鏉垮嚱鏁版紜伐浣滐紝浣犲彲鑳介渶瑕佸畾涔夋搷浣滅銆?/p> <p><strong>緙虹偣錛?/strong>铏界劧鎿嶄綔絎﹂噸杞戒護浠g爜鏇村姞鐩磋錛屼絾涔熸湁涓浜涗笉瓚?/p> <p>1) 娣鋒穯鐩磋錛岃浣犺浠ヤ負涓浜涜楁椂鐨勬搷浣滃儚鍐呭緩鎿嶄綔閭f牱杞誨閥錛?/p> <p>2) 鏌ユ壘閲嶈澆鎿嶄綔絎︾殑璋冪敤澶勬洿鍔犲洶闅撅紝鏌ユ壘Equals()鏄劇劧姣斿悓絳夎皟鐢?=瀹規槗鐨勫錛?/p> <p>3) 鏈夌殑鎿嶄綔絎﹀彲浠ュ鎸囬拡榪涜鎿嶄綔錛屽鏄撳鑷碽ugs錛孎oo + 4鍋氱殑鏄竴浠朵簨錛岃?amp;Foo + 4鍙兘鍋氱殑鏄畬鍏ㄤ笉鍚岀殑鍙︿竴浠朵簨錛屽浜庝簩鑰咃紝緙栬瘧鍣ㄩ兘涓嶄細鎶ラ敊錛屼嬌鍏跺緢闅捐皟璇曪紱</p> <p>4) 閲嶈澆榪樻湁浠や綘鍚冩儕鐨勫壇浣滅敤錛屾瘮濡傦紝閲嶈澆鎿嶄綔絎?amp;鐨勭被涓嶈兘琚墠緗0鏄庛?</p> <p><strong>緇撹錛?/strong></p> <p>涓鑸笉瑕侀噸杞芥搷浣滅錛屽挨鍏舵槸璧嬪兼搷浣滐紙operator=錛夋瘮杈冮槾闄╋紝搴旈伩鍏嶉噸杞姐傚鏋滈渶瑕佺殑璇濓紝鍙互瀹氫箟綾諱技Equals()銆丆opyFrom()絳夊嚱鏁般?/p> <p>鐒惰岋紝鏋佸皯鏁版儏鍐典笅闇瑕侀噸杞芥搷浣滅浠ヤ究涓庢ā鏉挎垨鈥滄爣鍑嗏滳++綾昏鎺ワ紙濡俹perator<<(ostream&, const T&)錛夛紝濡傛灉琚瘉鏄庢槸姝e綋鐨勫皻鍙帴鍙楋紝浣嗕綘瑕佸敖鍙兘閬垮厤榪欐牱鍋氥傚挨鍏舵槸涓嶈浠呬粎涓轟簡鍦⊿TL瀹瑰櫒涓綔涓簁ey浣跨敤灝遍噸杞給perator==鎴杘perator<錛屽彇鑰屼唬涔嬶紝浣犲簲璇ュ湪澹版槑瀹瑰櫒鐨勬椂鍊欙紝鍒涘緩鐩哥瓑鍒ゆ柇鍜屽ぇ灝忔瘮杈冪殑浠垮嚱鏁扮被鍨嬨?/p> <p>鏈変簺STL綆楁硶紜疄闇瑕侀噸杞給perator==鏃跺彲浠ヨ繖涔堝仛錛屼笉瑕佸繕浜嗘彁渚涙枃妗h鏄庡師鍥犮?/p> <p>鍙傝?strong>鎷瘋礉鏋勯犲嚱鏁?/strong>鍜?strong>鍑芥暟閲嶈澆</strong>銆?</p> <p><strong><font color="#800000">10. 瀛樺彇鎺у埗錛圓ccess Control</font></strong><strong><font color="#800000">錛?/font></strong></p> <p>灝嗘暟鎹垚鍛樼鏈夊寲錛屽茍鎻愪緵鐩稿叧瀛樺彇鍑芥暟錛屽瀹氫箟鍙橀噺foo_鍙婂彇鍊煎嚱鏁癴oo()銆佽祴鍊煎嚱鏁皊et_foo()銆?/p> <p>瀛樺彇鍑芥暟鐨勫畾涔変竴鑸唴鑱斿湪澶存枃浠朵腑銆?/p> <p>鍙傝?strong>緇ф壙</strong>鍜?strong>鍑芥暟鍛藉悕</strong>銆?/p> <p><strong><font color="#800000">11. 澹版槑嬈″簭錛圖eclaration Order</font></strong><strong><font color="#800000">錛?/font></strong></p> <p>鍦ㄧ被涓嬌鐢ㄧ壒瀹氱殑澹版槑嬈″簭錛歱ublic:鍦╬rivate:涔嬪墠錛屾垚鍛樺嚱鏁板湪鏁版嵁鎴愬憳錛堝彉閲忥級鍓嶃?/p> <p>瀹氫箟嬈″簭濡備笅錛歱ublic:銆乸rotected:銆乸rivate:錛屽鏋滈偅涓鍧楁病鏈夛紝鐩存帴蹇界暐鍗沖彲銆?/p> <p>姣忎竴鍧椾腑錛屽0鏄庢搴忎竴鑸涓嬶細</p> <p>1) typedefs鍜宔nums錛?/p> <p>2) 甯擱噺錛?/p> <p>3) 鏋勯犲嚱鏁幫紱</p> <p>4) 鏋愭瀯鍑芥暟錛?/p> <p>5) 鎴愬憳鍑芥暟錛屽惈闈欐佹垚鍛樺嚱鏁幫紱</p> <p>6) 鏁版嵁鎴愬憳錛屽惈闈欐佹暟鎹垚鍛樸?/p> <p>瀹廌ISALLOW_COPY_AND_ASSIGN緗簬private:鍧椾箣鍚庯紝浣滀負綾葷殑鏈鍚庨儴鍒嗐傚弬鑰?strong>鎷瘋礉鏋勯犲嚱鏁?/strong>銆?/p> <p>.cc鏂囦歡涓嚱鏁扮殑瀹氫箟搴斿敖鍙兘鍜屽0鏄庢搴忎竴鑷淬?/p> <p>涓嶈灝嗗ぇ鍨嬪嚱鏁板唴鑱斿埌綾葷殑瀹氫箟涓紝閫氬父錛屽彧鏈夐偅浜涙病鏈夌壒鍒剰涔夌殑鎴栬呮ц兘瑕佹眰楂樼殑錛屽茍涓旀槸姣旇緝鐭皬鐨勫嚱鏁版墠琚畾涔変負鍐呰仈鍑芥暟銆傛洿澶氱粏鑺傚弬鑰?a title="[璇慮Google C++緙栫▼椋庢牸鎸囧崡錛堜竴錛? href="http://www.shnenglu.com/Fox/archive/2008/07/10/55818.html" target="_blank">璇戞枃絎竴綃囩殑</a><strong>鍐呰仈鍑芥暟</strong>銆?/p> <p><strong><font color="#800000">12. 緙栧啓鐭皬鍑芥暟錛圵rite Short Functions</font></strong><strong><font color="#800000">錛?/font></strong></p> <p>鍊懼悜浜庨夋嫨鐭皬銆佸嚌緇冪殑鍑芥暟銆?/p> <p>闀垮嚱鏁版湁鏃舵槸鎭板綋鐨勶紝鍥犳瀵逛簬鍑芥暟闀垮害騫舵病鏈変弗鏍奸檺鍒躲傚鏋滃嚱鏁拌秴榪?0琛岋紝鍙互鑰冭檻鍦ㄤ笉褰卞搷紼嬪簭緇撴瀯鐨勬儏鍐典笅灝嗗叾鍒嗗壊涓涓嬨?/p> <p>鍗充嬌涓涓暱鍑芥暟鐜板湪宸ヤ綔鐨勯潪甯稿ソ錛屼竴鏃︽湁浜哄鍏朵慨鏀癸紝鏈夊彲鑳藉嚭鐜版柊鐨勯棶棰橈紝鐢氳嚦瀵艱嚧闅句互鍙戠幇鐨刡ugs銆備嬌鍑芥暟灝介噺鐭皬銆佺畝鍗曪紝渚夸簬浠栦漢闃呰鍜屼慨鏀逛唬鐮併?/p> <p>鍦ㄥ鐞嗕唬鐮佹椂錛屼綘鍙兘浼氬彂鐜板鏉傜殑闀垮嚱鏁幫紝涓嶈瀹蟲曚慨鏀圭幇鏈変唬鐮侊細濡傛灉璇佸疄榪欎簺浠g爜浣跨敤銆佽皟璇曞洶闅撅紝鎴栬呬綘闇瑕佷嬌鐢ㄥ叾涓殑涓灝忓潡錛岃冭檻灝嗗叾鍒嗗壊涓烘洿鍔犵煭灝忋佹槗浜庣鐞嗙殑鑻ュ共鍑芥暟銆?/p> <p>______________________________________ </p> <p>璇戣咃細鍏充簬綾葷殑娉ㄦ剰浜嬮」錛屾葷粨涓涓嬶細 <p><strong>1. 涓嶅湪鏋勯犲嚱鏁頒腑鍋氬お澶氶昏緫鐩稿叧鐨勫垵濮嬪寲錛?/strong> <p><strong>2. 緙栬瘧鍣ㄦ彁渚涚殑榛樿鏋勯犲嚱鏁頒笉浼氬鍙橀噺榪涜鍒濆鍖栵紝濡傛灉瀹氫箟浜嗗叾浠栨瀯閫犲嚱鏁幫紝緙栬瘧鍣ㄤ笉鍐嶆彁渚涳紝闇瑕佺紪鐮佽呰嚜琛屾彁渚涢粯璁ゆ瀯閫犲嚱鏁幫紱</strong> <p><strong>3. 涓洪伩鍏嶉殣寮忚漿鎹紝闇灝嗗崟鍙傛暟鏋勯犲嚱鏁板0鏄庝負explicit錛?/strong> <p><strong>4. 涓洪伩鍏嶆嫹璐濇瀯閫犲嚱鏁般佽祴鍊兼搷浣滅殑婊ョ敤鍜岀紪璇戝櫒鑷姩鐢熸垚錛屽彲鐩墠澹版槑鍏朵負private涓旀棤闇瀹炵幇錛?/strong> <p><strong>5. 浠呭湪浣滀負鏁版嵁闆嗗悎鏃朵嬌鐢╯truct錛?/strong> <p><strong>6. 緇勫悎>瀹炵幇緇ф壙>鎺ュ彛緇ф壙>縐佹湁緇ф壙錛屽瓙綾婚噸杞界殑铏氬嚱鏁頒篃瑕佸0鏄巚irtual鍏抽敭瀛楋紝铏界劧緙栬瘧鍣ㄥ厑璁鎬笉榪欐牱鍋氾紱</strong> <p><strong>7. 閬垮厤浣跨敤澶氶噸緇ф壙錛屼嬌鐢ㄦ椂錛岄櫎涓涓熀綾誨惈鏈夊疄鐜板錛屽叾浠栧熀綾誨潎涓虹函鎺ュ彛錛?/strong> <p><strong>8. 鎺ュ彛綾葷被鍚嶄互Interface涓哄悗緙錛岄櫎鎻愪緵甯﹀疄鐜扮殑铏氭瀽鏋勫嚱鏁般侀潤鎬佹垚鍛樺嚱鏁板錛屽叾浠栧潎涓虹函铏氬嚱鏁幫紝涓嶅畾涔夐潪闈欐佹暟鎹垚鍛橈紝涓嶆彁渚涙瀯閫犲嚱鏁幫紝鎻愪緵鐨勮瘽錛屽0鏄庝負protected錛?/strong> <p><strong>9. 涓洪檷浣庡鏉傛э紝灝介噺涓嶉噸杞芥搷浣滅錛屾ā鏉褲佹爣鍑嗙被涓嬌鐢ㄦ椂鎻愪緵鏂囨。璇存槑錛?/strong> <p><strong>10. 瀛樺彇鍑芥暟涓鑸唴鑱斿湪澶存枃浠朵腑錛?/strong> <p><strong>11. 澹版槑嬈″簭錛歱ublic->protected->private錛?/strong> <p><strong>12. 鍑芥暟浣撳敖閲忕煭灝忋佺揣鍑戯紝鍔熻兘鍗曚竴銆?/strong></p><img src ="http://www.shnenglu.com/Fox/aggbug/56324.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Fox/" target="_blank">Fox</a> 2008-07-16 17:43 <a href="http://www.shnenglu.com/Fox/archive/2008/07/16/56324.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>[璇慮Google C++緙栫▼椋庢牸鎸囧崡錛堜簩錛?/title><link>http://www.shnenglu.com/Fox/archive/2008/07/14/56109.html</link><dc:creator>Fox</dc:creator><author>Fox</author><pubDate>Mon, 14 Jul 2008 07:49:00 GMT</pubDate><guid>http://www.shnenglu.com/Fox/archive/2008/07/14/56109.html</guid><wfw:comment>http://www.shnenglu.com/Fox/comments/56109.html</wfw:comment><comments>http://www.shnenglu.com/Fox/archive/2008/07/14/56109.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.shnenglu.com/Fox/comments/commentRss/56109.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Fox/services/trackbacks/56109.html</trackback:ping><description><![CDATA[<p>鍘熸枃鍦板潃錛?a title="Google C++ Style Guide" target="_blank" rel="tag">Google C++ Style Guide</a></p> <ul> <li><strong><font color="#800000">浣滅敤鍩?/font></strong></li></ul> <p><strong><font color="#800000">1. 鍛藉悕絀洪棿錛圢amespaces錛?/font></strong></p> <p>鍦?cc鏂囦歡涓紝鎻愬′嬌鐢?font color="#800000">涓嶅叿鍚嶇殑鍛藉悕絀洪棿錛坲nnamed namespaces錛岃瘧鑰呮敞錛氫笉鍏峰悕鐨勫懡鍚嶇┖闂村氨鍍忎笉鍏峰悕鐨勭被涓鏍鳳紝浼間箮琚粙緇嶇殑寰堝皯:-(錛?/font>銆備嬌鐢ㄥ叿鍚嶅懡鍚嶇┖闂存椂錛屽叾鍚嶇О鍙熀浜庨」鐩垨璺緞鍚嶇О錛屼笉瑕佷嬌鐢╱sing鎸囩ず絎︺?/p> <p><strong>瀹氫箟錛?/strong>鍛藉悕絀洪棿灝嗗叏灞浣滅敤鍩熺粏鍒嗕負涓嶅悓鐨勩佸叿鍚嶇殑浣滅敤鍩燂紝鍙湁鏁堥槻姝㈠叏灞浣滅敤鍩熺殑鍛藉悕鍐茬獊銆?/p> <p><strong>浼樼偣錛?/strong>鍛藉悕絀洪棿鎻愪緵浜嗭紙鍙祵濂楋級<font color="#800000">鍛藉悕杞寸嚎錛坣ame axis錛岃瘧鑰呮敞</font><font color="#800000">錛氬皢鍛藉悕鍒嗗壊鍦ㄤ笉鍚屽懡鍚嶇┖闂村唴錛?/font>錛屽綋鐒訛紝綾諱篃鎻愪緵浜嗭紙鍙祵濂楋級鐨勫懡鍚嶈醬綰匡紙<font color="#800000">璇戣呮敞錛氬皢鍛藉悕鍒嗗壊鍦ㄤ笉鍚岀被鐨勪綔鐢ㄥ煙鍐?/font>錛夈?/p> <p>涓句緥鏉ヨ錛屼袱涓笉鍚岄」鐩殑鍏ㄥ眬浣滅敤鍩熼兘鏈変竴涓被Foo錛岃繖鏍峰湪緙栬瘧鎴栬繍琛屾椂閫犳垚鍐茬獊銆傚鏋滄瘡涓」鐩皢浠g爜緗簬涓嶅悓鍛藉悕絀洪棿涓紝project1::Foo鍜宲roject2::Foo浣滀負涓嶅悓絎﹀彿鑷劧涓嶄細鍐茬獊銆?/p> <p><strong>緙虹偣錛?/strong>鍛藉悕絀洪棿鍏鋒湁榪鋒儜鎬э紝鍥犱負瀹冧滑鍜岀被涓鏍鋒彁渚涗簡棰濆鐨勶紙鍙祵濂楃殑錛夊懡鍚嶈醬綰褲傚湪澶存枃浠朵腑浣跨敤涓嶅叿鍚嶇殑絀洪棿瀹規槗榪濊儗C++鐨?font color="#800000">鍞竴瀹氫箟鍘熷垯錛圤ne Definition Rule (ODR)錛?/font>銆?/p> <p><strong>緇撹錛?/strong>鏍規嵁涓嬫枃灝嗚鎻愬埌鐨勭瓥鐣ュ悎鐞嗕嬌鐢ㄥ懡鍚嶇┖闂淬?/p> <p><strong><font color="#800000">1) 涓嶅叿鍚嶅懡鍚嶇┖闂達紙Unnamed Namespaces錛?/font></strong></p> <p>鍦?cc鏂囦歡涓紝鍏佽鐢氳嚦鎻愬′嬌鐢ㄤ笉鍏峰悕鍛藉悕絀洪棿錛屼互閬垮厤榪愯鏃剁殑鍛藉悕鍐茬獊錛?/p> <p>namespace {                                   // .cc 鏂囦歡涓? <p>// 鍛藉悕絀洪棿鐨勫唴瀹規棤闇緙╄繘<br>enum { UNUSED, EOF, ERROR };          // 緇忓父浣跨敤鐨勭鍙?br>bool AtEof() { return pos_ == EOF; }   // 浣跨敤鏈懡鍚嶇┖闂村唴鐨勭鍙稥OF <p>}  // namespace <p>鐒惰岋紝涓庣壒瀹氱被鍏寵仈鐨勬枃浠朵綔鐢ㄥ煙澹版槑鍦ㄨ綾諱腑琚0鏄庝負綾誨瀷銆侀潤鎬佹暟鎹垚鍛樻垨闈欐佹垚鍛樺嚱鏁幫紝鑰屼笉鏄笉鍏峰悕鍛藉悕絀洪棿鐨勬垚鍛樸傚儚涓婃枃灞曠ず鐨勯偅鏍鳳紝涓嶅叿鍚嶅懡鍚嶇┖闂寸粨鏉熸椂鐢ㄦ敞閲?/ namespace鏍囪瘑銆? <p>涓嶈兘鍦?h鏂囦歡涓嬌鐢ㄤ笉鍏峰悕鍛藉悕絀洪棿銆? <p><font color="#800000"><strong>2) 鍏峰悕鍛藉悕絀洪棿錛圢amed Namespaces錛?/strong></font> <p>鍏峰悕鍛藉悕絀洪棿浣跨敤鏂瑰紡濡備笅錛?/p> <p>鍛藉悕絀洪棿灝?font color="#800000">闄ゆ枃浠跺寘鍚佸叏灞鏍囪瘑鐨勫0鏄?瀹氫箟浠ュ強綾葷殑鍓嶇疆澹版槑澶?/font>鐨勬暣涓簮鏂囦歡灝佽璧鋒潵錛屼互鍚屽叾浠栧懡鍚嶇┖闂寸浉鍖哄垎銆?/p> <p>// .h鏂囦歡<br>namespace mynamespace { </p> <p>// 鎵鏈夊0鏄庨兘緗簬鍛藉悕絀洪棿涓?br>// 娉ㄦ剰涓嶈浣跨敤緙╄繘<br>class MyClass {<br>public:<br>  ...<br>  void Foo();<br>}; <p>}  // namespace mynamespace</p> <p>// .cc鏂囦歡<br>namespace mynamespace { </p> <p>// 鍑芥暟瀹氫箟閮界疆浜庡懡鍚嶇┖闂翠腑<br>void MyClass::Foo() {<br>  ...<br>} <p>}  // namespace mynamespace <p>閫氬父鐨?cc鏂囦歡浼氬寘鍚洿澶氥佹洿澶嶆潅鐨勭粏鑺傦紝鍖呮嫭瀵瑰叾浠栧懡鍚嶇┖闂翠腑綾葷殑寮曠敤絳夈? <p>#include "a.h" <p>DEFINE_bool(someflag, false, "dummy flag"); <p>class C;  // 鍏ㄥ眬鍛藉悕絀洪棿涓被C鐨勫墠緗0鏄?br>namespace a { class A; }  // 鍛藉悕絀洪棿a涓殑綾籥::A鐨勫墠緗0鏄? <p>namespace b { <p>...code for b...                // b涓殑浠g爜 <p>}  // namespace b</p> <p>涓嶈澹版槑鍛藉悕絀洪棿std涓嬬殑浠諱綍鍐呭錛屽寘鎷爣鍑嗗簱綾葷殑鍓嶇疆澹版槑銆傚0鏄巗td涓嬬殑瀹炰綋浼氬鑷翠笉鏄庣‘鐨勮涓猴紝濡傦紝涓嶅彲縐繪銆傚0鏄庢爣鍑嗗簱涓嬬殑瀹炰綋錛岄渶瑕佸寘鍚搴旂殑澶存枃浠躲?/p> <p>鏈濂戒笉瑕佷嬌鐢╱sing鎸囩ず絎︼紝浠ヤ繚璇佸懡鍚嶇┖闂翠笅鐨勬墍鏈夊悕縐伴兘鍙互姝e父浣跨敤銆?/p> <p>// 紱佹鈥斺旀薄鏌撳懡鍚嶇┖闂?br>using namespace foo;</p> <p>鍦?cc鏂囦歡銆?h鏂囦歡鐨勫嚱鏁般佹柟娉曟垨綾諱腑錛屽彲浠ヤ嬌鐢╱sing銆?/p> <p>// 鍏佽錛?cc鏂囦歡涓?br>// .h鏂囦歡涓紝蹇呴』鍦ㄥ嚱鏁般佹柟娉曟垨綾葷殑鍐呴儴浣跨敤<br>using ::foo::bar;</p> <p>鍦?cc鏂囦歡銆?h鏂囦歡鐨勫嚱鏁般佹柟娉曟垨綾諱腑錛岃繕鍙互浣跨敤鍛藉悕絀洪棿鍒悕銆?/p>// 鍏佽錛?cc鏂囦歡涓?br>// .h鏂囦歡涓紝蹇呴』鍦ㄥ嚱鏁般佹柟娉曟垨綾葷殑鍐呴儴浣跨敤<br> <p>namespace fbz = ::foo::bar::baz;</p> <p><strong><font color="#800000">2. 宓屽綾伙紙Nested Class錛?/font></strong></p> <p>褰撳叕寮宓屽綾諱綔涓烘帴鍙g殑涓閮ㄥ垎鏃訛紝铏界劧鍙互鐩存帴灝嗕粬浠繚鎸佸湪鍏ㄥ眬浣滅敤鍩熶腑錛屼絾灝嗗祵濂楃被鐨勫0鏄庣疆浜庡懡鍚嶇┖闂翠腑鏄洿濂界殑閫夋嫨銆?/p> <p><strong>瀹氫箟錛?/strong>鍙互鍦ㄤ竴涓被涓畾涔夊彟涓涓被錛屽祵濂楃被涔熺О<font color="#800000">鎴愬憳綾伙紙member class錛?/font>銆? <p>class Foo { <p>private:<br>  // Bar鏄祵濂楀湪Foo涓殑鎴愬憳綾?br>  class Bar {<br>    ...<br>  }; <p>}; <p><strong>浼樼偣錛?/strong>褰撳祵濂楋紙鎴愬憳錛夌被鍙湪<font color="#800000">琚祵濂楃被錛坋nclosing class錛?/font>涓嬌鐢ㄦ椂寰堟湁鐢紝灝嗗叾緗簬琚祵濂楃被浣滅敤鍩熶綔涓鴻宓屽綾葷殑鎴愬憳涓嶄細姹℃煋鍏朵粬浣滅敤鍩熷悓鍚嶇被銆傚彲鍦ㄨ宓屽綾諱腑鍓嶇疆澹版槑宓屽綾伙紝鍦?cc鏂囦歡涓畾涔夊祵濂楃被錛岄伩鍏嶅湪琚祵濂楃被涓寘鍚祵濂楃被鐨勫畾涔夛紝鍥犱負宓屽綾葷殑瀹氫箟閫氬父鍙笌瀹炵幇鐩稿叧銆? <p><strong>緙虹偣錛?/strong>鍙兘鍦ㄨ宓屽綾葷殑瀹氫箟涓墠鑳藉墠緗0鏄庡祵濂楃被銆傚洜姝わ紝浠諱綍浣跨敤Foo::Bar*鎸囬拡鐨勫ご鏂囦歡蹇呴』鍖呭惈鏁翠釜Foo鐨勫0鏄庛? <p><strong>緇撹錛?/strong>涓嶈灝嗗祵濂楃被瀹氫箟涓簆ublic錛岄櫎闈炲畠浠槸鎺ュ彛鐨勪竴閮ㄥ垎錛屾瘮濡傦紝鏌愪釜鏂規硶浣跨敤浜嗚繖涓被鐨勪竴緋誨垪閫夐」銆? <p><font color="#800000"><strong>3. 闈炴垚鍛樺嚱鏁幫紙Nonmember錛夈侀潤鎬佹垚鍛樺嚱鏁幫紙Static Member錛夊拰鍏ㄥ眬鍑芥暟錛圙lobal Functions錛?/strong></font> <p>浣跨敤鍛藉悕絀洪棿涓殑闈炴垚鍛樺嚱鏁版垨闈欐佹垚鍛樺嚱鏁幫紝灝介噺涓嶈浣跨敤鍏ㄥ眬鍑芥暟銆? <p><strong>浼樼偣錛?/strong>鏌愪簺鎯呭喌涓嬶紝闈炴垚鍛樺嚱鏁板拰闈欐佹垚鍛樺嚱鏁版槸闈炲父鏈夌敤鐨勶紝灝嗛潪鎴愬憳鍑芥暟緗簬鍛藉悕絀洪棿涓彲閬垮厤瀵瑰叏灞浣滅敤鍩熺殑姹℃煋銆? <p><strong>緙虹偣錛?/strong>灝嗛潪鎴愬憳鍑芥暟鍜岄潤鎬佹垚鍛樺嚱鏁頒綔涓烘柊綾葷殑鎴愬憳鎴栬鏇存湁鎰忎箟錛屽綋瀹冧滑闇瑕佽闂閮ㄨ祫婧愭垨鍏鋒湁閲嶈渚濊禆鏃舵洿鏄姝ゃ? <p><strong>緇撹錛?/strong> <p>鏈夋椂錛屼笉鎶婂嚱鏁伴檺瀹氬湪綾葷殑瀹炰綋涓槸鏈夌泭鐨勶紝鐢氳嚦闇瑕佽繖涔堝仛錛岃涔堜綔涓洪潤鎬佹垚鍛橈紝瑕佷箞浣滀負闈炴垚鍛樺嚱鏁般傞潪鎴愬憳鍑芥暟涓嶅簲渚濊禆浜庡閮ㄥ彉閲忥紝騫跺敖閲忕疆浜庢煇涓懡鍚嶇┖闂翠腑銆傜浉姣斿崟綰負浜嗗皝瑁呰嫢騫蹭笉鍏變韓浠諱綍闈欐佹暟鎹殑闈欐佹垚鍛樺嚱鏁拌屽垱寤虹被錛屼笉濡備嬌鐢ㄥ懡鍚嶇┖闂淬? <p>瀹氫箟浜庡悓涓緙栬瘧鍗曞厓鐨勫嚱鏁幫紝琚叾浠栫紪璇戝崟鍏冪洿鎺ヨ皟鐢ㄥ彲鑳戒細寮曞叆涓嶅繀瑕佺殑鑰﹀悎鍜岃繛鎺ヤ緷璧栵紱闈欐佹垚鍛樺嚱鏁板姝ゅ挨鍏舵晱鎰熴傚彲浠ヨ冭檻鎻愬彇鍒版柊綾諱腑錛屾垨鑰呭皢鍑芥暟緗簬鐙珛搴撶殑鍛藉悕絀洪棿涓? <p>濡傛灉浣犵‘瀹為渶瑕佸畾涔夐潪鎴愬憳鍑芥暟錛屽張鍙槸鍦?cc鏂囦歡涓嬌鐢ㄥ畠錛屽彲浣跨敤涓嶅叿鍚嶅懡鍚嶇┖闂存垨static鍏寵仈錛堝<code>static int Foo() {...}</code>錛夐檺瀹氬叾浣滅敤鍩熴? <p><strong><font color="#800000">4. 灞閮ㄥ彉閲忥紙Local Variables錛?/font></strong> <p>灝嗗嚱鏁板彉閲忓敖鍙兘緗簬鏈灝忎綔鐢ㄥ煙鍐咃紝鍦ㄥ0鏄庡彉閲忔椂灝嗗叾鍒濆鍖栥?/p> <p>C++鍏佽鍦ㄥ嚱鏁扮殑浠諱綍浣嶇疆澹版槑鍙橀噺銆傛垜浠彁鍊″湪灝藉彲鑳藉皬鐨勪綔鐢ㄥ煙涓0鏄庡彉閲忥紝紱葷涓嬈′嬌鐢ㄨ秺榪戣秺濂姐傝繖浣垮緱浠g爜鏄撲簬闃呰錛屾槗浜庡畾浣嶅彉閲忕殑澹版槑浣嶇疆銆佸彉閲忕被鍨嬪拰鍒濆鍊箋傜壒鍒槸錛屽簲浣跨敤鍒濆鍖栦唬鏇垮0鏄?璧嬪肩殑鏂瑰紡銆?/p> <p>int i;<br>i = f();        // 鍧忊斺斿垵濮嬪寲鍜屽0鏄庡垎紱?br>nt j = g();   // 濂解斺斿垵濮嬪寲鏃跺0鏄?/p> <p>娉ㄦ剰錛歡cc鍙紜墽琛宖or (int i = 0; i < 10; ++i)錛坕鐨勪綔鐢ㄥ煙浠呴檺for寰幆錛夛紝鍥犳鍏朵粬for寰幆涓彲閲嶇敤i銆俰f鍜寃hile絳夎鍙ヤ腑錛?font color="#800000">浣滅敤鍩熷0鏄庯紙scope declaration錛?/font>鍚屾牱鏄紜殑銆?/p> <p>while (const char* p = strchr(str, '/')) str = p + 1;</p> <p>娉ㄦ剰錛氬鏋滃彉閲忔槸涓涓璞★紝姣忔榪涘叆浣滅敤鍩熼兘瑕佽皟鐢ㄥ叾鏋勯犲嚱鏁幫紝姣忔閫鍑轟綔鐢ㄥ煙閮借璋冪敤鍏舵瀽鏋勫嚱鏁般?/p> <p>// 浣庢晥鐨勫疄鐜?br>for (int i = 0; i < 1000000; ++i) {<br>  Foo f;  // 鏋勯犲嚱鏁板拰鏋愭瀯鍑芥暟鍒嗗埆璋冪敤1000000嬈★紒<br>  f.DoSomething(i);<br>}</p> <p>綾諱技鍙橀噺鏀懼埌寰幆浣滅敤鍩熷闈㈠0鏄庤楂樻晥鐨勫錛?/p> <p>Foo f;  // 鏋勯犲嚱鏁板拰鏋愭瀯鍑芥暟鍙皟鐢?嬈?br>for (int i = 0; i < 1000000; ++i) {<br>  f.DoSomething(i);<br>}</p> <p><strong><font color="#800000">5. 鍏ㄥ眬鍙橀噺錛圙lobal Variables錛?/font></strong></p> <p>class綾誨瀷鐨勫叏灞鍙橀噺鏄紱佹鐨勶紝鍐呭緩綾誨瀷鐨勫叏灞鍙橀噺鏄厑璁哥殑錛屽綋鐒跺綰跨▼浠g爜涓潪甯告暟鍏ㄥ眬鍙橀噺涔熸槸琚姝㈢殑銆傛案榪滀笉瑕佷嬌鐢ㄥ嚱鏁拌繑鍥炲煎垵濮嬪寲鍏ㄥ眬鍙橀噺銆?/p> <p>涓嶅垢鐨勬槸錛屽叏灞鍙橀噺鐨勬瀯閫犲嚱鏁般佹瀽鏋勫嚱鏁頒互鍙婂垵濮嬪寲鎿嶄綔鐨勮皟鐢ㄩ『搴忓彧鏄閮ㄥ垎瑙勫畾錛屾瘡嬈$敓鎴愭湁鍙兘浼氭湁鍙樺寲錛屼粠鑰屽鑷撮毦浠ュ彂鐜扮殑bugs銆?/p> <p>鍥犳錛岀姝嬌鐢╟lass綾誨瀷鐨勫叏灞鍙橀噺錛堝寘鎷琒TL鐨剆tring, vector絳夌瓑錛夛紝鍥犱負瀹冧滑鐨勫垵濮嬪寲欏哄簭鏈夊彲鑳藉鑷存瀯閫犲嚭鐜伴棶棰樸傚唴寤虹被鍨嬪拰鐢卞唴寤虹被鍨嬫瀯鎴愮殑娌℃湁鏋勯犲嚱鏁扮殑緇撴瀯浣撳彲浠ヤ嬌鐢紝濡傛灉浣犱竴瀹氳浣跨敤class綾誨瀷鐨勫叏灞鍙橀噺錛岃浣跨敤<font color="#800000">鍗曚歡妯″紡錛坰ingleton pattern錛?/font>銆?/p> <p>瀵逛簬鍏ㄥ眬鐨勫瓧絎︿覆甯擱噺錛屼嬌鐢–椋庢牸鐨勫瓧絎︿覆錛岃屼笉瑕佷嬌鐢⊿TL鐨勫瓧絎︿覆錛?/p> <p>const char kFrogSays[] = "ribbet";</p> <p>铏界劧鍏佽鍦ㄥ叏灞浣滅敤鍩熶腑浣跨敤鍏ㄥ眬鍙橀噺錛屼嬌鐢ㄦ椂鍔″繀涓夋濄傚ぇ澶氭暟鍏ㄥ眬鍙橀噺搴旇鏄被鐨勯潤鎬佹暟鎹垚鍛橈紝鎴栬呭綋鍏跺彧鍦?cc鏂囦歡涓嬌鐢ㄦ椂錛屽皢鍏跺畾涔夊埌涓嶅叿鍚嶅懡鍚嶇┖闂翠腑錛屾垨鑰呬嬌鐢ㄩ潤鎬佸叧鑱斾互闄愬埗鍙橀噺鐨勪綔鐢ㄥ煙銆?/p> <p>璁頒綇錛岄潤鎬佹垚鍛樺彉閲忚浣滃叏灞鍙橀噺錛屾墍浠ワ紝涔熶笉鑳芥槸class綾誨瀷錛?/p> <p>______________________________________ </p> <p>璇戣咃細榪欎竴綃囦富瑕佹彁鍒扮殑鏄綔鐢ㄥ煙鐨勪竴浜涜鍒欙紝鎬葷粨涓涓嬶細 <p><strong>1. .cc涓殑涓嶅叿鍚嶅懡鍚嶇┖闂村彲閬垮厤鍛藉悕鍐茬獊銆侀檺瀹氫綔鐢ㄥ煙錛岄伩鍏嶇洿鎺ヤ嬌鐢╱sing鎻愮ず絎︽薄鏌撳懡鍚嶇┖闂達紱</strong> <p><strong>2. 宓屽綾葷鍚堝眬閮ㄤ嬌鐢ㄥ師鍒欙紝鍙槸涓嶈兘鍦ㄥ叾浠栧ご鏂囦歡涓墠緗0鏄庯紝灝介噺涓嶈public錛?/strong> <p><strong>3. 灝介噺涓嶇敤鍏ㄥ眬鍑芥暟鍜屽叏灞鍙橀噺錛岃冭檻浣滅敤鍩熷拰鍛藉悕絀洪棿闄愬埗錛屽敖閲忓崟鐙艦鎴愮紪璇戝崟鍏冿紱</strong> <p><strong>4. 澶氱嚎紼嬩腑鐨勫叏灞鍙橀噺錛堝惈闈欐佹垚鍛樺彉閲忥級涓嶈浣跨敤class綾誨瀷錛堝惈STL瀹瑰櫒錛夛紝閬垮厤涓嶆槑紜涓哄鑷寸殑bugs</strong><strong>銆?/strong> <p><strong>浣滅敤鍩熺殑浣跨敤錛岄櫎浜嗚冭檻鍚嶇О姹℃煋銆佸彲璇繪т箣澶栵紝涓昏鏄負闄嶄綆鑰﹀悎搴︼紝鎻愰珮緙栬瘧銆佹墽琛屾晥鐜囥?/strong></p><img src ="http://www.shnenglu.com/Fox/aggbug/56109.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Fox/" target="_blank">Fox</a> 2008-07-14 15:49 <a href="http://www.shnenglu.com/Fox/archive/2008/07/14/56109.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://www.shnenglu.com/">青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品</a> <div style="position:fixed;left:-9000px;top:-9000px;"><font id="pjuwb"></font><button id="pjuwb"><pre id="pjuwb"></pre></button><sub id="pjuwb"></sub><tbody id="pjuwb"><var id="pjuwb"><address id="pjuwb"></address></var></tbody><listing id="pjuwb"><label id="pjuwb"><strong id="pjuwb"></strong></label></listing><wbr id="pjuwb"><small id="pjuwb"><tbody id="pjuwb"></tbody></small></wbr><ins id="pjuwb"><xmp id="pjuwb"></xmp></ins><style id="pjuwb"></style><label id="pjuwb"><em id="pjuwb"><li id="pjuwb"></li></em></label><samp id="pjuwb"></samp><menu id="pjuwb"><input id="pjuwb"></input></menu><pre id="pjuwb"><tbody id="pjuwb"><tfoot id="pjuwb"><button id="pjuwb"></button></tfoot></tbody></pre><form id="pjuwb"></form><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"><sup id="pjuwb"></sup></label></style></i><li id="pjuwb"><table id="pjuwb"><abbr id="pjuwb"></abbr></table></li><video id="pjuwb"></video><dfn id="pjuwb"></dfn><progress id="pjuwb"></progress><strong id="pjuwb"></strong><mark id="pjuwb"></mark><em id="pjuwb"></em><tbody id="pjuwb"><p id="pjuwb"><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike></p></tbody><option id="pjuwb"></option><strike id="pjuwb"></strike><u id="pjuwb"></u><td id="pjuwb"><center id="pjuwb"><tr id="pjuwb"></tr></center></td><em id="pjuwb"><mark id="pjuwb"><em id="pjuwb"><tt id="pjuwb"></tt></em></mark></em><strong id="pjuwb"></strong><wbr id="pjuwb"></wbr><s id="pjuwb"></s><strong id="pjuwb"></strong><legend id="pjuwb"></legend><nav id="pjuwb"></nav><dl id="pjuwb"><th id="pjuwb"><dl id="pjuwb"></dl></th></dl><noframes id="pjuwb"><ins id="pjuwb"></ins></noframes><font id="pjuwb"></font><strike id="pjuwb"><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"></label></style></i></strike><output id="pjuwb"></output><thead id="pjuwb"><pre id="pjuwb"></pre></thead><source id="pjuwb"></source><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem><pre id="pjuwb"><span id="pjuwb"><pre id="pjuwb"><big id="pjuwb"></big></pre></span></pre><cite id="pjuwb"><fieldset id="pjuwb"><s id="pjuwb"><rt id="pjuwb"></rt></s></fieldset></cite><big id="pjuwb"><progress id="pjuwb"><big id="pjuwb"></big></progress></big><samp id="pjuwb"><delect id="pjuwb"></delect></samp><dl id="pjuwb"></dl><strike id="pjuwb"><nav id="pjuwb"><dl id="pjuwb"><strong id="pjuwb"></strong></dl></nav></strike><tbody id="pjuwb"><b id="pjuwb"><optgroup id="pjuwb"><rp id="pjuwb"></rp></optgroup></b></tbody><em id="pjuwb"></em><xmp id="pjuwb"><blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote></xmp> <i id="pjuwb"><abbr id="pjuwb"><i id="pjuwb"><abbr id="pjuwb"></abbr></i></abbr></i><center id="pjuwb"><acronym id="pjuwb"><center id="pjuwb"></center></acronym></center><pre id="pjuwb"></pre><ul id="pjuwb"><thead id="pjuwb"></thead></ul><blockquote id="pjuwb"><pre id="pjuwb"><sup id="pjuwb"></sup></pre></blockquote><acronym id="pjuwb"></acronym><big id="pjuwb"><s id="pjuwb"></s></big><th id="pjuwb"></th><th id="pjuwb"></th><tbody id="pjuwb"></tbody><thead id="pjuwb"><strike id="pjuwb"></strike></thead><th id="pjuwb"><dl id="pjuwb"><wbr id="pjuwb"></wbr></dl></th><dl id="pjuwb"><strong id="pjuwb"></strong></dl><abbr id="pjuwb"><noframes id="pjuwb"><noscript id="pjuwb"></noscript></noframes></abbr><td id="pjuwb"><ol id="pjuwb"></ol></td><li id="pjuwb"><noscript id="pjuwb"><abbr id="pjuwb"></abbr></noscript></li><small id="pjuwb"><bdo id="pjuwb"><nav id="pjuwb"></nav></bdo></small><style id="pjuwb"></style><optgroup id="pjuwb"><table id="pjuwb"></table></optgroup><center id="pjuwb"><tr id="pjuwb"><dfn id="pjuwb"></dfn></tr></center><th id="pjuwb"></th><u id="pjuwb"></u><tfoot id="pjuwb"><legend id="pjuwb"><i id="pjuwb"></i></legend></tfoot><mark id="pjuwb"></mark><meter id="pjuwb"></meter><nav id="pjuwb"></nav><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><nobr id="pjuwb"></nobr><sub id="pjuwb"><th id="pjuwb"><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem></th></sub><thead id="pjuwb"><sub id="pjuwb"></sub></thead><ul id="pjuwb"><address id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></address></ul><dfn id="pjuwb"></dfn><pre id="pjuwb"></pre><input id="pjuwb"><cite id="pjuwb"><fieldset id="pjuwb"></fieldset></cite></input><u id="pjuwb"><form id="pjuwb"><u id="pjuwb"></u></form></u><kbd id="pjuwb"><em id="pjuwb"><mark id="pjuwb"></mark></em></kbd><tr id="pjuwb"></tr><del id="pjuwb"><form id="pjuwb"><address id="pjuwb"></address></form></del><tfoot id="pjuwb"><legend id="pjuwb"><ol id="pjuwb"><dl id="pjuwb"></dl></ol></legend></tfoot><menu id="pjuwb"><nobr id="pjuwb"><th id="pjuwb"><nobr id="pjuwb"></nobr></th></nobr></menu><fieldset id="pjuwb"></fieldset><pre id="pjuwb"><blockquote id="pjuwb"><samp id="pjuwb"></samp></blockquote></pre><xmp id="pjuwb"><sup id="pjuwb"><pre id="pjuwb"></pre></sup></xmp><span id="pjuwb"><progress id="pjuwb"></progress></span><font id="pjuwb"></font><var id="pjuwb"><abbr id="pjuwb"></abbr></var><strong id="pjuwb"><label id="pjuwb"><i id="pjuwb"><legend id="pjuwb"></legend></i></label></strong><tr id="pjuwb"><em id="pjuwb"><em id="pjuwb"><output id="pjuwb"></output></em></em></tr><thead id="pjuwb"><strike id="pjuwb"></strike></thead> <acronym id="pjuwb"></acronym><i id="pjuwb"></i><tt id="pjuwb"></tt><rt id="pjuwb"><source id="pjuwb"><rt id="pjuwb"></rt></source></rt><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike><del id="pjuwb"></del><font id="pjuwb"><output id="pjuwb"><ins id="pjuwb"><output id="pjuwb"></output></ins></output></font><kbd id="pjuwb"><tr id="pjuwb"><kbd id="pjuwb"></kbd></tr></kbd><pre id="pjuwb"><sup id="pjuwb"><delect id="pjuwb"><samp id="pjuwb"></samp></delect></sup></pre><samp id="pjuwb"></samp><track id="pjuwb"></track><tr id="pjuwb"></tr><center id="pjuwb"></center><fieldset id="pjuwb"></fieldset><i id="pjuwb"></i><td id="pjuwb"></td><rt id="pjuwb"></rt><object id="pjuwb"></object><pre id="pjuwb"><progress id="pjuwb"><sub id="pjuwb"><thead id="pjuwb"></thead></sub></progress></pre><kbd id="pjuwb"><tr id="pjuwb"><option id="pjuwb"></option></tr></kbd><output id="pjuwb"><ins id="pjuwb"></ins></output><ol id="pjuwb"></ol><source id="pjuwb"></source><strong id="pjuwb"></strong><ruby id="pjuwb"></ruby><sub id="pjuwb"><meter id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></meter></sub><pre id="pjuwb"></pre><center id="pjuwb"></center><tr id="pjuwb"><tbody id="pjuwb"><xmp id="pjuwb"><dd id="pjuwb"></dd></xmp></tbody></tr><video id="pjuwb"></video><pre id="pjuwb"></pre><form id="pjuwb"><optgroup id="pjuwb"></optgroup></form><samp id="pjuwb"></samp><kbd id="pjuwb"></kbd><strong id="pjuwb"><option id="pjuwb"></option></strong><object id="pjuwb"></object><abbr id="pjuwb"><noframes id="pjuwb"><abbr id="pjuwb"></abbr></noframes></abbr><ul id="pjuwb"><del id="pjuwb"><button id="pjuwb"><pre id="pjuwb"></pre></button></del></ul><abbr id="pjuwb"></abbr><strong id="pjuwb"><code id="pjuwb"><strong id="pjuwb"></strong></code></strong><option id="pjuwb"></option><optgroup id="pjuwb"><bdo id="pjuwb"><code id="pjuwb"></code></bdo></optgroup><mark id="pjuwb"><em id="pjuwb"><font id="pjuwb"></font></em></mark><acronym id="pjuwb"><code id="pjuwb"></code></acronym><dl id="pjuwb"></dl><em id="pjuwb"></em><object id="pjuwb"><input id="pjuwb"><object id="pjuwb"></object></input></object><output id="pjuwb"><dd id="pjuwb"></dd></output><option id="pjuwb"><button id="pjuwb"><option id="pjuwb"></option></button></option><small id="pjuwb"></small></div> <a href="http://www31931.com" target="_blank">午夜日韩在线</a>| <a href="http://300644.com" target="_blank">麻豆久久精品</a>| <a href="http://66889h.com" target="_blank">亚洲一区二区三区四区五区黄 </a>| <a href="http://qiruiwangluo.com" target="_blank">亚洲夫妻自拍</a>| <a href="http://www-4012345.com" target="_blank">欧美激情一区二区三区在线视频观看 </a>| <a href="http://baoyu1313.com" target="_blank">一色屋精品视频在线观看网站</a>| <a href="http://7628x.com" target="_blank">国产一区二区三区的电影</a>| <a href="http://zhaosaofu.com" target="_blank">国内视频一区</a>| <a href="http://www55747.com" target="_blank">影音先锋亚洲电影</a>| <a href="http://susan5.com" target="_blank">欧美在线综合视频</a>| <a href="http://176sfsf.com" target="_blank">91久久线看在观草草青青</a>| <a href="http://by5263.com" target="_blank">久久男女视频</a>| <a href="http://fanwenok.com" target="_blank">欧美日一区二区在线观看</a>| <a href="http://www-xj788.com" target="_blank">韩国欧美国产1区</a>| <a href="http://winkwink333.com" target="_blank">欧美专区日韩专区</a>| <a href="http://www-888690.com" target="_blank">性感少妇一区</a>| <a href="http://yzstbjt.com" target="_blank">国产精品美女诱惑</a>| <a href="http://yjjs20.com" target="_blank">欧美在线精品免播放器视频</a>| <a href="http://wwwyinyinai149.com" target="_blank">一本久久综合亚洲鲁鲁</a>| <a href="http://qiezisp2.com" target="_blank">欧美日韩激情小视频</a>| <a href="http://javdb04.com" target="_blank">亚洲综合另类</a>| <a href="http://aberyco.com" target="_blank">亚洲综合精品自拍</a>| <a href="http://555134.com" target="_blank">久久综合九色综合欧美就去吻</a>| <a href="http://caopormo.com" target="_blank">美女尤物久久精品</a>| <a href="http://xsjgxx.com" target="_blank">在线观看亚洲</a>| <a href="http://dmzjz.com" target="_blank">亚洲乱码日产精品bd</a>| <a href="http://www92444.com" target="_blank">欧美日韩一级片在线观看</a>| <a href="http://susan5.com" target="_blank">欧美在线三级</a>| <a href="http://www22336.com" target="_blank">欧美主播一区二区三区</a>| <a href="http://jpqueyou.com" target="_blank">韩日在线一区</a>| <a href="http://18loutv.com" target="_blank">正在播放亚洲一区</a>| <a href="http://91x8.com" target="_blank">亚洲精品乱码久久久久久黑人</a>| <a href="http://yiluee.com" target="_blank">欧美激情a∨在线视频播放</a>| <a href="http://ywbst8g4tukcsqhioikc.com" target="_blank">欧美精品播放</a>| <a href="http://jdavmm.com" target="_blank">免费中文字幕日韩欧美</a>| <a href="http://3644688.com" target="_blank">欧美日本亚洲</a>| <a href="http://www107aa.com" target="_blank">亚洲成人在线视频播放 </a>| <a href="http://aass22.com" target="_blank">亚洲精品久久久久</a>| <a href="http://4hup23.com" target="_blank">久久免费偷拍视频</a>| <a href="http://jzsp94.com" target="_blank">欧美日本一区二区高清播放视频</a>| <a href="http://essuee.com" target="_blank">亚洲网站在线观看</a>| <a href="http://m-pisiwa.com" target="_blank">久久夜色精品国产噜噜av</a>| <a href="http://388123cc.com" target="_blank">亚洲美女黄色</a>| <a href="http://lymzdd.com" target="_blank">欧美在线视频导航</a>| <a href="http://www50050.com" target="_blank">日韩亚洲欧美高清</a>| <a href="http://www-4012345.com" target="_blank">久久精品最新地址</a>| <a href="http://qqcf9900.com" target="_blank">欧美一区二区福利在线</a>| <a href="http://hhhh19.com" target="_blank">欧美日韩亚洲一区二区三区在线观看 </a>| <a href="http://phitris.com" target="_blank">1024国产精品</a>| <a href="http://aidingcai.com" target="_blank">另类酷文…触手系列精品集v1小说</a>| <a href="http://haohetour.com" target="_blank">一区二区免费在线播放</a>| <a href="http://iietao.com" target="_blank">香蕉久久久久久久av网站 </a>| <a href="http://wwwq4yy.com" target="_blank">久久琪琪电影院</a>| <a href="http://seo8138.com" target="_blank">一本久久综合亚洲鲁鲁</a>| <a href="http://pao449.com" target="_blank">国产亚洲va综合人人澡精品</a>| <a href="http://gbandal.com" target="_blank">亚洲欧美偷拍卡通变态</a>| <a href="http://free18teen.com" target="_blank">午夜影院日韩</a>| <a href="http://by27333.com" target="_blank">精品91在线</a>| <a href="http://www888x.com" target="_blank">国产精品yjizz</a>| <a href="http://tianxiantxtv.com" target="_blank">欧美福利小视频</a>| <a href="http://kissgz.com" target="_blank">亚洲免费不卡</a>| <a href="http://9113i.com" target="_blank">欧美激情导航</a>| <a href="http://137177.com" target="_blank">亚洲午夜精品17c</a>| <a href="http://balqueen.com" target="_blank">国内精品亚洲</a>| <a href="http://0000zz.com" target="_blank">国产精品一区二区久久久久</a>| <a href="http://yhc26.com" target="_blank">亚洲欧洲一区二区三区在线观看 </a>| <a href="http://changjiucf.com" target="_blank">亚洲精品1区</a>| <a href="http://287975.com" target="_blank">免费不卡在线观看</a>| <a href="http://72966t.com" target="_blank">一区二区三区四区国产</a>| <a href="http://55kam.com" target="_blank">亚洲特级片在线</a>| <a href="http://www9ckk1.com" target="_blank">亚洲黄一区二区三区</a>| <a href="http://baoyu1313.com" target="_blank">免费在线看一区</a>| <a href="http://myasker.com" target="_blank">亚洲精一区二区三区</a>| <a href="http://sdsptl.com" target="_blank">亚洲欧美综合精品久久成人</a>| <a href="http://wwwiqiuxia.com" target="_blank">一卡二卡3卡四卡高清精品视频</a>| <a href="http://uu774.com" target="_blank">国产一区二区三区免费观看</a>| <a href="http://x946.com" target="_blank">国产精品久久久久77777</a>| <a href="http://3644688.com" target="_blank">久久精品国产99</a>| <a href="http://www-442336.com" target="_blank">久久成人在线</a>| <a href="http://3737520.com" target="_blank">久久av资源网</a>| <a href="http://thisisfil.com" target="_blank">亚洲一区二区在线视频</a>| <a href="http://3bmmtv.com" target="_blank">久久九九精品99国产精品</a>| <a href="http://as777as.com" target="_blank">中日韩视频在线观看</a>| <a href="http://26163c.com" target="_blank">国语自产精品视频在线看抢先版结局 </a>| <a href="http://nbpacking.com" target="_blank">99国产精品国产精品久久</a>| <a href="http://8x27.com" target="_blank">亚洲精品在线观</a>| <a href="http://fjrxzscl.com" target="_blank">久久亚洲春色中文字幕久久久</a>| <a href="http://www-5013.com" target="_blank">日韩视频永久免费</a>| <a href="http://678255.com" target="_blank">在线观看精品</a>| <a href="http://jzsp87.com" target="_blank">一区二区三区|亚洲午夜</a>| <a href="http://4534com.com" target="_blank">午夜精品久久久久久久白皮肤</a>| <a href="http://sz-changrong.com" target="_blank">国产一区二区三区在线观看视频 </a>| <a href="http://pabjzz.com" target="_blank">欧美色图一区二区三区</a>| <a href="http://cloakok.com" target="_blank">久久亚洲综合色一区二区三区</a>| <a href="http://my736.com" target="_blank">欧美一区二区三区播放老司机</a>| <a href="http://www-44899.com" target="_blank">亚洲免费在线视频</a>| <a href="http://8xfore.com" target="_blank">亚洲一区二区在</a>| <a href="http://www55avav.com" target="_blank">夜夜爽www精品</a>| <a href="http://66gg6.com" target="_blank">噜噜噜91成人网</a>| <a href="http://wwwbaoyu66.com" target="_blank">久久久激情视频</a>| <a href="http://diyiao.com" target="_blank">久久夜色精品国产欧美乱极品</a>| <a href="http://176sfsf.com" target="_blank">久久精品官网</a>| <a href="http://by27333.com" target="_blank">欧美激情aaaa</a>| <a href="http://sxhrsmjj.com" target="_blank">亚洲精品少妇30p</a>| <a href="http://www-06654.com" target="_blank">亚洲欧美伊人</a>| <a href="http://40346c.com" target="_blank">欧美在线视频一区二区</a>| <a href="http://goldteddy.com" target="_blank">久久久精品网</a>| <a href="http://8181777.com" target="_blank">欧美日韩中文</a>| <a href="http://by2866.com" target="_blank">日韩一区二区免费高清</a>| <a href="http://ccc3636.com" target="_blank">亚洲精选91</a>| <a href="http://yiqipapa8.com" target="_blank">亚洲国产精品美女</a>| <a href="http://babylonmovi.com" target="_blank">日韩亚洲不卡在线</a>| <a href="http://4r6b.com" target="_blank">亚洲综合99</a>| <a href="http://566805.com" target="_blank">欧美视频免费</a>| <a href="http://5588gww.com" target="_blank">在线一区二区三区做爰视频网站 </a>| <a href="http://921367.com" target="_blank">男人天堂欧美日韩</a>| <a href="http://a6a3.com" target="_blank">国产日韩欧美在线播放不卡</a>| <a href="http://www-787333.com" target="_blank">一区二区三区色</a>| <a href="http://ccc982.com" target="_blank">亚洲精品视频在线观看网站</a>| <a href="http://ju5558.com" target="_blank">午夜一区二区三视频在线观看</a>| <a href="http://www-72794.com" target="_blank">欧美另类videos死尸</a>| <a href="http://a718sx.com" target="_blank">亚洲综合导航</a>| <a href="http://817794.com" target="_blank">欧美色偷偷大香</a>| <a href="http://894322.com" target="_blank">日韩视频一区二区</a>| <a href="http://227237.com" target="_blank">亚洲欧洲一区二区在线观看</a>| <a href="http://www-35777.com" target="_blank">欧美主播一区二区三区</a>| <a href="http://tuokuba520.com" target="_blank">国产精品久久久一区麻豆最新章节</a>| <a href="http://66y3.com" target="_blank">亚洲日韩欧美视频</a>| <a href="http://388123cc.com" target="_blank">夜夜嗨av一区二区三区</a>| <a href="http://428820.com" target="_blank">欧美日韩日韩</a>| <a href="http://2589999.com" target="_blank">久久国产99</a>| <a href="http://17kfe.com" target="_blank">久久躁日日躁aaaaxxxx</a>| <a href="http://18av-77.com" target="_blank">亚洲精品护士</a>| <a href="http://yw5531.com" target="_blank">亚洲精品一区中文</a>| <a href="http://sxhrsmjj.com" target="_blank">久久综合色播五月</a>| <a href="http://happyelephantv.com" target="_blank">黄色成人在线</a>| <a href="http://www0505nn.com" target="_blank">日韩亚洲欧美一区二区三区</a>| <a href="http://677679.com" target="_blank">久久精品日产第一区二区三区</a>| <a href="http://51jieyanla.com" target="_blank">亚洲高清视频一区</a>| <a href="http://5917t.com" target="_blank">欧美日韩久久久久久</a>| <a href="http://www-498787.com" target="_blank">欧美一区二区三区男人的天堂</a>| <a href="http://318823.com" target="_blank">久久久久国产精品www</a>| <a href="http://2111952.com" target="_blank">一本大道久久a久久综合婷婷</a>| <a href="http://456888com.com" target="_blank">久久综合狠狠综合久久综合88</a>| <a href="http://961318.com" target="_blank">久久久久国产精品一区</a>| <a href="http://p5555ww.com" target="_blank">午夜综合激情</a>| <a href="http://www-787788.com" target="_blank">久久综合色综合88</a>| <a href="http://xsjgxx.com" target="_blank">亚洲国产1区</a>| <a href="http://sxhrdyb.com" target="_blank">欧美精品七区</a>| <a href="http://luoliguo.com" target="_blank">久久综合色影院</a>| <a href="http://www284tv.com" target="_blank">欧美精品久久一区二区</a>| <a href="http://xmzszx.com" target="_blank">久久riav二区三区</a>| <a href="http://www-772773.com" target="_blank">欧美大秀在线观看 </a>| <a href="http://tingxihuan.com" target="_blank">亚洲成人自拍视频</a>| <a href="http://mytopvogue.com" target="_blank">一本色道久久综合狠狠躁的推荐</a>| <a href="http://521mu.com" target="_blank">亚洲国产欧美日韩精品</a>| <a href="http://8xyxs1.com" target="_blank">亚洲欧美中文字幕</a>| <a href="http://520taose.com" target="_blank">亚洲欧美日韩国产中文在线</a>| <a href="http://wwwzmcc1.com" target="_blank">欧美二区在线播放</a>| <a href="http://778877k.com" target="_blank">日韩午夜激情</a>| <a href="http://xxdd51.com" target="_blank">在线观看一区二区视频</a>| <a href="http://jpqueyou.com" target="_blank">久久精品天堂</a>| <a href="http://spyfaw.com" target="_blank">亚洲一区二区三区免费观看 </a>| <a href="http://wzlingfeng.com" target="_blank">91久久夜色精品国产九色</a>| <a href="http://4254888.com" target="_blank">久久精品天堂</a>| <a href="http://xxxyyy168.com" target="_blank">日韩视频在线一区</a>| <a href="http://o10669.com" target="_blank">久久久国产视频91</a>| <a href="http://wxsanyuan.com" target="_blank">亚洲欧美视频一区</a>| <a href="http://www101804.com" target="_blank">国产一区二区三区网站</a>| <a href="http://www11111111.com" target="_blank">久久五月激情</a>| <a href="http://www-111111.com" target="_blank">久久精品国内一区二区三区</a>| <a href="http://www311pi.com" target="_blank">国产一区二区三区精品久久久 </a>| <a href="http://hellomusiczone.com" target="_blank">国产亚洲福利</a>| <a href="http://guanghezixun.com" target="_blank">久久成人综合网</a>| <a href="http://diao66.com" target="_blank">日韩视频在线一区二区</a>| <a href="http://shiselol.com" target="_blank">亚洲男人的天堂在线aⅴ视频</a>| <a href="http://www11111111.com" target="_blank">亚洲精品无人区</a>| <a href="http://wzlingfeng.com" target="_blank">欧美日韩在线播放一区</a>| <a href="http://567acg.com" target="_blank">日韩视频二区</a>| <a href="http://www87bbw.com" target="_blank">久久精品视频va</a>| <a href="http://http456446.com" target="_blank">亚洲精品韩国</a>| <a href="http://hehextv.com" target="_blank">欧美激情一区在线观看</a>| <a href="http://baoyou118.com" target="_blank">亚洲自拍偷拍一区</a>| <a href="http://hh474.com" target="_blank">欧美va天堂</a>| <a href="http://342889.com" target="_blank">亚洲一二三区在线</a>| <a href="http://794278.com" target="_blank">亚洲午夜精品久久</a>| <a href="http://9952222.com" target="_blank">亚洲精选中文字幕</a>| <a href="http://cabenn.com" target="_blank">国产一区日韩一区</a>| <a href="http://chunhuigk.com" target="_blank">欧美女同视频</a>| <a href="http://syddzs.com" target="_blank">欧美高清视频在线观看</a>| <a href="http://7755cc.com" target="_blank">亚洲一区二区在线免费观看</a>| <a href="http://9511331.com" target="_blank">99视频一区二区</a>| <a href="http://527937.com" target="_blank">91久久综合</a>| <a href="http://chainhuayu.com" target="_blank">模特精品在线</a>| <a href="http://ccly2.com" target="_blank">欧美激情精品久久久</a>| <a href="http://hfztkyhfz.com" target="_blank">久久亚洲精品伦理</a>| <a href="http://neudlac.com" target="_blank">欧美国产日韩免费</a>| <a href="http://133868.com" target="_blank">欧美一级欧美一级在线播放</a>| <a href="http://lctongda.com" target="_blank">亚洲欧美资源在线</a>| <a href="http://baixinlocal.com" target="_blank">久久九九久精品国产免费直播</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>