C++×÷ΪһÞµäµÄ±à³ÌÓïÑÔ£¬´ÓÉÏÊÀ¼Í°ËÊ®Äê´úÆðÖÁ½ñÒ»Ö±±»¹ã·ºÓ¦ÓÃÔÚϵͳ¿ª·¢ºÍ¸ßÐÔÄܼÆËãÁìÓò¡£½ü¼¸ÄêÀ´Ëæ×Ÿ÷ÖÖ±à³ÌÓïÑԺͷ¶Ê½µÄÐËÆð£¬C++µÄÉíÓ°½¥½¥µ³öÁËÈËÃǵÄÊÓÒ°¡£µ«ÊÇ×÷Ϊһ¸öÈÔÔÚ²»¶Ï½ø²½µÄÓïÑÔ£¬C++ÔÚ×î½ü¼¸Äê·ÉËÙ·¢Õ¹£¬ÒѾ¾ß±¸ÁËÏÖ´úÓïÑÔÓ¦ÓеÄÌØÐÔ£¬¶øÇÒÒ²ÓÐÁËÐí¶àÒÑÓеĺÍÕýÔÚ½øÐеÄеÄÍØÕ¹¡£
¾µäµÄC++
×÷ΪCÓïÑԵij¬¼¯£¬Ò»·½Ã棬C++¼¯³ÉÁËCÔÚϵͳ±à³ÌÓŵ㣬Äܹ»¾«È·µÄ¿ØÖÆÄÚ´æÖеÄÿһ¸öbit£»ÁíÒ»·½Ã棬ÌṩÁ˷ḻµÄ³éÏó»úÖÆºÍ±à³Ì·¶Ê½£¬ÒýÈëÁËÃæÏò¶ÔÏó¡¢·ºÐͱà³ÌºÍº¯Êýʽ±à³ÌµÈ·ç¸ñ¡£ÒòΪÕâÒ»µã£¬C++ÓµÓÐÁËÓëCæÇÃÀµÄÔËÐÐʱÐÔÄÜ£¬ÁíÒ»·½Ã棬Ҳ¼ò»¯ÁËCÓïÑÔ´øÀ´µÄÁìÓò½¨Ä£µÄÄѶȡ£µ«ÊÇÒòΪC++µÄÕûÌåÉè¼Æ½áºÏÁ˶àÖÖ·ç¸ñ£¬¼¸ºõÏ൱ÓÚǶÌ×Á˼¸¸öСÓïÑÔµÄÒ»¸öÅÓ´óµÄϵͳ£¬ÕâҲʹµÃC++µÄÕûÌåÒ×ѧÐÔºÍÒ×ÓÃÐÔÉÏÓÐЩ²î¾¢¡£Í¬Ê±£¬ÓÉÓÚ±ê×¼¿â¸üиú²»ÉÏÐèÇó£¬ÔÚÖîÈçConcurrency/NetworkµÈÓ¦ÓòãµÄÈí¼þÉè¼Æ·½ÃæÖð½¥±»JavaµÈºóÀ´ÕßÈ¡´ú¡£¶øÇÒ£¬¸÷¸öC++³§É̶ԱàÒëÆ÷µÄʵÏÖ²¢Ã»ÓÐÍêÈ«²Î¿¼ISO±ê×¼£¬Ò²Ôì³ÉÁ˺ܶà¿çƽ̨¿ÉÒÆÖ²ÐԺͼæÈÝÐÔÎÊÌâ¡£
ÏÖ´úC++
C++ÔÚ×î½ü¼¸Äê½øÐÐÁ˼¸´Î̽Ë÷ºÍÍɱ䣬ÈÃÕû¸öÓïÑÔ±äµÃ¸ü¾ß±¸ÏÖ´ú»¯µÄÌØÉ«¡£
×ÊÔ´¹ÜÀí
RAII£¨Resource Aquiration is Initialization£¬×ÊÔ´»ñÈ¡¼´³õʼ»¯£©×÷ΪC++µÄÌØÉ«Ö®Ò»£¬±»¹ã·ºµØÓ¦Óõ½C++µÄ³ÌÐòÖС£RAIIͨ¹ý¶Ñ¶ÔÏóµÄÉúÃüÖÜÆÚÀ´¿ØÖÆ×ÊÔ´£¨°üÀ¨¶ÑÄÚ´æ¡¢Îļþ¾ä±ú¡¢ÍøÂçÁ¬½ÓµÈ£©µÄÉúÃüÖÜÆÚ£¬Ê¹µÃ×ÊÔ´¹ÜÀí±äµÃ¸ü¼Ó×Ô¶¯»¯£¬Í¬Ê±Ò²±ÜÃâÁËÒýÈëÀ¬»ø»ØÊÕ´øÀ´µÄÔËÐÐʱ¸ºµ£¡£µ«ÕâÖÖģʽÓÐÒ»¸öºÜÖØÒªµÄÎÊÌ⣬¾ÍÊǵ±ÐèÒª¶Ô×ÊÔ´½øÐй²Ïíʱ£¬ÐèÒª×ö¸ü¶à¶îÍâµÄ¹¤×÷À´½øÐмì²éºÍͬ²½µÈ¹¤×÷¡£
×÷Ϊ¸üÏÖ´úµÄ×ÊÔ´¹ÜÀí·½Ê½£¬C++11ÖÐÒýÈëÁËÁ½ÖÖÖÇÄÜÖ¸Õ룬std::shared_ptrºÍstd::unique_ptr¡£Ç°ÕßÓµÓÐḬ̈߳²È«µÄÒýÓüÆÊý£¬ºóÕßÔòÊÇͨ¹ýËùÓÐȨ£¨owenrship£©×ªÒÆÀ´¿ØÖÆ×ÊÔ´µÄÉú´æÖÜÆÚ¡£C++11ÖÐÒ²ÒýÈëÁËÓÒÖµÒýÓúÍÒÆ¶¯ÓïÒ壬À´±ÜÃâ×ÊÔ´´«µÝµÄ¹ý³ÌÖеIJ»±ØÒªµÄ¸´ÖÆ¡£
ÓëRustÖеÄÉúÃüÖÜÆÚ£¨Lifetime£©ºÍËùÓÐȨ£¨Ownership£©µÄ¸ÅÄîÀàËÆ£¬C++µÄstd::unique_ptrÔÚÿһ´ÎÖµ´«µÝµÄʱºò½«×ÔÉí³ÖÓеÄ×ÊÔ´×ªÒÆµ½¸³ÖµµÄÄ¿±ê£¬Í¬Ê±½áºÏÒÆ¶¯ÓïÒ壬½«¸³Öµ¹ý³Ì½øÒ»²½µØÓÅ»¯¡£
Lambda
Functor×÷ΪC++ STLµÄÒ»¸öÖØÒª×é¼þ£¬Ò²ÊÇC++Öб»Ê¹ÓúܶàµÄÒ»¸ö¹¦ÄÜ¡£Ò»¸öFunctorÆäʵ¾ÍÊÇÒ»¸öÖØÔØÁËoperator()µÄÀàµÄʵÀý¶ÔÏó£¬ÕâÖÖ¶ÔÏóÅäºÏC++Ä£°æµÄÐÐΪ£¬¿ÉÒÔ±»¼òµ¥¿´³ÉÒ»¸öº¯ÊýÀ´µ÷Óã¬ËùÒÔ±»³ÆÎªFunctor£¨º¯×Ó£©¡£µ«ÊÇ£¬ÓÉÓÚC++¶ÔÓÚÄäÃûÀàºÍÄÚ²¿ÀàÖ§³Ö²¢²»¹»ºÃ£¬Ê¹ÓÃFunctor±ØÐëÌáǰ½øÐÐÉè¼Æ¡£Ò»·½Ãæ²»·½±ãʹÓã¬ÁíÒ»·½Ã棬¶¨ÒåºÍʹÓ÷ÖÀ룬¶Ô´úÂëµÄ×éÖ¯ºÍÀí½âÒ²Ôì³ÉÁËÒ»¶¨µÄÀ§ÄÑ¡£
Ê×ÏÈ£¬lambda×÷ΪFunctorµÄÌæ´úÆ·£¬½â¾öÁ˲»Äܼ´Ê±¶¨Ò岢ʹÓõÄÎÊÌâ¡£ÅäºÏSTLÖеÄÈÝÆ÷ºÍËã·¨£¬lambdaÒ²Äܽ«C++µÄº¯Êýʽ·ç¸ñ·¢»Óµ½¼«Ö¡£Æä´Î£¬³öÓÚC++Ò»¹á¶ÔÐÔÄܺͳéÏóµÄ¿¼ÂÇ£¬ÒýÈëÁËlambda captureµÄ¸ÅÄʹµÃ¶ÔÏóµÄÉúÃüÖÜÆÚÄܹ»°ó¶¨µ½lambda±í´ïʽ£¬Ò²¾ÍÄܹ»¹¹½¨³ö±Õ°ü¶ÔÏó£¨closure£©¡£ÁíÍ⣬C++14ÖмÓÈëµÄgeneric lambda£¬ÔöÇ¿ÁËlambdaµÄÀàÐÍÍÆµ¼Ëã·¨£¬ÔÚ²»ËðʧÀàÐͰ²È«ÌØÐԵĻù´¡ÉÏ£¬ÈÃ×éºÏʽ±à³Ì£¨Combinator-based Programming£©¸ü¼ÓÒ×ÓÚʵÏÖ¡£
²¢·¢
ÔÚC++Éè¼ÆµÄ³õÆÚ£¬²¢·¢²¢Î´×÷ΪºËÐĵÄÓïÑÔÌØÐÔ¿¼ÂÇÔÚÄÚ¡£²¢ÇÒ£¬Ï̵߳Ȳ¢·¢Ä£ÐÍÔÚ²»Í¬Æ½Ì¨Ö®ÉÏÒ²Óи÷ÖÖ²»Í¬µÄʵÏÖ£¬¹¹½¨Ò»¸öͳһµÄ²¢·¢Ä£ÐÍÒ²ºÜÀ§ÄÑ¡£
C++11ÖÐÖØÐÂÉè¼ÆÁËC++µÄÄÚ´æÄ£ÐÍ£¬ÔÚ±£³ÖÔÓмæÈÝÐԵĻù´¡Ö®ÉϼÓÈëÁ˲¢·¢µÄÄÚÈÝ¡£Í¬Ê±±ê×¼¿âÖÐÒ²¼ÓÈëÁËỊ̈߳¨
Ôª±à³Ì
C++×ÔÉí¶ÔÔª±à³ÌÌṩÁËÁ¼ºÃµÄÖ§³Ö¡£×÷ΪÖ÷Òª×é¼þÖ®Ò»µÄÄ£°æ£¬ÌṩÁ˱àÒëʱµÄÊýÖµ¼ÆËãºÍÀàÐͼÆËã¡£µ«Ò»·½ÃæÓÉÓÚʹÓÃÄ£°æ¼õÂý±àÒëËÙ¶È£¬ÁíÒ»·½Ã棬ÔÚʹÓÃÄ£°æµÄʱºò£¬·Ç³£ÄÑÒÔµ÷ÊÔºÍÅÅ´í£¬ÕâÈúܶàÈËÍû¶øÈ´²½£¬ÉõÖÁ¶Ô»ùÓÚÄ£°æµÄSTL×é¼þÒ²ÓÐÒ»ÖÖη¾å¸Ð¡£
C++11ÖжÔÔª±à³ÌÖ§³Ö×öÁ˼ÓÇ¿¡£Ê×ÏÈÊǰÑtype traits×÷Ϊ±ê×¼¿âÒýÈ룬Äܹ»¸øÄ£°æÌṩһÌ×Ö±¹ÛµÄÔ¼Êø£¬Ò²ÈÃÀàÐÍ×÷ΪC++ÖеĵÚÒ»ÀàÖµ£¨first-class value£©´æÔÚ£»ÁíÍâconstexprµÄÒýÈë¼ò»¯Á˱àÒëʱµÄÖµÔËË㣬ÅäºÏÓû§×Ô¶¨Òå×ÖÃæÁ¿£¨user-defined literals£©ÒÔ¼°¿É±ä²ÎÊýÄ£°æ£¨varadic template/parameter pack£©µÈÌØÐÔ£¬ÈÃC++Äܹ»¸ü·½±ãµØ¶¨ÒåÄÚ²¿DSL¡£
Bright Future
×÷ΪһÞµäµÄ±à³ÌÓïÑÔ£¬C++ÖÁ½ñ»¹ÔÚ²»¶ÏµØ¸üÐÂ×Å¡£¼´½«µ½À´µÄC++17ÖУ¬ÕýÔڳﱸ×ÅÕâÐ©ÖØÒªµÄÌØÐÔ£º
¸ü·á¸»µÄ±ê×¼¿â£ºC++ÖжÔFile System¡¢NetworkµÈÖØÒªµÄ×é¼þ½øÐÐÁ˱ê×¼»¯µÄÖ§³Ö£¬
Module TS£ºÄ£¿é»¯Ìá°¸£¬ÓÃÓÚÌæ´ú¼Ì³Ð×ÔCÓïÑÔµÄÍ·Îļþ£¬¼ò»¯C++µÄ±àÒëÄ£ÐͺÍÄ£¿éÒÀÀµ£¬
Concepts TS£ºÓÃÓÚÔöÇ¿ÀàÐÍÔ¼ÊøºÍÀàÐÍÍÆµ¼£¬Í¬Ê±Ò²¼ò»¯Ä£°æµÄÓ÷¨£¬
Reflection TS£ºÌṩ±àÒëÆÚ¾²Ì¬·´ÉäµÄÖ§³Ö£¬¼ò»¯ºÍÔöÇ¿type traits£¬Ìṩ¸ü·á¸»µÄÔª±à³Ì¹¦ÄÜ¡£
Conclusion
¿ÉÒÔ¿´µ½C++·¢Õ¹ÖÁ½ñÒ»Ö±¶¼×ßÔÚʱ´úµÄǰÁÐÏßÉÏ¡£Ò»·½Ã棬Ôö¼ÓÁ˸ü¶àÊʺÏÓ¦ÓúÍϵͳ¿ª·¢µÄ×é¼þ£¬ÁíÒ»·½Ã棬ͨ¹ýÓïÑÔÌØÐÔµÄÀ©³äÀ´¼ò»¯³éÏó¸´ÔÓ¶È¡£×÷ΪÕâÑùÒ»¸ö¼æ¾ßÐÂÉúÌØÐÔºÍÀúÊ·ÔðÈεıà³ÌÓïÑÔ£¬×ãÒÔÔ¤¼ûÆäÓ¦ÓõĹã¶È£»Í¬Ñù£¬¸ü¶àµÄϵͳ¼¶¿ªÔ´ÏîÄ¿£¬ÏñMesosµÈ£¬Ò²Ñ¡ÔñC++×÷ΪÖ÷ÒªµÄ±à³ÌÓïÑÔ¡£ÓÐ×ã¹»µÄÀíÓÉÈÃÎÒÃÇÏàÐÅ£¬C++ÕýÔÚÖØ»ñÐÂÉú¡£