C++µÄ?ƽÃ÷£º´Ó¡°CwithClasses¡±µ½Ò»Î»ÏÈÇýµÄÔ¶¼û
ÔÚºÆå«µÄÍÆËã»ú¿ÆÑ§ÐÇ¿ÕÖУ¬C++ÎÞÒÉÊÇÒ»¿Åèè²¾«Ã÷µÄÃ÷ÐÇ¡£µ±ÄãÌáÆð¡°17c.c++¡±Ê±£¬»òÐí»áºÃÆæ£¬µ½µ×ÊÇË£¬ÓÖÊÇÔÚÔõôµÄʱÆÚ±³?¾°Ï£¬²¥ÏÂÁËÕâÃÅ׳´ó˵»°µÄÖÖ×Ó£¿¹Êʵijõ²½£¬Òª×·Òäµ½ÉÏÊÀ¼ÍÆßÊ®Äê´úÄ©£¬ÄÇʱµÄÍÆËã»úÊÀ½çÕý´¦ÓÚÅ·¢Õ¹µ«ÓÖÂÔÏÔÔÓÂÒµÄʱÆÚ¡£
¹ÊʵÄÖ÷È˹«£¬Êǵ¤?ÂóÍÆËã»ú¿ÆÑ§¼ÒBjarneStroustrup£¨²¼À³¶÷¡¤¿ËÄẺ£©£¬Ò»Î»ÔÚ±´¶û³¢ÊÔÊÒ¹¤×÷µÄÏÈÇý¡£ËûÉîÖª£¬ÔÚ¿ª·¢´óÐÍ¡¢¸´ÔÓµÄϵͳʱ£¬¼È±ØÒªC˵»°µÄЧÄܺ͵ײã½ÚÔìÄÜÁ¦£¬ÓÖ°ÍÍû¸ü¸ß¼¶µÄ³éÏóºÍÄ£¿é»¯¡£Æäʱ£¬Simula˵»°µÄÃæÏò¶ÔÏó¸öÐÔ¸øËûÁôÏÂÁËÉî¿ÌÓ¡Ï󣬵«ËûÓָд¥SimulaµÄЧÄܲ»¼°ÒÔÂú×ãϵͳ¼¶±à³ÌµÄÐèÒª¡£
Òò¶ø£¬Ò»¸ö¶·µ¨µÄÉè·¨ÔÚ¶þÐÄÖÐÃÈÑ¿£ºÄÜ·ñ½«C˵»°µÄ׳´ó?ÓëÃæÏò¶ÔÏó±à³ÌµÄ·½±ãÐÔ½áºÏÆðÀ´£¿
1979Ä꣬BjarneStroustrupÆðÍ·ÁËËûµÄ¡°CwithClasses¡±ÏîÄ¿£¬Õâ¾ÍÊÇC++×îÔçµÄ³û?ÐΡ£Ëû²¢·Ç´Ó?ÁãÆðÍ·£¬¶øÊÇÕ¾ÔÚ¾ÞÈ˵ļç°òÉÏ¡ª¡ª¼Ì³ÐÁËC˵»°¼ò½à¡¢¸ßЧµÄÒ²§£¬²¢ÆæÃîµØÒýÈëÁËÀࣨclass£©µÄ¸ÅÏ룬ÒÔ¼°ÓëÖ®Óйصķâ×°¡¢¼Ì³ÐºÍ¶à̬µÈÃæÏò¶ÔÏóµÄÖ÷Ìâ¸öÐÔ¡£
Õâ¾ÍÏñÊÇÔÚÒ»¼þÓÅÔ½µÄ¹¤ÒµÆ·ÉÏ£¬¾«µñϸ×ÁµØ²ÎÓëÁ˸ü¶àÈ˵À»¯µÄÖ°ÄÜ£¬Ê¹ÆäÔ½·¢×³´óÇÒÒ×ÓÚʹÓá£
¡°CwithClasses¡±µÄµ®Éú£¬²¢·ÇÒ»»Ó¶ø¾ÍµÄÁé¹âÕ§ÏÖ£¬¶øÊÇBjarneStroustrup¶Ô±à³ÌЧÄÜ¡¢´ú?Âë¿ÉÊØ»¤ÐÔºÍϵͳ»úÄܵÄÉî¿Ì¶´²ìÓ벻и×êÓªµÄ½á¾§¡£Ëûµ«Ô¸´´?ÔìÒ»ÖÖ˵»°£¬¼ÈÄÜÈ÷¨Ê½Ô±¡°´¥Ãþµ½Ó²¼þµÄÂö²«¡±£¬ÓÖÄÜÈÃËûÃÇ¡°¹¹½¨³öÐÛΰµÄÈí¼þµîÌᱡ£
ÕâÖÖË«³ÁÖ¸±ê£¬³ÉΪÁËC++ÔçÆÚÉè¼ÆÖÐ×îÖ÷ÌâµÄÇý¶¯Á¦¡£
ÔçÆÚµÄ¡°CwithClasses¡±ÔںܴóˮƽÉϱ£ÁôÁËC˵»°µÄÓï·¨ºÍÓïÒ壬ÕâʹµÃ´ÓC˵»°Ç¨áã¹ýÀ´µÄ?·¨Ê½Ô±¿ÉÄÜÏà¶ÔÇáËɵØÊÊÓ¦¡£ÃæÏò¶ÔÏó¸öÐÔµÄÒýÈ룬ΪÈí¼þ¿ª·¢´øÀ´Á˸ïÃüÐԵčת¡£Àà³ÉΪÁ˹¹½¨¸´ÔÓ·¨Ê½µÄ»ùʯ£¬ÔÊÐí¿ª·¢Õß½«Êý¾ÝºÍ²Ù×÷Êý¾ÝµÄ²½Öè·â×°ÔÚһ·£¬ÐγɶÀÁ¢µÄÄ£¿é¡£
ÕâÖÖ·â×°ÐÔ²»½öÌá¸ßÁË´úÂëµÄ¿É¶ÁÐԺͿÉÊØ»¤ÐÔ£¬»¹¼«´óµØÏ÷¼õÁËÒòÈ«¾Ö±äÁ¿µÈÎÊÌâ´øÀ´µÄ·¨Ê½ÃýÎó¡£
¼Ì³Ð»úÔìÔòÔÊÐí´´½¨ÐµÄÀ࣬ÕâЩÐÂÀàÄܹ»¼Ì³ÐÏÖÓÐÀàµÄ?ÊôÐÔºÍÐÐΪ£¬´Ó¶øÔ¤·ÀÁË´ú?ÂëµÄ³Á¸´±àд£¬Ìá¸ßÁË¿ª·¢Ð§ÄÜ¡£¶ø¶à̬ÐÔÔòʹµÃ?·¨Ê½ÔÚÔËÐÐʱ¿ÉÄÜÆ¾¾Ý¶ÔÏóµÄÏÖʵÀàÐÍ×ö³ö·ÖÆçµÄÐÐΪ£¬ÕâΪ±àдԽ·¢½Ã½ÝºÍ¿ÉÀ©´óµÄ´úÂëÌṩÁË¿ÉÄÜ¡£
BjarneStroustrupµÄÔ¶¼û¸ß¼ûÔÚÓÚ£¬ËûÒâʶµ½£¬µ¥´¿µÄ³éÏó²¢²»Äܽâ¾öËùÓÐÎÊÌâ¡£ËûʼÖÕÇ¿µ÷C++µÄ¡°Á㿪Ïú³éÏó¡±×¼Ôò£¬ÕâÒâζ×ÅÒýÈëµÄ³éÏó¸öÐÔ²»Ó¦¸Ã´øÀ´¶î±íµÄÔËÐÐʱÆÚ¼Û¡£ÀýÈ磬Ð麯Êý¹ÌÈ»ÌṩÁ˶à̬ÐÔ£¬µ«ÆäŲÓûúÔìÔÚÉè¼ÆÊ±¾Í±»¾«ÐÄÓÅ»¯£¬ÒÔ¾¡Á¿Ï÷¼õ»úÄÜËðʧ¡£
ÕâÖÖ¶Ô»úÄܵļ«ÖÂ×êÓª£¬Ê¹µÃC++ÔÚϵͳ±à³Ì?¡¢ÓÎÏ·¿ª·¢¡¢¸ß»úÄÜÍÆËãµÈÁìÓòʼÖÕÕ¼¾ÝמÙ×ãÇá³ÁµÄְλ¡£
Ëæ×Å¡°CwithClasses¡±µÄ²»ÐÝ·¢Õ¹ºÍÃÀÂú£¬ËüÖð²½³¬¹ýÁ˵¥Ò»µÄ¡°CµÄÀ©´ó¡±µÄÁìÓò£¬Õ¹Ê¾³ö¶ÀÁ¢µÄ˵»°÷ÈÁ¦¡£±´¶û³¢ÊÔÊÒÒ²Òâʶµ½?ÕâÏî¼¼ÊõµÄDZÁ¦£¬²¢ÔÚ1983Ä꽫ÆäÕýʽ¶¨ÃûΪC++¡£Õâ¸öÃû×Ö×ÔÉí¾ÍÆÄÓÐÉîÒ⣺¡°++¡±ÊÇC˵»°ÖÐ×ÔÔöÔËËã·û£¬Ô¢Òâ×ÅC++ÊÇC˵»°µÄ¡°Éý¼¶°æ¡±»ò¡°¼ÓÇ¿°æ¡±¡£
´Ó?¡°CwithClasses¡±µ½C++£¬Õâ²»½ö½öÊÇÃû³ÆµÄŤת£¬¸üÊDZà³Ì˼ÏëµÄÒ»´Î·ÉÔ¾¡£BjarneStroustrupƾ½èÆä׿ԽµÄ¶´²ìÁ¦ºÍ²»Ð¸µÄÖÂÁ¦£¬ÎªÊÀ½çÁôÏÂÁËÒ»ÃÅ¿ÉÄܼÝÔ¦´Óµ×²ãÓ²¼þµ½¸´ÔÓÀûÓõÄͨÓñà³Ì˵»°¡£Ëû²»ÊÇÒ»¸öÔÚÄ»ºóĬĬÎÞÎŵIJÝÄâÕߣ¬¶øÊÇһλÔÚ´úÂëÊÀ½çÀÓÃÔ¶¼ûºÍÖǻۣ¬¹´»³öÐÛΰÀ¶Í¼µÄ¹¹Öþʦ¡£
ËûµÄÿһ´Î˼ÂÇ£¬Ã¿Ò»´Î¸Ä½ø£¬¶¼ÎªC++×¢ÈëÁËÐÔÃüÁ¦£¬²¢ÎªºóÀ´µÄÎÞÊý¿ª·¢ÕßÆÌ¾ÍÁËͨÍù¸ß»úÄÜ¡¢¸ßЧÄܱà³Ì?֮·¡£
BjarneStroustrup´´ÔìC++µÄ³õÖÔ£¬ÊÇΪÏàʶ¾öÏÖʵ¹¤³ÌÖеÄÎÊÌ⣬µ«ËûµÄÎÄÕºܿì¾ÍÎüÒýÁËÈ«Çò¿ª·¢ÕßµÄÑ۹⡣ÕâÃÅ˵»°ÒÔÆä׳´óµÄ?»úÄÜ¡¢½Ã½ÝµÄ³é?ÏóÄÜÁ¦ÒÔ¼°¶Ôµ×²ãÓ²¼þµÄÓÅÁ¼Ö§³Ö£¬Ñ¸¿ìÔÚÒµ½çո¶ͷ½Ç¡£Ëæ×ÅC++µÄ¿í·ºÀûÓã¬·ÖÆç±àÒëÆ÷ºÍƽ̨֮¼ä³öÏÖÁËһЩ²»¼æÈݵľ°Ïó£¬Õâ¸ø¿çƽ̨¿ª·¢´øÀ´ÁËÌôÕ½¡£
ÕýÊÇÔÚÕâÑùµÄ²¼¾°Ï£¬C++³ß¶È»¯µÄºôÉùÔ½À´Ô½¸ß¡£³ß¶È»¯Òâζ×ÅΪC++³ÉÁ¢Ò»Ì×ͳһµÄ¹æ·¶£¬È·±£´úÂëÔÚ·ÖÆç»·¾³ÏµĿÉÒÆÖ²ÐÔºÍÒ»ÖÂÐÔ¡£1998Ä꣬¹ú¼Ê³ß¶È»¯×éÖ¯£¨ISO£©ºÍ¹ú¼Êµç¹¤Î¯Ô±»á£¨IEC£©Õýʽ°ä²¼Á˵ÚÒ»¸öC++¹ú¼Ê³ß¶È¡ª¡ªISO/IEC14882:1998£¬Ë׳ÆC++98¡£
Õâ¸öÀï³Ì±®Ê½µÄÊÂÎñ£¬±ê־ȡC++´ÓÒ»¸öÏà¶Ô×ÔÓɳɳ¤µÄ˵»°£¬×ßÏòÁ˹淶»¯¡¢ÏµÍ³»¯µÄ·¢Õ¹½×¶Î¡£
C++98³ß¶ÈµÄ°ä²¼£¬ÎªC++˵»°µì¶¨Á˼áʵµÄ»ù´¡£¬ËüÈ·Á¢Á˺ܶàÖ÷Ìâ¸öÐÔ£¬ÈçÄ£°å£¨templates£©¡¢Òì³£´¦?Àí£¨exceptionhandling£©¡¢RTTI£¨Run-TimeTypeInformation£©µÈ¡£ÕâЩ¸öÐԵIJÎÓ룬¼«´óµØ¼ÓÇ¿ÁËC++µÄ±í°×ÄÜÁ¦ºÍ¹¤³Ìʵ¼ÊÄÜÁ¦¡£
Ä£°åµÄÒýÈ룬ʹµÃC++¿ÉÄÜʵÏÖÕæÕýµÄ·ºÐͱà³Ì£¬±àд³ö¿ÉÄÜ´¦ÖöàÖÖÊý¾ÝÀàÐ͵ÄͨÓÃËã·¨ºÍÊý¾Ý½á¹¹£¬ÀýÈçSTL£¨StandardTemplateLibrary£©¾ÍÊÇC++98³ß¶ÈϵÄ׿Խ´ú±í£¬ËüÌṩÁË·á˶µÄ?Êý¾Ý½á¹¹ºÍËã·¨£¬¼«´óµØÌá¸ßÁË¿ª·¢Ð§ÄÜ¡£
¼¼ÊõµÄ½øÈ¡ÓÀÎÞÖյ㡣ÔÚC++98°ä²¼Ö®ºó£¬ÍÆËã»ú¿ÆÑ§ÁìÓòÓ¿ÏÖ³öºÜ¶àеÄ˼ÏëºÍ¼¼Êõ£¬Í¬Ê±Ò²Â¶³öÁËC++98ÔÚijЩ·½Ãæ´æ?ÔڵIJ»¼°¡£ÎªÁ˸úÉÏʱÆÚµÄ´ëÊ©£¬C++³ß¶ÈίԱ»á²¢Ã»ÓÐÍ£ÏÂǰ½øµÄ?½Å²½¡£ËæºóµÄÿһ´Î³ß¶È¸üУ¬¶¼ÏñÊÇÒ»´Î¶ÔC++µÄ?¡°ÏÖ´ú»¯¡±Ë¢Ð£¬×¢ÈëеĻîÁ¦£¬½¨¸´¾ÉµÄÉ˺ۡ£
C++11£¨ÓÖ³ÆModernC++£©µÄ°ä²¼£¬ÊÇC++·¢Õ¹¹ý³ÌÖеÄÓÖÒ»¸ö³ÁҪתÕ۵㡣ËüÒýÈëÁË´óÁ¿ÏÖ´ú»¯µÄ¸öÐÔ£¬ÈçÓÒÖµÒýÓã¨rvaluereferences£©¡¢Òƶ¯ÓïÒ壨movesemantics£©¡¢lambda±í°×?ʽ£¨lambdaexpressions£©¡¢×Ô¶¯ÀàÐÍÍÆµ¼£¨autokeyword£©¡¢ÁìÓòforÑ»·£¨range-basedforloops£©µÈµÈ¡£
ÕâЩ¸öÐԵIJÎÓ룬¼«´óµØÌáÉýÁËC++µÄ¿ª·¢Ð§Äܺʹú?ÂëµÄ¿É¶ÁÐÔ£¬²¢ÇÒÔÚ»úÄÜÉÏÒ²Óв»ÉÙÓÅ»¯¡£ÀýÈç£¬ÒÆ¶¯ÓïÒåµÄÒýÈ룬ʹµÃC++ÔÚ´¦Öôó?Á¿Ò»Ê±¶ÔÏóʱ£¬¿ÉÄÜÔ¤·À²»ÓÃÒªµÄ¿½±´£¬´Ó¶øÏÔÖøÌá¸ß»úÄÜ¡£lambda±í°×ʽÔòÈú¯Êýʽ±à³ÌµÄ?·ç¸ñÔÚC++ÖеÃÒÔʵÏÖ£¬Ê¹µÃ±àд¼ò½à¡¢¸ßЧµÄÄäÃûº¯Êý³ÉΪ¿ÉÄÜ¡£
C++11Ö®ºó£¬C++µÄ³ß¶È»¯¹ý³Ì¼Ó¿ì¡£C++14¡¢C++17¡¢C++20£¬ÉõÖÁ×îеÄC++23£¬³ß¶ÈίԱ»áÿÄê»òÁ½Äê°ä²¼Ò»´Îбê?×¼£¬²»ÐݵØÎªC++×¢ÈëеÄѪҺ¡£C++14´øÀ´ÁËÈç·ºÐÍlambda¡¢¶þ½øÔì×ÖÃæÁ¿µÈ¸Ä½ø£»C++17ÒýÈëÁ˽ṹ»¯°ó¶¨£¨structuredbindings£©¡¢ifconstexpr¡¢std::optional¡¢std::variantµÈ£¬½øÒ»²½¼ò»¯ÁË´úÂ룬Ìá¸ßÁ˰²È«ÐÔ£»C++20¸üÊÇ¿°³ÆÒ»´Î¡°´ó°æ±¾¸üС±£¬ÒýÈëÁËÄ£¿é£¨modules£©¡¢¸ÅÏ루concepts£©¡¢Ð³Ì£¨coroutines£©¡¢ÁìÓò£¨ranges£©µÈµß¸²ÐÔ¸öÐÔ£¬¼«´óµØ¼ÓÇ¿ÁËC++µÄ?±í°×ÄÜÁ¦ºÍ¹¤³Ì»¯ÄÜÁ¦£¬Ò²ÈÃC++ÔÚ²¢·¢±à³Ì¡¢Òì²½±à³ÌµÈÁìÓò¸ü¾ß¾ºÕùÁ¦¡£
¡°17c.c++¡¹Øâ¸ö˵·¨£¬±¾?Éí¿ÉÄܸü¶àµØÖ¸ÏòC++17³ß¶È£¬»òÕß·ºÖ¸2017ÄêǰºóÊ¢ÐеÄ?C++°æ±¾¡£µ«ÎÞÂÛÈôºÎ£¬Ëü¶¼ÊÇC++ÂþÉϽø»¯Ê·ÖеÄÒ»¸ö³ÁÒª½Úµã¡£Ëü´ú±íÁËC++ÔÚ¾ÀúÁËC++98ºÍC++11µÄÏ´Àñºó£¬Ô½·¢³ÉÊì¡¢Ô½·¢ÏÖ´ú»¯µÄÐÎò¡£
C++17³ß¶ÈÔÚC++11µÄ»ù´¡ÉÏ£¬³ÖÐøÖÂÁ¦ÓÚÌáÉý¿ª·¢Õߵijö²úÁ¦£¬²¢ÒýÈëÁËһЩ¿ÉÄÜ´øÀ´ÏÔÖø»úÄÜÌáÉýºÍ´úÂë¼ò½àÐԵĸöÐÔ¡£
Èç½ñµÄC++£¬ÔçÒѲ»ÊÇÎôʱBjarneStroustrupÄǸö¡°CwithClasses¡±µÄÆÓËØÑù×Ó¡£ËüÊÇÒ»¸öÖØ´ó¶ø¸´ÔÓµÄÉú̬ϵͳ£¬Ò»¸ö²»?¶Ï×ÔÎҸĸӵ±§½«À´µÄ±à³Ì˵»°¡£ËüµÄ?Ãû×Ö±³ºó£¬ÊÇÎÞÊý¿ª·¢Õß¡¢³ß¶ÈίԱ»á³ÉÔ±ÒÔ¼°¼¼Êõ°®ºÃÕߵĹ²Í¬ÖÂÁ¦ºÍÖǻ۽ᾧ¡£
´Ó¡°CwithClasses¡±µÄÃÈÑ¿£¬µ½C++98µÄµì»ù£¬ÔÙµ½C++11¡¢C++17¡¢C++20µÄÏÖ´ú»¯º£³±?£¬C++µÄ¹ÊÊ£¬ÊÇÒ»²¿¹ØÓÚ²»Ðݳ¬¹ý¡¢×êӪ׿ԽµÄÊ·Ê«¡£ËüÒÔÆä¹ÖÒìµÄ?÷ÈÁ¦£¬³ÖÐøÔÚÈí¼þÊÀ½çµÄ¸÷¸ö½ÇÂä²ûÑï×Ų»³É´úÌæµÄ×÷Ó㬲¢ÇÒ£¬ËüµÄÐÔÃüÁ¦£¬ÈÔÔÚÒÔ¾ªÈ˵ĿìÂÊ£¬³ÖÐøµã»ð¡£