-- ·|­û / µù¥U -- ¡@
¡@±b¸¹¡G
¡@±K½X¡G
¡@ | µù¥U | §Ñ°O±K½X
3/26 ·s®Ñ¨ì¡I 3/19 ·s®Ñ¨ì¡I 3/14 ·s®Ñ¨ì¡I 12/12 ·s®Ñ¨ì¡I
ÁʮѬyµ{¡EQ & A¡E¯¸°È¯d¨¥ª©¡E«ÈªA«H½c
¢x 3ds Max¢x Maya¢x Rhino¢x After Effects¢x SketchUp¢x ZBrush¢x Painter¢x Unity¢x
¢x PhotoShop¢x AutoCad¢x MasterCam¢x SolidWorks¢x Creo¢x UG¢x Revit¢x Nuke¢x
¢x C#¢x C¢x C++¢x Java¢x ¹CÀ¸µ{¦¡¢x Linux¢x ´O¤J¦¡¢x PLC¢x FPGA¢x Matlab¢x
¢x Àb«È¢x ¸ê®Æ®w¢x ·j¯Á¤ÞÀº¢x ¼v¹³³B²z¢x Fluent¢x VR+AR¢x ANSYS¢x ²`«×¾Ç²ß¢x
¢x ³æ´¹¤ù¢x AVR¢x OpenGL¢x Arduino¢x Raspberry Pi¢x ¹q¸ô³]­p¢x Cadence¢x Protel¢x
¢x Hadoop¢x Python¢x Stm32¢x Cortex¢x Labview¢x ¤â¾÷µ{¦¡¢x Android¢x iPhone¢x
¥i¬d®Ñ¦W,§@ªÌ,ISBN,3dwoo®Ñ¸¹
¸Ô²Ó®ÑÄy¤ÀÃþ

Effective C++¡G§ïµ½µ{¦¡»P³]­pªº55­Ó¨ãÅé°µªk¡]²Ä¤Tª©¡^¤¤¤åª©¡]Âù¦â¡^

( ²Åé ¦r)
§@ªÌ¡G«J±¶Ãþ§O¡G1. -> µ{¦¡³]­p -> C++ -> C++
ĶªÌ¡G
¥Xª©ªÀ¡G¹q¤l¤u·~¥Xª©ªÀEffective C++¡G§ïµ½µ{¦¡»P³]­pªº55­Ó¨ãÅé°µªk¡]²Ä¤Tª©¡^¤¤¤åª©¡]Âù¦â¡^ 3dWoo®Ñ¸¹¡G 28647
¸ß°Ý®ÑÄy½Ð»¡¥X¦¹®Ñ¸¹¡I

¡i¯Ê®Ñ¡j
NT°â»ù¡G 445 ¤¸

¥Xª©¤é¡G11/1/2020
­¶¼Æ¡G336
¥úºÐ¼Æ¡G0
¯¸ªø±ÀÂË¡G
¦L¨ê¡G¶Â¥Õ¦L¨ê»y¨t¡G ( ²Åé ª© )
¥[¤JÁʪ«¨® ¢x¥[¨ì§Úªº³Ì·R
(½Ð¥ýµn¤J·|­û)
ISBN¡G9787121123320
§@ªÌ§Ç¡@|¡@ĶªÌ§Ç¡@|¡@«e¨¥¡@|¡@¤º®e²¤¶¡@|¡@¥Ø¿ý¡@|¡@§Ç
(²Åé®Ñ¤W©Ò­z¤§¤U¸ü³sµ²¯Ó®É¶O¥\, ®¤¤£¾A¥Î¦b¥xÆW, ­YŪªÌ»Ý­n½Ð¦Û¦æ¹Á¸Õ, ®¤¤£«OÃÒ)
§@ªÌ§Ç¡G

ĶªÌ§Ç¡G

«e¨¥¡G

¥Xª©»¡©ú
®®Åª¤W«~ ±o¥G¯q¤Í


¤Õ¤l¤ª¡G¡§¨ú¥G¨ä¤W¡A±o¥G¨ä¤¤¡F¨ú¥G¨ä¤¤¡A±o¥G¨ä¤U¡F¨ú¥G¨ä¤U¡A«hµL©Ò±o¨o¡¨¡C

¹ï¤_Ū®Ñ¨Dª¾¦Ó¨¥¡A³o¥y¥j°V±Ð§Ú­Ì¥hŪ¦n®Ñ¡A³Ì¦n¬O¦n®Ñ¤¤ªº¤W«~¡X¡X¸g¨å®Ñ¡C¨ä¤¤¡A¬ì§Þ¤H­û­nŪªº§Þ³N®Ñ¡A¦]¬°ª½±µÃö¥G«ÈÆ[¬O«D»P¥Í²£®Ä²v¡A¾\Ū¿ï§÷¥»§óÀ³·V­«¡CµM¦Ó¡AÀHµÛ§Þ³N¹Ï®Ñ«~ºØªº¤é¯qÂ×´I¡Aµo²{¸g¨å®Ñ¶V¨Ó¶VÃø¡A¤×¨ä¹ï¤_¯A¥@©|²Lªº·sŪªÌ¡A§ó¬°¤£©ö¡A¦Ó¥L­Ì¤S©¹©¹¬O³Ì»Ý­n¾\Ū¡B´£¤Éªº­«­n¸sÅé¡C

©Ò¿×¸g¨å®Ñ¡A©Î»¡¤W«~¡A¬O«ü¿ï§÷ºë¨}¡B¤º®eºë½m¡BÁ¿­z¥Í°Ê¡B¥~©µÂ׬աBªí²{¤âªkÅé¶K¤J·LªºÅª«~¡A¥¦­Ì·|¦¨¬°ÅªªÌªºª¾ÃÑ©M¸gÅç®w¤¤ªº­«­n²Õ¦¨³¡¤À¡A¦}¥B¾Ö¦³±q¤£Â_­«Åª¤¤¨V¨ú¾i¤ÀªºªÅ¶¡¡C¦]¦¹¡A¿ï¾Ü¾\Ū¤W«~ªº°ÝÃD«K¦¨¤F¦³®Ä¾\Ūªº­º­n°ÝÃD¡C·íµM¡A³o¤£¥u¬O®Ä²v°ÝÃD¡A¤W«~«P¦¨ªº¬J¬O¹ï¬Y¤@ºØ§Þ³N¡B«ä·Qªº¯u¥¿²z¸Ñ©M´x´¤¡A¦P®É¤S¬O¤@ºØ·P®©©Î¨É¨ü¡A¬O¤@ºØ´r®®¡C

»P§Þ³N¥»¨­Ãþ¦ü¡A¸g¨åIT§Þ³N®Ñ¦h¨Ó¦Û°ê¥~¡C²`«pªº¿n²Ö¡B¨}¦nªº¼g§@ª^³ò¡A¨Ï¤@§å¤j®v¬°¥þ²y§Þ³N¾Ç²ßªÌ¯d¤U¤F½AÀöªº´¼¼zºÀÄ_¡C´N¦b¨º­Ó¦~¥N§Y±N»·¥h¤§®É¡AµL¶·¦^²¶¡A¤]¯à·P¨ü¨ì³o¤@³¡³¡«p­«¦Ó²`Â㪺¸g¨åµÛ§@¡A¦b³yºÖµL¼ÆŪªÌ¦Z±q¥¼»X¹Ðªºæfæf¥ú½÷¡C¦Ó³o¨Ç¾®µ²²³¦h·í¤µ°ê¤º§Þ³N¤¤°í¬ü§®°O¾Ð»Pµ´¨ÎÅéÅ窺§Þ³N¹Ï®Ñ¡AÁöµM©|¦b°ê¥~¹Ï®Ñ¥«³õ¤W¤j©ñ²§±m¡A«o¤w³vº¥²H¥X°ê¤Hªºµø½u¡C³Ì¬°¿ò¾Ñªº¬O¡A¿ð¿ð¥¼¦³¥i¥H¶ñ¸ÉªÅ¯Êªº·s®Ñ°Ý¥@¡C¦ÓµL¥i´À¥N¡A¤£¥¿¬O¸g¨å®Ñ³Q©^¬°¦c¯åªº­ì¦]¡H

¬°¤F¤£Åý°ê¤ºÅªªÌ¡A¤×¨ä¬O§Y±N¨B¤J§Þ³N¥Í²Pªº·s¤@¥NŪªÌ¡A´N¦¹¿ù¥¢³o¨Ç´þ¾i¹L¥ý¦æªÌ­Ìªº¦n®Ñ¡A¥H¥Xª©ITºë«~¹Ï®Ñ¡Aº¡¨¬§Þ³N¤H¸s»Ý¨D¬°¤v¥ôªº§Ú­Ì¡Aº@·N©Ó¾á³o¤@¨Ï©R¡C¥»¦¸¾÷¹J´fÅU¤F§Ú­Ì¡AÅý§Ú­Ì¦³¾÷·|Äâ¤âÅv«ÂªºPearson¤½¥q¡Aºë¤ß±À¥X¡§¶Ç¥@¸g¨å®ÑÂO¡¨¡C

¦b§Ú­Ì²´¤¤¡A¡§¶Ç¥@¸g¨å¡¨ªº»ù­È­º¥ý¦b¤_¡X¡X¬J¾A¦X³ß·R¬ì§Þ¹Ï®ÑªºÅªªÌ¡A¤]²Å¦X±M®a­Ì¬D­çªº¼Ð·Ç¡C©¯¹Bªº¬O¡A§Ú­Ìªº½T§ä¨ì¤F³o¨Ç³ôºÙ¤W«~ªº¨Î§@¡CÂO®Ñ±aµ¹§Ú­Ìªº©¯¹B»á¦h¡A²Ó¼Æ¤@¤U§a¡C

±o¥H¤ÞÂˤj®vµÛ§@
¦³®£«ä¼{¤£©P¡A§Ú­Ì¤j¶q°Ñ¦Ò¤F°ê¥~Åv«Â¾÷ºc©Mºô¯¸ªºµû¿ïµ²ªG¡A¦}±o¨ì¤FPearsonªº±M·~¤ä«ù¡A¤S¶i¤@¨B¹ï²Å¦X¼Ð·Ç¤§¹Ï®Ñªº°ê¤º¥~¤f¸O»P¾P°â±¡ªp¶i¦æ²Ó­P¤ÀªR¡A¤]Å¥¨ú¤F°ê¤º§Þ³N±M®aªºÄ_¶Q«Øij¡A¤~¦³©¯¿ï¥X¹ï°ê¤ºÅªªÌ³Ì´I¦³§Þ³N¾i¤Àªº¤j®v¤W«~¡C
¦V²`Â㪺§Þ³N¤º²[­P·q
¤¤¥~§Þ³NÀô¹Ò¦s¦b®t²§¡A«Ü¦h¨ÉÅA°ê¥~ªº¦n®Ñ¥¼¥²¾A¥Î¤_°ê¤ºÅªªÌ¡F¥B§Þ³N»PÀ³¥ÎÀþ®§¸UÅÜ¡A«Ü®e©öÅý¤H¤ß¥Í°g±¦©Î¯h¤_©b©R¡C¥»ÂO®Ñªº¹Ï®Ñ¿î¿ï¡Aª`­«¥´¦n«ä¦Ò¤èªk»P§Þ³N²z©Àªº®Ú°ò¡A¦®¦bÀ°§UŪªÌ­×·Ò¤º¥\¡A´£¤É¹Ò¬É¡A±N§Þ³N¯u¥¿¿Ä¤J­Ó¤Hª¾ÃÑÅé¨t¡A±q¦Ó¥i¥H¤@³q¦Ê³q¡A±q®e­±¹ïÀH®É¯F²{ªº§Þ³NÅܤơC
½Ķ»Pµûª`ªºÂù¶µ¿ï¾Ü
¤Þ¶iÀu¨q¥~ª©µÛ§@¡A±N¨ä½Ķ¬°¤¤¤å¨Ñ°ê¤ºÅªªÌ¾\Ū¡A¸û¬°¦³®Ä»P±`¨£¡C¦ý¥t¦³¤@¨Ç¥~»y¤ô¥­¸û°ª¡B³ß¦n¾\Ū­ìª©ªºÅªªÌ¡A­W¤_¹ï§Þ³N²z¸Ñ¤£¨¬¡A¤£¯à¥R¤ÀÅé·|­ì¤åªí­zªººë§®¡A»Ý­n¦³¤H«ü¾É»PÂI¼·¡C¦Ó¤@§å¥»¤g§Þ³Nºë­^¸g¹Lªø´Á¸g¨åâÀ³³¤Î¹ê½îÁè·Ò¡A¤w¨¬¥H³Ó¥ô³o¤@¤u§@¡C¦³Å³¤_¦¹¡A¥»ÂO®Ñ¦b½Ķª©ªº¦P®É±À¥X¿Ä¦X­^¤å­ìµÛ»P¤¤¤åÂIµû¡Bª`ÄÀªºµûª`ª©¡A¨Ñ¤£¦P§Ó½ìªºÅªªÌ¦Û¥Ñ¿ï¾Ü¡C
©Ó»X°ê¤º¤@¬yĶ¡]ª`¡^ªÌªº§ß«ù
Àu¨qªº­^¤å­ìµÛ³Ì²×Âà¤Æ¬°¯u¥¿ªº¤W«~¡A©|»Ý¸ó¶V½ĶÂE·¾¡A¥~ª©¹Ï®ÑªºÂ½Ä¶½è¶q¤@ª½¹ð¾D°ê¤ºÅªªÌ¸á¯f¡Cµûª`ª©ªº¼W­È»P§tª÷¶q¡A¦P¼Ë¨Ì¿à¤_µûª`ªÌªº°ª¨ô¤~¨ã¡C¦n¦b¡A¥»ÂO®Ñ±o¨ì¤F¤[¸g¦ÒÅ窺Åv«ÂĶ¡]ª`¡^ªÌªº»{¥i©M¤ä«ù¡A­ºªÖ§Ú­Ì¿ï¥Î¨ä¨Î§@¡A©Î¿Ë¦Û°Ñ»Pµûª`¤u§@¡C¥¿¬O¥L­Ìªº°Ñ»P«OÃÒ¤F¸g¨åªº«~½è¡A¬J¦A¦¸¬°§Ú­Ìªº¿ï§÷§âÃö¡A§ó´£¨Ñ¤F¤@¬yªº¤¤¤åªí­z¡C

´Á±æ±aµ¹ÅªªÌ¨}¦nªº¾\ŪÅéÅç
¤@¥»¦n®Ñ±aµ¹¤Hªº´r®®¤£¤î¤_ª¾ÃѦ¬Àò¡A¨}¦nªº¾\Ū·P¨ü¦P¼Ë¤£¥i¯Ê¤Ö¡A¥B¹ï¾Ç·~¤£µL§U¯q¡C¬°ÅýŪªÌ¦¬Àò»P¤W«~¬ÛºÙªºÅéÅç¡A§Ú­Ì¦b¹Ï®Ñ¸Ë´V³]­p»P¿ï§÷¥Î®Æ¤W¦P¼Ë¤£´±»´²v¡A±©º@°e¨ìŪªÌ¤â¤¤ªº°£¤F¯]¿Y³¹¥y¡AÁÙ¦³µÎ¾A»P¼÷©«ªºµøı·P¨ü¡C

©Ò¦³°Ñ»PÂO®Ñ¥Xª©ªº¤H­û¡AºÉºÞ¯à¤O¦³­­¡A«oµL¤£¤ßÃhÄYÂÔ¤§¤ß»P§¹¬üº@±æ¡C¦pªGŪªÌªB¤Í¯à±q¼ç¤ß¾\Ū³o¨Ç¤W«~¤¤°¸¦³Àò¯q¡A¤£³×¬°¹ï§Ú­Ì¤u§@ªº³Ì¨Î½Ç¼ú¡C­Y¦³¾\Ū·P®©¡A·q½Ð¼·¤¾§iª¾¡A¥H¹ªÀy§Ú­ÌÄ~Äò¦b³o¤@¹D¸ô¤W°^ÄmºøÁ¡¤§¤O¡C¦p¦³¤£©P¤§³B¡A¤]½Ð¤£§[«ü±Ð¡C


¹q¤l¤u·~¥Xª©ªÀ³Õ¤åµøÂI
¤G?¤@?¦~¤Q¤G¤ë

Ķ§Ç

«ö®]¤¤¤s¥ý¥Íªº»¡ªk¡A³o­Ó¥@¬É¨ÌÁo©ú¤~´¼ªº¥ý¤Ñ°ª¤U±o¤TºØ¤H¡G¥ýª¾¥ýı±oµo©ú®a¡A¦Zª¾¦Zı±o«Å¶Ç®a¡A¤£ª¾¤£Ä±±o¹ê½î®a¡C¤TªÌ¤§¤¤µo©ú®a³Ì¤Ö³Ìµ}¬Ã¡A³Ì¨ã³Ð³y¤O¡C¥¿¬O¦K¤ß¿W¨ãªºµo©ú®a³Ð³y¤F³o­Óªáªáºñºñªº­pºâ¾÷¥@¬É¡C
¥H¤å¦r¡B¹Ï®Ñ¡B±Â½Ò§Î¦¡¨ÓÁ¿¸Ñ¡B«Å´­¡B¤Þ¾É§Þ³Nªº¤H¡A¤@¯ë³Qµø¬°«Å¶Ç®a¦Ó«Dµo©ú®a¡CµM¦Ó¡A¦³¤@Ãþ³Ì°ªµ¥¯Åªº§Þ³N§@®a¡A¤£¦ý¯à±Nºë¹@¿W¨ìªº¨£¸Ñ¶D½Ñ¤å¦r¡A¤S¯à³Ð³y·sªº±Ð¾Ç§Î¦¡¡A¤Þ»â­·ÄÌ¡A¹ï§Þ³Nªº¼vÅT©M¹ï²£·~ªº°^Äm¤£¨È¤_§Þ³N©Î¶}µo¤u¨ãªº³Ð³yªÌ¡C³oºØ¤H·í¤§µo©ú®a¥çµL·\¨o¡C
Scott Meyers´N¬O³o¤@µ¥¯Åªº§Þ³N§@®a¡I
¦Û±q1991¦~¥Xª©¡mEffective C++¡n¤§¦Z¡AMeyersÁn¦W¤j¾¸¡C1996¦~ªº¡mMore Effective C++¡n©M1997¦~ªº¡mEffective C++¡n2/e¥H¤Î2001¦~ªº¡mEffective STL¡nÅý¥L§ó¤W°ª¼Ó¡CMeyers¾Õªø±´¯Á½sµ{»y¨¥ªº·¥­­¡A½aºÉ¨ä²z¡A¦A¥H¤@¤ä¥Íªá§®µ§±N´_Âøªº±´¯Á¹Lµ{©M«e¦]¦ZªG¼g¦¨ÀôÀô¬Û¦©¬G¨Æ©Ê¬Æ±jªº¤å¦r¡C¥Lªº«ÕÀq¤å­·¤]ÅýŪªÌ¦b°ª±i¤Oªº§Þ³N¾Ç²ß¹Lµ{¤¤µS¯à¨É¨ü¡§¾\Ūªº¼Ö½ì¡¨¡X¡X³o¬O§Ú¹ï§Þ³N§@®aªº³Ì°ªÂ§ÃÙ¡C
¥H±ø´Ú¡]items¡^¶Ç»¼±M®a¸gÅç¡A³oºØ¼g§@§Î¦¡¬O§_¬°Meyers­º³Ð§Ú¤£½T©w¡A¦ýªº½T¬O¥L³y¦¨¤F³oºØ§Î¦¡ªº­pºâ¾÷®ÑÄy¼g§@­·¼é¡C¼vÅT©Ò¤Î¡A¡mExceptional C++¡n¡B¡mMore Exceptional C++¡n¡B¡mC++ Gotchas¡n¡B¡mC++ Coding Standards¡n¡B¡mEffective COM¡n¡B¡mEffective Java¡n¡B¡mPractical Java¡n¯É¯É¦b®Ñ¦W©Î§Î¦¡¤W¡§¦V¤j®v­P·q¡¨¡C
ºÌ¹H8¦~¤§¦Z¡mEffective C++¡n²Ä¤Tª©­±¥@¤F¡C§Ú«Ü¶}¤ßÄ~²Ä¤Gª©¦A¦¸¨üÁܽĶ¡CMeyers¦b¦Û§Ç¤¤¹ï·sª©¤w¦³¤¶²Ð¡A¦¹³B¤£«ÝÂب¥¡C¦b¦¹§Ú¾A«×­×§ï²Ä¤Gª©³¡¤ÀĶ§Ç¡A´©¤Þ¤_¤U¡A¨ó§UŪªÌ¨³³t»{ÃÑ¥»®Ñ©w¦ì¡C
C++ ¬O¤@­ÓÃø¾Ç©ö¥Îªº»y¨¥¡I
C++ ªºÃø¾Ç¡A¤£¶È¦b¨ä¼s³Õªº»yªk¡A¥H¤Î»yªk­I¦Zªº»y¸q¡A¥H¤Î»y¸q­I¦Zªº²`¼h«äºû¡A¥H¤Î²`¼h«äºû­I¦Zªº¹ï¶H¼Ò«¬¡FC++ ªºÃø¾ÇÁÙ¦b¤_¥¦´£¨Ñ¤F¥|ºØ¤£¦P¦Ó¤S¬Û»²¬Û¦¨ªº½sµ{­S«¬¡]programming paradigms¡^¡Gprocedural-based, object-based, object-oriented, generics¡C
¥@¤W¨S¦³¥Õ¦Yªº¤ÈÀ\¡I¤S­n¦³®Ä²v¡A¤S­n¦³¼u©Ê¡A¤S­n«e¤±æ»·¡A¤S­n¦^·¹¬Û®e¡A¤S­nªv¤j°ê¡A¤S­n²i¤pÂA¡A¾Ç²ß°_¨Ó·íµM´N¤£¥i¯à¤Ó²³æ¡C¦bÃe¤j´_Âøªº¾÷¨î¤U¡A¸U¤d¨Ï¥ÎªÌ«e¤²¦ZÄ~ªº°Ê¤O¬O¡G¤@¥¹¾Ç¦¨¡A§®¥ÎµL½a¡C
C++ ¬ÛÃö®ÑÄy¨®¸ü¤æ¶q¡A¦p¤Ñ¤WÁc¬P¡A¦p¹L¦¿¤§ÃV¡C¼s³Õ¦p¥|®w¥þ®ÑªÌ¦³¤§¡]The C++ Programming Language¡BC++ Primer¡BThinking in C++¡^¡A²`¶ø¦p­«¤s´_¤ôªÌ¦³¤§¡]The Annotated C++ Reference Manual, Inside the C++ Object Model¡^¡A²Ó»¡¾ú¥vªÌ¦³¤§¡]The Design and Evolution of C++, Ruminations on C++¡^¡A¿Wªf¤@¨ýªÌ¦³¤§¡]Polymorphism in C++¡^¡A¿W¾ð¤@¼mªÌ¦³¤§¡]Design Patterns, Large Scale C++ Software Design, C++ FAQs¡^¡A¥t¹@ÁÑ®|ªÌ¦³¤§¡]Generic Programming and the STL¡^¡Aµ{§Ç®w¤j¥þ¦³¤§¡]The C++ Standard Library¡^¡A±M®a¸gÅ礧²Ö¿n¥ç¦³¤§¡]Effective C++, More Effective C++¡^¡C³o¨ä¤¤¡§±M®a¸gÅ礧²Ö¿n¡¨¹ï¤w¨ã C++ ¬Û·í°ò¦ªºµ{§Ç­û¦³µÛ¥ß¬ñ¨£¼vªºÀ°§U¡A¨ä¯S¦â¬O»´Á¡µu¤p¡A°ª±K«×¯Ç¤J§@ªÌ®û²]C++/OOP¦h¦~ªº¼sªx¸gÅç¡C¥¦­Ì¤£¦ý¶}®iŪªÌªºµø³¥¡A¤]¬°ÅªªÌ´£¨Ñ¦UºØC++/OOP±`¨£°ÝÃDªº¸Ñ¨M¼Ò«¬¡C¬Y¨Ç¥DÃDÁöµM¦b¦Ê¬ì«¬C++ »y¨¥®Ñ¤¤¤]¥i¯à´£¹L¡A¦ý¦¹Ãþ®ÑÄy¥H²`«×±´¯Áªº¤è¦¡Åý§Ú­Ì¤F¸Ñ°ÝÃD­I¦Zªº¦¨¦]¡B³Ì¨Î¸Ñªk¡A¥H¤Î¨ä¥L¥i¯àªº²o§è¡C³o¨Ç³£¬O¸gÅ窺²Ö¿n©M¤ß¦åªºµ²´¹¡A¤Q¤À¬Ã¶Q¡C
¡mEffective C++¡n´N¬O³o¼Ë¤@¥»»´Á¡µu¤p°ª±K«×ªº¡§±M®a¸gÅç²Ö¿n¡¨¡C
¥»¤¤Ä¶ª©»P­^¤åª©­¶­¶¹ïĶ¡A«O¯d¯Á¤Þ¡A°¸º¸¥[¤W¤p¶qĶª`¡Fº@¯à´£¨Ñ±z¤@­Ó´r§Öªº¾Ç²ß¡C¤d¨½¤§¦æ©l¤_¨¬¤U¡A¯¬º@±z±qÁn¦W±R¶©ªº¥»®Ñ®i¶}¤@¬q·s¨½µ{¡C¦P®É¡A§Ú¤]¦V±z±ÀÂË¥»®Ñ¤§¥S§Ì¡mMore Effective C++¡n¡A¨º¬OMeyersªº¥t¤@¥»¦P¼Ë²±¦W»·¼½ªº®ÑÄy¡C
«J±¶ 2006/02/15¤_»OÆW·s¦Ë
jjhou@jjhou.com
http://www.jjhou.com¡]ÁcÅé¡^ http://jjhou.csdn.net¡]²Åé¡^



§Ç¨¥
Preface
1991¦~§Ú¼g¤U¡mEffective C++¡n²Ä¤@ª©¡C1997¦~¼¶¼g²Ä¤Gª©®É§Ú§ó·s¤F³\¦h­«­n¤º®e¡A¦ý¬°¤F¤£Åý¼ô±x²Ä¤@ª©ªºÅªªÌ·P¨ì§x´b¡A§ÚºÜºÉ©Ò¯à«O¯d­ì©lµ²ºc¡G­ì¥ý50­Ó±ø´Ú¤¤ªº48­Ó¼ÐÃD°ò¥»¨SÅÜ¡C¦pªG§â®ÑÄyµø¬°¤@´É©Ð«Î¡A²Ä¤Gª©¥u¬O§ó´«¦a´à¿O¹¢¡A­«·s¯»¨ê¤@¹M¦Ó¤w¡C
¨ì¤F²Ä¤Tª©¡A­×µ¤u§@¶i¤@¨B²`¤J¾À°©ùÙµ¬¡]¦n´X¦¸§Ú¬Æ¦Ü§Æ±æ¯à°÷½·s¦a°ò¡^¡C1991¦~°_C++ ¥@¬É¸g¾ú¤F¥¨¤jÅÜ­²¡A¦Ó¥»®Ñ¥Ø¼Ð¡X¡X¦b¤@¥»¤p¦Ó¦³½ìªº®Ñ¤¤½T»{³Ì­«­nªº¤@¨ÇC++ ½sµ{·Ç«h¡X¡X«o¤w¤£¦A¯à°÷¥Ñ15¦~«e«Ø¥ßªº¨º¨Ç±ø´ÚÅé²{¥X¨Ó¡C¡§C++ µ{§Ç­û¾Ö¦³C­I´º¡¨³o¥y¸Ü¦b1991¦~¬O­Ó¦X²z°²³]¡A¦p¤µC++ µ{§Ç­û«o«Ü¥i¯à¨Ó¦ÛJava©ÎC# °}Àç¡CÄ~©Ó¡]inheritance¡^©M­±¦V¹ï¶H½sµ{¡]object-oriented programming¡^¦b1991¦~¹ï¤j¦h¼Æµ{§Ç­û³£«Ü·sÂA¡A¦p¤µµ{§Ç­û¤w¸g«Ø¥ß¨}¦n·§©À¡A²§±`¡]exceptions¡^¡B¼ÒªO¡]templates¡^©Mªx«¬½sµ{¡]generic programming¡^¤~¬O»Ý­n§ó¦h¤Þ¾Éªº»â°ì¡C1991¦~¨S¤HÅ¥¹L©Ò¿×³]­p¼Ò¦¡¡]design patterns¡^¡A¦p¤µ¤Ö¤F¥¦«ÜÃø°Q½×³n¥ó¨t²Î¡C1991¦~C++ ¥¿¦¡¼Ð·Ç¤~­è­n¤W¸ô¡A¦p¤µC++ ¼Ð·Ç³W­S¤w¸g8·³¡A·sª©³W­S»W¶Õ«Ýµo¡C
¬°¤F¹ï¥I³o¨Ç§ïÅÜ¡A§Ú§â©Ò¦³±ø´Ú©Ù±o¤@¤z¤GÐä¡AµM¦Z°Ý¦Û¤v¡§2005¦~¤°¤\¬O¹ïC++ µ{§Ç­û³Ì­«­nªº©¾§i¡H¡¨µª®×«K¬O²Ä¤Tª©¤¤ªº³o¨Ç±ø´Ú¡C¥»®Ñ¦³¨â­Ó·s³¹¡A¤@­Ó¬O¸ê·½ºÞ²z¡]resource management¡^¡A¤@­Ó¬O¼ÒªO½sµ{¡]programming with templates¡^¡C¹ê»Ú¤Wtemplate¡]¼ÒªO¡^³oªF¦è¹M¥¬¥þ®Ñ¡A¦]¬°¥¦­Ì´X¥G¼vÅT¤FC++ ªº¨C­Ó¨¤¸¨¡C¥»®Ñ·s¯À§÷ÁÙ¥]¬A¦bexceptions¡]²§±`¡^·§©À¤U½sµ{¡B®M¥Î³]­p¼Ò¦¡¡B

¥H¤Î¹B¥Î·sªºTR1µ{§Ç®w³]¬I¡]TR1¤_±ø´Ú54´y­z¡^¡C¥»®Ñ¤]§i¶D¤j®a¦b³æ½uµ{¨t²Î¡]single-threaded systems¡^¤¤¹B§@¨}¦n¦ý¥i¯à¤£¾A¥Î¤_¦h½uµ{¨t²Î¡]multithreaded systems¡^ªº¬Y¨Ç§Þ³N©M°µªk¡C¥»®Ñ¥b¼Æ¥H¤W¤º®e¬O·sªº¡C¦b¦¹¦P®É²Ä¤Gª©¤j³¡¤À°ò¦«H®§¤´µM«Ü­«­n¡A©Ò¥H§Ú§ä¥X¤@­Ó«O¯d¥¦­Ìªº¿ìªk¡G§A¥i¥H¦bªþ¿ýB§ä¨ì²Ä¤G¡B²Ä¤T¨âª©ªº±ø´Ú¹ïÀ³ªí¡C
§Ú§V¤OÅý¥»®Ñ¹F¨ì§Ú©Ò¯à°÷¹F¨ìªº³Ì¨Îª¬ºA¡A¦ý³o¦}¤£ªí¥Ü¥¦¤w¿²§¹¬ü¡C¦pªG§A»{¬°¬Y¨Ç±ø´Ú¤£¾A¦X§@¬°¤@¯ë©Ê©¾§i¡A©Î§A¦³§ó¦nªº¿ìªk§¹¦¨¥»®Ñ©Ò½Íªº¬Y¥ó¤u§@¡A©Î®Ñ¤¤¬Y¨Ç§Þ³N°Q½×¤£°÷²M·¡¤£°÷§¹¥þ¡A¬Æ©Î¦³©Ò»~¾É¡A½Ð§i¶D§Ú¡C¦pªG§A§ä¥X¥ô¦ó¿ù»~¡X¡X§Þ³N¤Wªº¡B¤åªk¤Wªº¡B±Æª©¦L¨ê¤Wªº¡A¤£½×­þ¤@ºØ¡X¡X¤]½Ð§i¶D§Ú¡C§Ú«Ü¼Ö·N±N²Ä¤@¦ì´£¥X°ÝÃD¦}§l¤Þ§Úª`·NªºªB¤Í¥[¤J¤U¦¸¦L¨êªº­PÁ¦W³æ¤¤¡C
§Y¨Ï¥»®Ñ±ø´Ú­Ó¼ÆÂX¥R¬°55¡A³o¤@¾ã²Õ½sµ{·Ç«hÁٽͤ£¤W§¹³Æ¡CµM¦Ó²¦³º¾ã²z¥XÀu¨}·Ç«h¡X¡X´X¥G¥ô¦ó®É¶¡¾A¥Î¤_¥ô¦óÀ³¥Îµ{§Çªº·Ç«h¡X¡X¤ñ·Q¶H¤¤§xÃø±o¦h¡C¦pªG§A¦³¨ä¥L½sµ{·Ç«hªº·Qªk©Î«Øij¡A§Ú±N¼Ö¥H»P»D¡C
§Ú¤â¤WºûÅ@¥»®Ñ²Ä¤@¨ê¥H¨ÓªºÅܤƲM³æ¡A¨ä¤¤¥]¬A¿ù»~­×­q¡B¶i¤@¨B»¡©ú©M§Þ³N§ó·s¡C³o¥÷²M³æ©ñ¦bºô§}¬°http://aristeia.com/BookErrata/ec++3e-errata.htmlªº"Effective C++ Errata" ºô­¶¤W¡C¦pªG§A§Æ±æ¦b³o¥÷²M³æ§ó·s®ÉÀò±o³qª¾¡A½Ð¥[¤J§Úªº¶l¥ó¦Cªí¡C³o¥÷¦Cªí¥Î¨Óµo¥¬®ø®§µ¹¥i¯à¹ï§Úªº±M·~¤u§@·P¿³½ìªº¤H¤h¡A¸Ô±¡½Ð¨£http://aristeia.com/MailingList/¡C

Scott Douglas Meyers Stafford.Oregon
http://aristeia.com/ April 2005
¤º®e²¤¶¡G

¦³¤H»¡C++µ{§Ç­û¥i¥H¤À¬°¨âÃþ¡AŪ¹LEffective C++ªº©M¨SŪ¹Lªº¡C¥@¬É³»¯ÅC++¤j®vScott Meyers¦¨¦W¤§§@ªº²Ä¤Tª©ªº½T·í±o°_³o¼Ëªºµû»ù¡C·í±zŪ¹L³o¥»®Ñ¤§¦Z¡A´NÀò±o¤F¨³³t´£¤É¦Û¤vC++¥\¤Oªº¤@­Ó«´¾÷¡C
¦b°ê»Ú¤W¡A¥»®Ñ©Ò¤Þ°_ªº¤ÏÅT¡Aªi¤Î¾ã­Ó­pºâ¾÷§Þ³Nªº¥Xª©»â°ì¡A§E­µ¦Ü¤µ¥¼µ´¡C´X¥G¦b©Ò¦³C++®ÑÄyªº±ÀÂ˦W³æ¤W¡A¥»®Ñ³£·|¦ì¤_«e¤T¦W¡C§@ªÌ°ª¶Wªº§Þ³N§â´¤¤O¡B¿W¯Sªºµø¨¤¡B¸Ù¿Ó»´ªQªº¼g§@­·®æ¡B¿W¨ã¦K¤ßªº¤º®e²Õ´¡A³£¨ü¨ì·¥¤jªº±À±R©M¥é®Ä¡C³oºØ©_¯Sªº²{¶H¡A¥u¯à¸ÑÄÀ¬°¤H­Ì¹ï³o¥»®Ñ°J¤ßªºÃÙ¬ü©M±À±R¡C
³o¥»®Ñ¤£¬OŪ§¹¤@¹M´N¥i¥H§ô¤§°ª»Õªº§ÖÀ\Ūª«¡A¤]¤£¬O¥Î¥H¸Ñ¨M¤âÃä°ÝÃDªº°Ñ¦Ò¤â¥U¡A¦Ó¬O»Ý­n±z¥h¤Ï´_¾\ŪÅé·|ªº¡AC++¬O¯u¥¿µ{§Ç­ûªº»y¨¥¡A­I¦Z¦Zºë¯«ªº«ä·Q»PµL¥H­Û¤ñªºªí¹F¯à¤O¡A³o¨Ï±o¥¦¨ã¦³Ãþ¦ü©v±Ð¯ëªº¾y¤O¡C§Æ±æ³o¥»®Ñ¯à°÷À°±z¸ó¶VC++ªº­«­«ÀIªý¡A»â²¤°ª³B¤~¦³ªº§§¬ü­·¥ú¡A°µ¤@­Ó¦¨¥\¦Ó§Ö¼ÖªºC++µ{§Ç­û¡C


¥Ø¿ý¡G

¥Ø¿ý
Contents
Ķ§Ç vii
¤¤­^²Ác³N»y¹ï·Ó ix
¥Ø¿ý xvii
§Ç¨¥ xxi
­PÁÂ xxiii
¾ÉŪ 1
1. Åý¦Û¤v²ßºDC++ 11
Accustoming Yourself to C++ 11
±ø´Ú01¡GµøC++ ¬°¤@­Ó»y¨¥Áp¨¹ 11
View C++ as a federation of languages 11
±ø´Ú02¡GºÉ¶q¥Hconst, enum, inline´À´« #define 13
Prefer consts,enums, and inlines to #defines. 13
±ø´Ú03¡GºÉ¥i¯à¨Ï¥Îconst 17
Use const whenever possible. 17
±ø´Ú04¡G½T©w¹ï¶H³Q¨Ï¥Î«e¤w¥ý³Qªì©l¤Æ 26
Make sure that objects are initialized before they¡¦re used. 26
2. ºc³y/ªRºc/½á­È¹Bºâ 34
Constructors, Destructors, and Assignment Operators 34
±ø´Ú05¡G¤F¸ÑC++ ÀqÀq½s¼g¦}½Õ¥Î­þ¨Ç¨ç¼Æ 34
Know what functions C++ silently writes and calls. 34
±ø´Ú06¡G­Y¤£·Q¨Ï¥Î½sĶ¾¹¦Û°Ê¥Í¦¨ªº¨ç¼Æ¡A´N¸Ó©ú½T©Úµ´ 37
Explicitly disallow the use of compiler-generated functions you do not want. 37
±ø´Ú07¡G¬°¦hºA°òÃþÁn©úvirtualªRºc¨ç¼Æ 40
Declare destructors virtual in polymorphic base classes. 40

±ø´Ú08¡G§OÅý²§±`°kÂ÷ªRºc¨ç¼Æ 44
Prevent exceptions from leaving destructors. 44
±ø´Ú09¡Gµ´¤£¦bºc³y©MªRºc¹Lµ{¤¤½Õ¥Îvirtual¨ç¼Æ 48
Never call virtual functions during construction or destruction. 48
±ø´Ú10¡G¥Ooperator= ªð¦^¤@­Óreference to *this 52
Have assignment operators return a reference to *this. 52
±ø´Ú11¡G¦boperator= ¤¤³B²z¡§¦Û§Ú½á­È¡¨ 53
Handle assignment to self in operator=. 53
±ø´Ú12¡G´_¨î¹ï¶H®É¤Å§Ñ¨ä¨C¤@­Ó¦¨¤À 57
Copy all parts of an object. 57
3. ¸ê·½ºÞ²z 61
Resource Management 61
±ø´Ú13¡G¥H¹ï¶HºÞ²z¸ê·½ 61
Use objects to manage resources. 61
±ø´Ú14¡G¦b¸ê·½ºÞ²zÃþ¤¤¤p¤ßcopying¦æ¬° 66
Think carefully about copying behavior in resource-managing classes. 66
±ø´Ú15¡G¦b¸ê·½ºÞ²zÃþ¤¤´£¨Ñ¹ï­ì©l¸ê·½ªº³X°Ý 69
Provide access to raw resources in resource-managing classes. 69
±ø´Ú16¡G¦¨¹ï¨Ï¥Înew©Mdelete®É­nªö¨ú¬Û¦P§Î¦¡ 73
Use the same form in corresponding uses of new and delete. 73
±ø´Ú17¡G¥H¿W¥ß»y¥y±Nnewed¹ï¶H¸m¤J´¼¯à«ü°w 75
Store newed objects in smart pointers in standalone statements. 75
4. ³]­p»PÁn©ú 78
Designs and Declarations 78
±ø´Ú18¡GÅý±µ¤f®e©ö³Q¥¿½T¨Ï¥Î¡A¤£©ö³Q»~¥Î 78
Make interfaces easy to use correctly and hard to use incorrectly. 78
±ø´Ú19¡G³]­pclassµS¦p³]­ptype 84
Treat class design as type design. 84
±ø´Ú20¡G¹ç¥Hpass-by-reference-to-const´À´«pass-by-value 86
Prefer pass-by-reference-to-const to pass-by-value. 86
±ø´Ú21¡G¥²¶·ªð¦^¹ï¶H®É¡A§O¦k·Qªð¦^¨äreference 90
Don¡¦t try to return a reference when you must return an object. 90
±ø´Ú22¡G±N¦¨­ûÅܶqÁn©ú¬°private 94
Declare data members private. 94
±ø´Ú23¡G¹ç¥Hnon-member¡Bnon-friend´À´«member¨ç¼Æ 98
Prefer non-member non-friend functions to member functions. 98
±ø´Ú24¡G­Y©Ò¦³°Ñ¼Æ¬Ò»ÝÃþ«¬Âà´«¡A½Ð¬°¦¹ªö¥Înon-member¨ç¼Æ 102
Declare non-member functions when type conversions should apply to all parameters. 102

±ø´Ú25¡G¦Ò¼{¼g¥X¤@­Ó¤£©ß²§±`ªºswap¨ç¼Æ 106
Consider support for a non-throwing swap. 106
5. ¹ê²{ 113
Implementations 113
±ø´Ú26¡GºÉ¥i¯à©µ¦ZÅܶq©w¸q¦¡ªº¥X²{®É¶¡ 113
Postpone variable definitions as long as possible. 113
±ø´Ú27¡GºÉ¶q¤Ö°µÂ૬°Ê§@ 116
Minimize casting. 116
±ø´Ú28¡GÁקKªð¦^handles«ü¦V¹ï¶H¤º³¡¦¨¤À 123
Avoid returning "handles" to object internals. 123
±ø´Ú29¡G¬°¡§²§±`¦w¥þ¡¨¦Ó§V¤O¬O­È±oªº 127
Strive for exception-safe code. 127
±ø´Ú30¡G³z¹ý¤F¸Ñinliningªº¨½¨½¥~¥~ 134
Understand the ins and outs of inlining. 134
±ø´Ú31¡G±N¤å¥ó¶¡ªº½sĶ¨Ì¦sÃö¨t­°¦Ü³Ì§C 140
Minimize compilation dependencies between files. 140
6. Ä~©Ó»P­±¦V¹ï¶H³]­p 149
Inheritance and Object-Oriented Design 149
±ø´Ú32¡G½T©w§AªºpublicÄ~©Ó¶ì¼Ò¥Xis-aÃö¨t 150
Make sure public inheritance models "is-a." 150
±ø´Ú33¡GÁקK¾B±»Ä~©Ó¦Ó¨Óªº¦WºÙ 156
Avoid hiding inherited names. 156
±ø´Ú34¡G°Ï¤À±µ¤fÄ~©Ó©M¹ê²{Ä~©Ó 161
Differentiate between inheritance of interface and inheritance of implementation. 161
±ø´Ú35¡G¦Ò¼{virtual¨ç¼Æ¥H¥~ªº¨ä¥L¿ï¾Ü 169
Consider alternatives to virtual functions. 169
±ø´Ú36¡Gµ´¤£­«·s©w¸qÄ~©Ó¦Ó¨Óªºnon-virtual¨ç¼Æ 178
Never redefine an inherited non-virtual function. 178
±ø´Ú37¡Gµ´¤£­«·s©w¸qÄ~©Ó¦Ó¨Óªº¯Ê¬Ù°Ñ¼Æ­È 180
Never redefine a function¡¦s inherited default parameter value. 180
±ø´Ú38¡G³q¹L´_¦X¶ì¼Ò¥Xhas-a©Î"®Ú¾Ú¬Yª«¹ê²{¥X" 184
Model "has-a" or "is-implemented-in-terms-of" through composition. 184
±ø´Ú39¡G©ú´¼¦Ó¼f·V¦a¨Ï¥ÎprivateÄ~©Ó 187
Use private inheritance judiciously. 187
±ø´Ú40¡G©ú´¼¦Ó¼f·V¦a¨Ï¥Î¦h­«Ä~©Ó 192
Use multiple inheritance judiciously. 192
7. ¼ÒªO»Pªx«¬½sµ{ 199
Templates and Generic Programming 199

±ø´Ú41¡G¤F¸ÑÁô¦¡±µ¤f©M½sĶ´Á¦hºA 199
Understand implicit interfaces and compile-time polymorphism. 199
±ø´Ú42¡G¤F¸ÑtypenameªºÂù­«·N¸q 203
Understand the two meanings of typename. 203
±ø´Ú43¡G¾Ç²ß³B²z¼ÒªO¤Æ°òÃþ¤ºªº¦WºÙ 207
Know how to access names in templatized base classes. 207
±ø´Ú44¡G±N»P°Ñ¼ÆµLÃöªº¥N½X©âÂ÷templates 212
Factor parameter-independent code out of templates. 212
±ø´Ú45¡G¹B¥Î¦¨­û¨ç¼Æ¼ÒªO±µ¨ü©Ò¦³­Ý®eÃþ«¬ 218
Use member function templates to accept "all compatible types." 218
±ø´Ú46¡G»Ý­nÃþ«¬Âà´«®É½Ð¬°¼ÒªO©w¸q«D¦¨­û¨ç¼Æ 222
Define non-member functions inside templates when type conversions are desired. 222
±ø´Ú47¡G½Ð¨Ï¥Îtraits classesªí²{Ãþ«¬«H®§ 226
Use traits classes for information about types. 226
±ø´Ú48¡G»{ÃÑtemplate¤¸½sµ{ 233
Be aware of template metaprogramming. 233
8. ©w¨înew©Mdelete 239
Customizing new and delete 239
±ø´Ú49¡G¤F¸Ñnew-handlerªº¦æ¬° 240
Understand the behavior of the new-handler. 240
±ø´Ú50¡G¤F¸Ñnew©Mdeleteªº¦X²z´À´«®É¾÷ 247
Understand when it makes sense to replace new and delete. 247
±ø´Ú51¡G½s¼gnew©Mdelete®É»Ý©T¦u±`³W 252
Adhere to convention when writing new and delete. 252
±ø´Ú52¡G¼g¤Fplacement new¤]­n¼gplacement delete 256
Write placement delete if you write placement new. 256
9. Âø¶µ°Q½× 262
Miscellany 262
±ø´Ú53¡G¤£­n»´©¿½sĶ¾¹ªºÄµ§i 262
Pay attention to compiler warnings. 262
±ø´Ú54¡GÅý¦Û¤v¼ô±x¥]¬ATR1¦b¤ºªº¼Ð·Çµ{§Ç®w 263
Familiarize yourself with the standard library, including TR1. 263
±ø´Ú55¡GÅý¦Û¤v¼ô±xBoost 269
Familiarize yourself with Boost. 269
A ¥»®Ñ¤§¥~ 273
B ·sª©±ø´Ú¹ï¬M 277
¯Á¤Þ 280
§Ç¡G