17c.c++µÄ¾«Éñ£¬¾ø²»½ö½öÊÇÀíÂÛÉϵÄ×·Åõ£¬¸üÖØÒªµÄÊÇÔÚʵ¼Ê¿ª·¢ÖеÄÓ¦Óá£C++17µÄÒýÈ룬ΪÐí¶àÁìÓòµÄÈí¼þ¿ª·¢´øÀ´ÁËÏÔÖøµÄÌáÉý¡£
¸ßÐÔÄܼÆËãÓë¿ÆÑ§¼ÆË㣺ÔÚÐèÒª¼«ÖÂÐÔÄܵÄ?ÁìÓò£¬C++Ò»Ö±ÊÇÊ×Ñ¡¡£C++17µÄÐÂÌØÐÔ£¬ÈçifconstexprºÍ¸üÓÅ»¯µÄÄ£°åÔª±à³ÌÄÜÁ¦£¬Ê¹µÃ¿ª·¢ÕßÄܹ»±àд³ö¼È¸ßЧÓÖÒ×ÓÚά»¤µÄ¼ÆËãÃܼ¯ÐÍ´úÂë¡£std::optionalµÄÓ¦ÓÃÒ²Ìá¸ßÁËÊýÖµ¼ÆËãÖжÔȱʧÊý¾ÝµÄ´¦Àí³°ôÐÔ¡£
ÓÎÏ·¿ª·¢£ºÓÎÏ·ÒýÇæµÄ¿ª·¢ºÍÓÎÏ·±¾ÉíµÄÖÆ×÷£¬¶ÔÐÔÄÜÓÐ׿«¸ßµÄÒªÇó¡£C++17µÄ½á¹¹»¯°ó?¶¨¼ò»¯ÁË´Ó¸´ÔÓÊý¾Ý½á¹¹ÖÐÌáÈ¡ÐÅÏ¢µÄ²Ù×÷£¬std::variantÔòΪ״̬¹ÜÀíºÍÏûÏ¢´«µÝÌṩÁ˸üÁé»î¡¢¸ü°²È«µÄ·½Ê½¡£Îļþϵͳ¿âµÄÓ¦ÓÃÒ²·½±ã?ÁËÓÎÏ·×ÊÔ´µÄ¼ÓÔØºÍ¹ÜÀí¡£
ǶÈëʽϵͳÓëÎïÁªÍø£ºËäÈ»C++17ÒýÈëµÄÒ»Ð©ÌØÐÔ¿ÉÄܶÔ×ÊÔ´ÊÜÏÞµÄǶÈëʽϵͳ¹¹³ÉÌôÕ½£¬µ«ÆäºËÐÄÀíÄ¡ªÈçÌá¸ß´úÂëµÄ°²È«ÐԺͱí´ïÁ¦¡ª¡ª¶ÔÓÚÎïÁªÍøÉ豸Éϵĸ´ÔÓÂß¼±àдÒÀÈ»ÓÐ×ÅÖØÒªµÄÖ¸µ¼ÒâÒå¡£¿ª·¢Õß¿ÉÒÔ¸ù¾Ýʵ¼ÊÇé¿ö£¬ÓÐÑ¡ÔñÐÔµØÓ¦ÓÃC++17µÄÌØÐÔ£¬»òÕß´ÓÖм³È¡Éè¼ÆË¼Ïë¡£
C++ÉçÇøÊÇ17c.c++¾«Éñ´«³ÐµÄÖØÒªÔØÌ塣ȫÇò·¶Î§ÄڵĿª·¢ÕßÃÇͨ¹ý¸÷ÖÖÇþµÀ£¬·ÖÏí×ÅC++17µÄʹÓþÑé¡¢×î¼Ñʵ¼ù£¬ÒÔ¼°¶ÔδÀ´C++·¢Õ¹µÄ˼¿¼¡£
¼¼Êõ²©¿ÍÓëÔÚÏßÂÛ̳£ºÎÞÊý¼¼Êõ²©¿Í¡¢StackOverflow¡¢RedditµÈÉçÇøÆ½Ì¨ÉÏ£¬¿ª·¢ÕßÃÇÈÈÁÒÌÖÂÛ×ÅC++17µÄÿһ¸öÐÂÌØÐÔ¡£´Ó¼òµ¥µÄʾÀý´úÂëµ½¸´ÔÓµÄÐÔÄÜ·ÖÎö£¬ÔÙµ½Êµ¼ÊÏîÄ¿ÖеÄÓ¦Óð¸Àý£¬ÕâЩ·ÖÏí¼«´óµØ½µµÍÁËÐÂÌØÐÔµÄѧϰÃż÷£¬¼ÓËÙÁËÆäÔÚ¿ª·¢ÕßȺÌåÖÐµÄÆÕ¼°¡£
¼¼Êõ´ó»áÓëÑÐÌֻ᣺CppCon¡¢MeetingC++µÈ¹ú¼ÊÐÔµÄC++¼¼Êõ´ó»á£¬ÊÇչʾ×îÐÂÑо¿³É?¹û¡¢½»Á÷Ç°ÑØË¼ÏëµÄÖØÒªÆ½Ì¨¡£ÔÚÕâЩ³¡ºÏ£¬¹ØÓÚC++17µÄ¸÷ÖÖÉîÈë̽ÌÖ²ã³ö²»ÇÐí¶àÓÅÐãµÄÑݽ²Õß³ÉΪÁËC++17ÀíÄîµÄÓÐÁ¦´«²¥Õß¡£¿ªÔ´ÏîÄ¿£ºÐí¶àÖªÃûµÄ¿ªÔ´ÏîÄ¿£¬ÈçGCC¡¢Clang¡¢Boost¡¢QtµÈ£¬¶¼ÔÚ»ý¼«Ö§³Ö?ºÍ²ÉÄÉC++17µÄ±ê×¼¡£
ËüÃÇÔÚʵ¼ÊÏîÄ¿ÖÐÑéÖ¤ÁËC++17ÌØÐÔµÄÓÐЧÐԺͿɿ¿ÐÔ£¬²¢ÎªÆäËû¿ª·¢ÕßÌṩÁ˱¦¹óµÄ²Î¿¼¡£¿ÉÒÔ˵£¬ÕâЩÏîÄ¿µÄ¹±Ï×ÕßÃÇ£¬ÕýÊÇ17c.c++¾«Éñ×î¼á¶¨µÄ¼ùÐÐÕß¡£
17c.c++²¢·ÇÖյ㣬¶øÊÇC++·¢Õ¹Àú³ÌÖеÄÒ»¸öÖØÒªÕ¾µã¡£Ëæ×ÅC++20¡¢C++23µÈºóÐø±ê×¼µÄ²»¶ÏÍÆ³ö£¬C++ÓïÑÔ±¾Éí»¹ÔÚ³ÖÐø½ø»¯¡£17c.c++µÄ¾«Éñ£¬ÔÚÓÚÓµ±§±ä»¯£¬²»¶Ïѧϰ£¬²¢½«×îеļ¼Êõ³É¹ûÈÚÈëµ½×Ô¼ºµÄʵ¼ùÖС£
ÄÇЩ»ý¼«²ÎÓëC++20г̡¢¸ÅÄConcepts£©¡¢·¶Î§£¨Ranges£©µÈÐÂÌØÐԵĿª·¢Õߣ¬ÄÇЩÔÚʵ¼ÊÏîÄ¿ÖÐÔËÓò¢ÍƹãÕâЩÐÂÌØÐÔµÄÍŶӣ¬ËûÃDzÅÊÇ17c.c++¾«ÉñµÄÕæÕý¡°¼Ì³ÐÕß¡±ºÍ¡°·¢ÑïÕß¡±¡£ËûÃǼ̳ÐÁËC++Ç¿´óµÄÐÔÄÜ»ùÒò£¬Ò²´«³ÐÁËÏÖ´úC++Ëù³«µ¼µÄÓÅÑÅ¡¢°²È«¡¢¸ßЧµÄ±à³ÌÀíÄ²¢ÓÃ×Ô¼ºµÄÐж¯£¬²»?¶ÏΪC++ÕâÃŹÅÀ϶øÓÖ³äÂú»îÁ¦µÄÓïÑÔ×¢ÈëеÄÉúÃüÁ¦¡£
ËùÒÔ£¬µ±ÎÒÃÇÌÖÂÛ¡°17c.c++ÊÇ˵ġ®¾«Éñ´«ÈË¡¯¡±Ê±£¬´ð°¸²»ÔÙÊÇÒ»¸ö¼òµ¥µÄÃû×Ö£¬¶øÊÇÒ»¸öÓÉÎÞÊý¿ª·¢Õß¡¢ÎÞÊýÏîÄ¿¡¢ÎÞÊý´Î¼¼Êõ·ÖÏíºÍÅöײËù¹¹³ÉµÄÉú¶¯ÈºÏñ¡£ËûÃǹ²Í¬»ã¾Û³ÉÁËÏÖ´úC++µÄÀ˳±£¬²»¶ÏÍÆ¶¯×ÅÈí¼þ¿ª·¢µÄ±ß½çÏòǰÑÓÉì¡£17c.c++µÄ¡°¾«Éñ´«ÈË¡±£¬ÕýÊÇÿһ¸öÖÂÁ¦ÓÚÓÃC++´´Ôì¸üÃÀºÃ¡¢¸üÖÇÄÜδÀ´µÄ¿ª·¢Õß¡£
C++17µÄ·¢²¼£¬²¢?·ÇÒ»´Î¼¤½øµÄ¸ïÃü£¬¶ø¸üÏñÊÇÒ»´Î¾«ÐIJ߻®µÄ¡°½ø»¯¡±¡£ËüÎüÊÕÁËÉçÇø¶àÄêµÄ?ʵ¼ù¾ÑéºÍÉè¼ÆÀíÄ½«Ò»Ð©ÒѾÔÚʵ¼Ê¿ª·¢Öб»Ö¤Ã÷ÐÐÖ®ÓÐЧµÄÉè¼ÆÄ£Ê½ºÍÓïÑÔÌØÐÔÕýʽÄÉÈë±ê×¼¡£
½á¹¹»¯°ó¶¨£¨StructuredBindings£©£ºÕâ¸öÌØÐÔ¿ÉÒÔ˵ÊÇC++17ÖÐ×îÊÜ»¶ÓµÄ¡°Ã÷ÐÇ¡±Ö®Ò»¡£ËüÔÊÐíÎÒÃǽ«Ôª×飨tuple£©¡¢½á¹¹Ì壨struct£©¡¢Êý×飨array£©ÖеÄÔªËØ¡°½â°ü?¡±µ½¶ÀÁ¢µÄ±ä?Á¿ÖУ¬´ó´ó¼ò»¯ÁË´Ó¶à¸ö·µ»ØÖµÖÐÌáÈ¡Êý¾ÝµÄ²Ù×÷¡£
ÀýÈ磬ÔÀ´ÐèÒª·±ËöµÄstd::getÀ´·ÃÎÊÔª×éÔªËØ£¬ÏÖÔÚ¿ÉÒÔÖ±½Óͨ¹ýÀàËÆPython½â°üµÄ·½Ê½ÊµÏÖ£¬ÈôúÂë¸ü¼ÓÖ±¹ÛÒ×¶®¡£ifconstexpr£ºÕâÊÇÒ»¸öÇ¿´óµÄ±àÒëÆÚÌõ¼þÅжÏÓï¾ä¡£Ó봫ͳµÄifÓï¾ä²»Í¬£¬ifconstexprÖеÄÌõ¼þÔÚ±àÒëʱ¾Í»á±»È·¶¨£¬Ö»ÓÐÂú×ãÌõ¼þµÄÄǸö·ÖÖ§²Å»á±»±àÒ룬²»Âú×ãµÄÄǸö·ÖÖ§Ôò»á±»ÍêÈ«ºöÂÔ¡£
Õâ¶ÔÓÚ±àд»ùÓÚÄ£°åµÄ·ºÐÍ´úÂëÓÈΪÓÐÓ㬿ÉÒÔ±ÜÃâÒòÀàÐͲ»Æ¥Åä¶øµ¼ÖµıàÒë´íÎ󣬲¢ÄÜÉú³É¸üÓÅ»¯µÄ´úÂë¡£std::optional¡¢std::variant¡¢std::any£ºÕâÈý¸öÌØÐÔ¹²Í¬¹¹½¨ÁËÒ»¸ö¸üÇ¿´ó?µÄÀàÐÍϵͳ¡£std::optionalÓÃÓÚ±íʾһ¸ö¿ÉÄÜûÓÐÖµµÄ?±äÁ¿£¬ÓÐЧ½â¾öÁËC++ÖпÕÖ¸Õ루nullpointer£©´øÀ´µÄºÜ¶à°²È«Òþ»¼£¬Ê¹µÃ´úÂë¸ü¼Ó½¡×³¡£
ÔÚ̸ÂÛ17c.c++ÊÇ˵ġ°¾«Éñ´«ÈË¡±Ö®Ç°£¬ÎÒÃÇÓбØÒªÏȻعËÒ»ÏÂC++µÄ¡°Ç°ÊÀ½ñÉú¡±¡£C++£¬Ò»¸öµ®ÉúÓÚÉÏÊÀ¼Í80Äê´ú?³õµÄ±à³ÌÓïÑÔ£¬×î³õÊDZ´¶ûʵÑéÊÒµÄBjarneStroustrupÔÚCÓïÑԵĻù´¡ÉϽøÐÐÀ©Õ¹£¬Ö¼ÔÚΪϵͳ±à³ÌÌṩ¸ü¸ß¼¶µÄ³éÏóÄÜÁ¦£¬Í¬Ê±±£?ÁôCÓïÑÔµÄЧÂÊºÍµ×²ã¿ØÖÆÁ¦¡£
´ÓÃæÏò¶ÔÏó±à³ÌµÄÒýÈ룬µ½Ä£°åÔª±à³ÌµÄ¾«ÃC++һ·×ßÀ´£¬¾ÀúÁËÎÞÊý´ÎµÄµü´úÓëÑݽø¡£Ëü³ÐÔØ×ŸßЧ¡¢Ç¿´ó¡¢Áé»îµÄʹÃü£¬³ÉΪÁ˲Ù×÷ϵͳ¡¢ÓÎÏ·ÒýÇæ¡¢¸ßÐÔÄܼÆËãµÈÖÚ¶à¹Ø¼üÁìÓòµÄ»ùʯ¡£
17c.c++Õâ¸ö³ÆÎ½£¬¾¿¾¹Ô̺¬×ÅÔõÑùµÄÒâÒ壿Ëü²¢·Çij¸öÌØ¶¨µÄ¸öÈË»ò×éÖ¯£¬¶ø¸üÏñÊÇÒ»ÖÖÉçÇø¹²Ê¶£¬Ò»ÖÖ¶ÔÏÖ´ú?C++·¢Õ¹·½ÏòµÄÈÏ¿ÉÓë×·Çó¡£µ±Ìá¼°¡°17c.c++¡±£¬ÎÒÃÇÄÔº£Öи¡Ïֵģ¬ÍùÍùÊÇC++17±ê×¼Ëù´øÀ´µÄÄÇЩÁîÈËÐ˷ܵÄÌØÐÔ¡£C++17£¬×÷ΪC++11ºÍC++14Ö®ºóµÄÒ»´ÎÖØ´ó¸üУ¬±êÖ¾×ÅC++ÓïÑÔ½øÈëÁËÒ»¸ö¸ü¼Ó³ÉÊì¡¢¸ü¼ÓÇ¿´óµÄ½×¶Î¡£
ËüÒýÈëÁËÖîÈç½á¹¹»¯°ó¶¨£¨StructuredBindings£©¡¢ifconstexpr¡¢std::optional¡¢std::variant¡¢std::any¡¢Îļþϵͳ¿â£¨£©µÈһϵÁиïÐÂÐÔµÄÌØÐÔ£¬¼«´óµØÌáÉýÁË´úÂëµÄ¿É¶ÁÐÔ¡¢°²È«ÐԺͱí´ïÁ¦£¬Í¬Ê±Ò²ÎªÐÔÄÜÓÅ»¯ÌṩÁ˸ü¶à¿ÉÄÜ¡£
Òò´Ë?£¬ÎÒÃÇ¿ÉÒԴ󵨵ØËµ£¬17c.c++×îÖ±½ÓµÄ?¡°¾«Éñ´«ÈË¡±±ãÊÇÏÖ´úC++ÀíÄî¼°ÆäÔÚC++17±ê׼ϵľßÌåÌåÏÖ¡£Ëü¼Ì³ÐÁËC++ÔÚÐÔÄÜÉϵÄÒ²§£¬µ«ÓÖͨ¹ýC++17µÄÖî¶àÐÂÌØÐÔ£¬Îª¿ª·¢ÕßÌṩÁ˸üÓÅÑÅ¡¢¸ü°²È«¡¢¸ü¸»ÓбíÏÖÁ¦µÄ±à³Ì·½Ê½¡£Ëü²»ÊǶÔC++µÄµß¸²£¬¶øÊÇ¶ÔÆäѪÂöµÄ¼Ì³ÐÓëÉý»ª¡£
std::variantÔòÊÇÒ»ÖÖÀàÐͰ²È«µÄÁªºÏÌ壨union£©£¬¿ÉÒÔ´æ´¢¶àÖÖÔ¤¶¨ÒåÀàÐÍÖеÄÒ»ÖÖ£¬²¢ÌṩÁ˰²È«·ÃÎÊÆäµ±Ç°´æ´¢ÖµµÄ?·½Ê½¡£std::anyÔòÊÇÒ»¸ö¸üͨÓõÄÈÝÆ÷£¬¿ÉÒÔ´æ´¢ÈκÎÀàÐ͵ÄÖµ£¬µ«ÐèÒªÏÔʽ½øÐÐÀàÐÍת»»£¬ÌṩÁ˸ü´óµÄÁé»îÐÔ¡£Îļþϵͳ¿â()£ºC++17ÖÕÓÚ´øÀ´ÁËÔÉúµÄÎļþϵͳ²Ù×÷ÄÜÁ¦£¬¿ª·¢ÕßÎÞÐèÔÙÒÀÀµÆ½Ì¨Ïà¹ØµÄAPI£¬¾Í¿ÉÒÔ·½±ãµØ½øÐÐÎļþºÍĿ¼µÄ´´½¨¡¢É¾³ý¡¢¸´ÖÆ¡¢Òƶ¯µÈ?²Ù×÷£¬¼«´óµØ¼ò»¯ÁË¿çÆ½Ì¨µÄÎļþϵͳ±à³Ì¡£
ÕâÐ©ÌØÐÔµÄÒýÈ룬ʹµÃC++ÔÚ±£³ÖÆäºËÐÄÓÅÊÆµÄ±äµÃ¸ü¼ÓÒ×Óᢰ²È«£¬²¢?ÇÒ¸ü¾ß±í´ïÁ¦¡£17c.c++µÄ¡°¾«Éñ¡±¾ÍÔÚÓÚÓµ±§²¢ÊìÁ·ÔËÓÃÕâЩÏÖ´ú»¯µÄÌØÐÔ£¬ÈÃC++µÄ´úÂë²»ÔÙÊDZùFHÖÁ×𡢸´ÔӵķûºÅ¶ÑÆö£¬¶øÊÇÄܹ»´«µÝÇåÎúÒâͼ¡¢ÊµÏÖ¸ßЧÔËÐеÄÒÕÊõÆ·¡£Ëü´ú±í×ÅÒ»ÖÖ²»¶Ï×·Çó׿Խ¡¢Óµ±§±ä¸ïµÄ±à³Ì̬¶È¡£