[{"data":1,"prerenderedAt":3953},["ShallowReactive",2],{"wiki-page-\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding":3,"wiki-doc-items-\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding":3533,"language-switcher-data-\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding":3937,"wiki-i18n-paths-\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding":3952},{"id":4,"title":5,"body":6,"canonicalPath":3516,"chapterDepth":71,"chapterOrder":3517,"date":3518,"description":64,"docI18nKey":3519,"docKey":3520,"docRoot":3521,"docTitle":3522,"extension":3523,"i18nKey":3524,"isBlogPost":3525,"isWikiDoc":266,"isWikiIndex":3525,"layout":3526,"legacyPath":3527,"locale":3528,"localeSlug":3529,"meta":3530,"navigation":266,"path":3516,"seo":3531,"sourcePath":3527,"sourceStem":3524,"stem":3524,"wikiDepth":71,"__hash__":3532},"content\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定.md","结构化绑定",{"type":7,"value":8,"toc":3492},"minimark",[9,13,37,45,48,51,55,58,84,87,98,102,105,201,215,303,306,359,369,372,428,431,434,498,501,506,1034,1039,1047,1051,1583,1587,1593,1597,2063,2067,2073,2077,2604,2608,2614,2616,2619,2622,2741,2751,2762,2770,2812,2816,3168,3172,3178,3193,3196,3201,3246,3249,3254,3312,3318,3329,3380,3386,3389,3451,3454,3488],[10,11,12],"h2",{"id":12},"本节解决什么问题",[14,15,16,17,21,22,25,26,29,30,21,33,36],"p",{},"当函数需要返回多个值（如成功标志 + 数据），或者遍历 map 时需要同时拿到 key 和 value，在 C++17 之前需要借助 ",[18,19,20],"code",{},"std::pair"," \u002F ",[18,23,24],{},"std::tuple"," + ",[18,27,28],{},"std::get\u003C>()"," 或 ",[18,31,32],{},".first",[18,34,35],{},".second","，代码冗长且不易读。",[14,38,39,40,44],{},"结构化绑定让你可以",[41,42,43],"strong",{},"一行语句把复合类型（pair、tuple、结构体）分解成独立的变量","，代码清晰很多。",[10,46,47],{"id":47},"这个特性是什么",[14,49,50],{},"结构化绑定（Structured Bindings）是 C++17 引入的语法，允许你将一个结构体、pair、tuple 或数组的元素\"绑定\"到独立的变量名上。",[10,52,54],{"id":53},"c-标准版本","C++ 标准版本",[14,56,57],{},"C++17。编译本节完整示例时，需要启用 C++17 或更高标准，例如：",[59,60,65],"pre",{"className":61,"code":62,"language":63,"meta":64,"style":64},"language-bash shiki shiki-themes github-light github-dark","g++ example.cpp -std=c++17\n","bash","",[18,66,67],{"__ignoreMap":64},[68,69,72,76,80],"span",{"class":70,"line":71},"line",1,[68,73,75],{"class":74},"sScJk","g++",[68,77,79],{"class":78},"sZZnC"," example.cpp",[68,81,83],{"class":82},"sj4cs"," -std=c++17\n",[10,85,86],{"id":86},"需要的头文件",[14,88,89,90,93,94,97],{},"不需要额外头文件。结构化绑定是语言特性。如果用于 tuple 需要 ",[18,91,92],{},"\u003Ctuple>","，用于 pair 需要 ",[18,95,96],{},"\u003Cutility>","。",[10,99,101],{"id":100},"从-c17-前的写法到结构化绑定","从 C++17 前的写法到结构化绑定",[14,103,104],{},"C++17 之前没有统一的“解包”语法。面对不同的复合类型，需要使用各自的访问方式：",[106,107,108,125],"table",{},[109,110,111],"thead",{},[112,113,114,119,122],"tr",{},[115,116,118],"th",{"align":117},"left","类型",[115,120,121],{"align":117},"C++17 之前的访问方式",[115,123,124],{"align":117},"C++17 结构化绑定",[126,127,128,147,167,182],"tbody",{},[112,129,130,135,142],{},[131,132,133],"td",{"align":117},[18,134,20],{},[131,136,137,139,140],{"align":117},[18,138,32],{},"、",[18,141,35],{},[131,143,144],{"align":117},[18,145,146],{},"auto [first, second] = pair;",[112,148,149,153,162],{},[131,150,151],{"align":117},[18,152,24],{},[131,154,155,139,158,161],{"align":117},[18,156,157],{},"std::get\u003C0>()",[18,159,160],{},"std::get\u003C1>()"," 等",[131,163,164],{"align":117},[18,165,166],{},"auto [a, b, ...] = tuple;",[112,168,169,172,177],{},[131,170,171],{"align":117},"结构体",[131,173,174],{"align":117},[18,175,176],{},".成员名",[131,178,179],{"align":117},[18,180,181],{},"auto [a, b, ...] = object;",[112,183,184,187,196],{},[131,185,186],{"align":117},"数组",[131,188,189,139,192,195],{"align":117},[18,190,191],{},"[0]",[18,193,194],{},"[1]"," 等下标",[131,197,198],{"align":117},[18,199,200],{},"auto [a, b, ...] = array;",[14,202,203,204,206,207,210,211,214],{},"以 ",[18,205,20],{}," 为例，C++17 之前需要分别访问 ",[18,208,209],{},"first"," 和 ",[18,212,213],{},"second","：",[59,216,220],{"className":217,"code":218,"language":219,"meta":64,"style":64},"language-cpp shiki shiki-themes github-light github-dark","std::pair\u003Cint, bool> result = {5, true};\n\n\u002F\u002F C++17 之前：通过 pair 固定的成员名 first 和 second 取出两个值。\nint value = result.first;\nbool ok = result.second;\n","cpp",[18,221,222,261,268,275,289],{"__ignoreMap":64},[68,223,224,227,231,235,238,241,244,247,250,253,255,258],{"class":70,"line":71},[68,225,226],{"class":74},"std",[68,228,230],{"class":229},"sVt8B","::pair",[68,232,234],{"class":233},"szBVR","\u003Cint",[68,236,237],{"class":229},", ",[68,239,240],{"class":233},"bool>",[68,242,243],{"class":229}," result ",[68,245,246],{"class":233},"=",[68,248,249],{"class":229}," {",[68,251,252],{"class":82},"5",[68,254,237],{"class":229},[68,256,257],{"class":82},"true",[68,259,260],{"class":229},"};\n",[68,262,264],{"class":70,"line":263},2,[68,265,267],{"emptyLinePlaceholder":266},true,"\n",[68,269,271],{"class":70,"line":270},3,[68,272,274],{"class":273},"sJ8bj","\u002F\u002F C++17 之前：通过 pair 固定的成员名 first 和 second 取出两个值。\n",[68,276,278,281,284,286],{"class":70,"line":277},4,[68,279,280],{"class":233},"int",[68,282,283],{"class":229}," value ",[68,285,246],{"class":233},[68,287,288],{"class":229}," result.first;\n",[68,290,292,295,298,300],{"class":70,"line":291},5,[68,293,294],{"class":233},"bool",[68,296,297],{"class":229}," ok ",[68,299,246],{"class":233},[68,301,302],{"class":229}," result.second;\n",[14,304,305],{},"C++17 开始，可以使用结构化绑定一次取出两个值，并根据含义为它们命名：",[59,307,309],{"className":217,"code":308,"language":219,"meta":64,"style":64},"std::pair\u003Cint, bool> result = {5, true};\n\n\u002F\u002F C++17：value 对应 result.first，ok 对应 result.second。\nauto [value, ok] = result;\n",[18,310,311,337,341,346],{"__ignoreMap":64},[68,312,313,315,317,319,321,323,325,327,329,331,333,335],{"class":70,"line":71},[68,314,226],{"class":74},[68,316,230],{"class":229},[68,318,234],{"class":233},[68,320,237],{"class":229},[68,322,240],{"class":233},[68,324,243],{"class":229},[68,326,246],{"class":233},[68,328,249],{"class":229},[68,330,252],{"class":82},[68,332,237],{"class":229},[68,334,257],{"class":82},[68,336,260],{"class":229},[68,338,339],{"class":70,"line":263},[68,340,267],{"emptyLinePlaceholder":266},[68,342,343],{"class":70,"line":270},[68,344,345],{"class":273},"\u002F\u002F C++17：value 对应 result.first，ok 对应 result.second。\n",[68,347,348,351,354,356],{"class":70,"line":277},[68,349,350],{"class":233},"auto",[68,352,353],{"class":229}," [value, ok] ",[68,355,246],{"class":233},[68,357,358],{"class":229}," result;\n",[14,360,361,362,139,365,368],{},"结构化绑定没有改变 ",[18,363,364],{},"pair",[18,366,367],{},"tuple","、结构体或数组本身，只是提供了一套统一、简洁的取值语法。方括号中的变量按元素或成员的原有顺序一一对应。",[10,370,371],{"id":371},"基本语法",[59,373,375],{"className":217,"code":374,"language":219,"meta":64,"style":64},"\u002F\u002F 以下三种写法都是 C++17 开始支持的结构化绑定。\nauto [变量1, 变量2, ...] = 表达式;        \u002F\u002F 值绑定：通常会得到各元素的副本。\nauto& [变量1, 变量2, ...] = 表达式;       \u002F\u002F 引用绑定：可以通过变量修改原对象。\nconst auto& [变量1, 变量2, ...] = 表达式;  \u002F\u002F 只读引用绑定：不拷贝，也不允许修改。\n",[18,376,377,382,397,411],{"__ignoreMap":64},[68,378,379],{"class":70,"line":71},[68,380,381],{"class":273},"\u002F\u002F 以下三种写法都是 C++17 开始支持的结构化绑定。\n",[68,383,384,386,389,391,394],{"class":70,"line":263},[68,385,350],{"class":233},[68,387,388],{"class":229}," [变量1, 变量2, ...] ",[68,390,246],{"class":233},[68,392,393],{"class":229}," 表达式;",[68,395,396],{"class":273},"        \u002F\u002F 值绑定：通常会得到各元素的副本。\n",[68,398,399,402,404,406,408],{"class":70,"line":270},[68,400,401],{"class":233},"auto&",[68,403,388],{"class":229},[68,405,246],{"class":233},[68,407,393],{"class":229},[68,409,410],{"class":273},"       \u002F\u002F 引用绑定：可以通过变量修改原对象。\n",[68,412,413,416,419,421,423,425],{"class":70,"line":277},[68,414,415],{"class":233},"const",[68,417,418],{"class":233}," auto&",[68,420,388],{"class":229},[68,422,246],{"class":233},[68,424,393],{"class":229},[68,426,427],{"class":273},"  \u002F\u002F 只读引用绑定：不拷贝，也不允许修改。\n",[10,429,430],{"id":430},"常用用法",[14,432,433],{},"下表中的写法都需要启用 C++17 或更高版本：",[106,435,436,446],{},[109,437,438],{},[112,439,440,443],{},[115,441,442],{"align":117},"用法",[115,444,445],{"align":117},"说明",[126,447,448,458,468,478,488],{},[112,449,450,455],{},[131,451,452],{"align":117},[18,453,454],{},"auto [x, y] = pair",[131,456,457],{"align":117},"解包 pair",[112,459,460,465],{},[131,461,462],{"align":117},[18,463,464],{},"auto [a, b, c] = std::tuple\u003C...>(...)",[131,466,467],{"align":117},"解包 tuple",[112,469,470,475],{},[131,471,472],{"align":117},[18,473,474],{},"auto [x, y, z] = struct_obj",[131,476,477],{"align":117},"解包结构体（按成员顺序）",[112,479,480,485],{},[131,481,482],{"align":117},[18,483,484],{},"for (auto& [k, v] : map)",[131,486,487],{"align":117},"遍历 map 时解包 key\u002Fvalue",[112,489,490,495],{},[131,491,492],{"align":117},[18,493,494],{},"auto [it, ok] = map.insert(...)",[131,496,497],{"align":117},"解包 insert 返回的 pair\u003Citerator, bool>",[10,499,500],{"id":500},"示例代码",[502,503,505],"h3",{"id":504},"示例-1函数返回-pair从-c17-前的成员访问到结构化绑定","示例 1：函数返回 pair——从 C++17 前的成员访问到结构化绑定",[59,507,509],{"className":217,"code":508,"language":219,"meta":64,"style":64},"#include \u003Ciostream>\n#include \u003Cutility>  \u002F\u002F for std::pair\n\n\u002F\u002F 返回两个值的函数\nstd::pair\u003Cint, bool> divide(int a, int b)\n{\n    if (b == 0)\n    {\n        return {0, false};  \u002F\u002F 除数为 0，返回失败\n    }\n    return {a \u002F b, true};   \u002F\u002F 返回结果和成功标志\n}\n\nint main()\n{\n    \u002F\u002F C++17 之前：先接收完整的 pair 对象。\n    const std::pair\u003Cint, bool> old_result = divide(10, 2);\n\n    \u002F\u002F pair 的 first 是第一个值，这里代表除法结果。\n    const int old_value = old_result.first;\n\n    \u002F\u002F pair 的 second 是第二个值，这里代表操作是否成功。\n    const bool old_ok = old_result.second;\n\n    if (old_ok)\n    {\n        std::cout \u003C\u003C \"before C++17: 10 \u002F 2 = \" \u003C\u003C old_value \u003C\u003C \"\\n\";\n    }\n\n    \u002F\u002F C++17：结构化绑定把返回的 pair 按顺序拆成 value 和 ok。\n    \u002F\u002F value 对应 pair.first，ok 对应 pair.second。\n    const auto [value, ok] = divide(10, 2);\n    if (ok)\n    {\n        std::cout \u003C\u003C \"C++17: 10 \u002F 2 = \" \u003C\u003C value \u003C\u003C \"\\n\";\n    }\n\n    \u002F\u002F C++17：同样的方法也可以接收失败结果。\n    const auto [failed_value, failed_ok] = divide(10, 0);\n\n    \u002F\u002F failed_ok 为 false，说明 failed_value 不是有效的除法结果。\n    if (!failed_ok)\n    {\n        std::cout \u003C\u003C \"10 \u002F 0: division failed\\n\";\n    }\n\n    return 0;\n}\n",[18,510,511,519,529,533,538,581,587,604,610,632,638,660,666,671,682,687,693,731,736,742,758,763,769,785,790,798,803,837,842,847,853,859,883,891,896,922,927,932,938,962,967,973,987,992,1010,1015,1020,1029],{"__ignoreMap":64},[68,512,513,516],{"class":70,"line":71},[68,514,515],{"class":233},"#include",[68,517,518],{"class":78}," \u003Ciostream>\n",[68,520,521,523,526],{"class":70,"line":263},[68,522,515],{"class":233},[68,524,525],{"class":78}," \u003Cutility>",[68,527,528],{"class":273},"  \u002F\u002F for std::pair\n",[68,530,531],{"class":70,"line":270},[68,532,267],{"emptyLinePlaceholder":266},[68,534,535],{"class":70,"line":277},[68,536,537],{"class":273},"\u002F\u002F 返回两个值的函数\n",[68,539,540,542,545,547,550,552,554,556,559,562,565,567,571,573,575,578],{"class":70,"line":291},[68,541,226],{"class":74},[68,543,544],{"class":229},"::",[68,546,364],{"class":74},[68,548,549],{"class":229},"\u003C",[68,551,280],{"class":233},[68,553,237],{"class":229},[68,555,294],{"class":233},[68,557,558],{"class":229},"> ",[68,560,561],{"class":74},"divide",[68,563,564],{"class":229},"(",[68,566,280],{"class":233},[68,568,570],{"class":569},"s4XuR"," a",[68,572,237],{"class":229},[68,574,280],{"class":233},[68,576,577],{"class":569}," b",[68,579,580],{"class":229},")\n",[68,582,584],{"class":70,"line":583},6,[68,585,586],{"class":229},"{\n",[68,588,590,593,596,599,602],{"class":70,"line":589},7,[68,591,592],{"class":233},"    if",[68,594,595],{"class":229}," (b ",[68,597,598],{"class":233},"==",[68,600,601],{"class":82}," 0",[68,603,580],{"class":229},[68,605,607],{"class":70,"line":606},8,[68,608,609],{"class":229},"    {\n",[68,611,613,616,618,621,623,626,629],{"class":70,"line":612},9,[68,614,615],{"class":233},"        return",[68,617,249],{"class":229},[68,619,620],{"class":82},"0",[68,622,237],{"class":229},[68,624,625],{"class":82},"false",[68,627,628],{"class":229},"};",[68,630,631],{"class":273},"  \u002F\u002F 除数为 0，返回失败\n",[68,633,635],{"class":70,"line":634},10,[68,636,637],{"class":229},"    }\n",[68,639,641,644,647,650,653,655,657],{"class":70,"line":640},11,[68,642,643],{"class":233},"    return",[68,645,646],{"class":229}," {a ",[68,648,649],{"class":233},"\u002F",[68,651,652],{"class":229}," b, ",[68,654,257],{"class":82},[68,656,628],{"class":229},[68,658,659],{"class":273},"   \u002F\u002F 返回结果和成功标志\n",[68,661,663],{"class":70,"line":662},12,[68,664,665],{"class":229},"}\n",[68,667,669],{"class":70,"line":668},13,[68,670,267],{"emptyLinePlaceholder":266},[68,672,674,676,679],{"class":70,"line":673},14,[68,675,280],{"class":233},[68,677,678],{"class":74}," main",[68,680,681],{"class":229},"()\n",[68,683,685],{"class":70,"line":684},15,[68,686,586],{"class":229},[68,688,690],{"class":70,"line":689},16,[68,691,692],{"class":273},"    \u002F\u002F C++17 之前：先接收完整的 pair 对象。\n",[68,694,696,699,702,704,706,708,710,713,715,718,720,723,725,728],{"class":70,"line":695},17,[68,697,698],{"class":233},"    const",[68,700,701],{"class":74}," std",[68,703,230],{"class":229},[68,705,234],{"class":233},[68,707,237],{"class":229},[68,709,240],{"class":233},[68,711,712],{"class":229}," old_result ",[68,714,246],{"class":233},[68,716,717],{"class":74}," divide",[68,719,564],{"class":229},[68,721,722],{"class":82},"10",[68,724,237],{"class":229},[68,726,727],{"class":82},"2",[68,729,730],{"class":229},");\n",[68,732,734],{"class":70,"line":733},18,[68,735,267],{"emptyLinePlaceholder":266},[68,737,739],{"class":70,"line":738},19,[68,740,741],{"class":273},"    \u002F\u002F pair 的 first 是第一个值，这里代表除法结果。\n",[68,743,745,747,750,753,755],{"class":70,"line":744},20,[68,746,698],{"class":233},[68,748,749],{"class":233}," int",[68,751,752],{"class":229}," old_value ",[68,754,246],{"class":233},[68,756,757],{"class":229}," old_result.first;\n",[68,759,761],{"class":70,"line":760},21,[68,762,267],{"emptyLinePlaceholder":266},[68,764,766],{"class":70,"line":765},22,[68,767,768],{"class":273},"    \u002F\u002F pair 的 second 是第二个值，这里代表操作是否成功。\n",[68,770,772,774,777,780,782],{"class":70,"line":771},23,[68,773,698],{"class":233},[68,775,776],{"class":233}," bool",[68,778,779],{"class":229}," old_ok ",[68,781,246],{"class":233},[68,783,784],{"class":229}," old_result.second;\n",[68,786,788],{"class":70,"line":787},24,[68,789,267],{"emptyLinePlaceholder":266},[68,791,793,795],{"class":70,"line":792},25,[68,794,592],{"class":233},[68,796,797],{"class":229}," (old_ok)\n",[68,799,801],{"class":70,"line":800},26,[68,802,609],{"class":229},[68,804,806,809,812,815,818,821,823,825,828,831,834],{"class":70,"line":805},27,[68,807,808],{"class":74},"        std",[68,810,811],{"class":229},"::cout ",[68,813,814],{"class":233},"\u003C\u003C",[68,816,817],{"class":78}," \"before C++17: 10 \u002F 2 = \"",[68,819,820],{"class":233}," \u003C\u003C",[68,822,752],{"class":229},[68,824,814],{"class":233},[68,826,827],{"class":78}," \"",[68,829,830],{"class":82},"\\n",[68,832,833],{"class":78},"\"",[68,835,836],{"class":229},";\n",[68,838,840],{"class":70,"line":839},28,[68,841,637],{"class":229},[68,843,845],{"class":70,"line":844},29,[68,846,267],{"emptyLinePlaceholder":266},[68,848,850],{"class":70,"line":849},30,[68,851,852],{"class":273},"    \u002F\u002F C++17：结构化绑定把返回的 pair 按顺序拆成 value 和 ok。\n",[68,854,856],{"class":70,"line":855},31,[68,857,858],{"class":273},"    \u002F\u002F value 对应 pair.first，ok 对应 pair.second。\n",[68,860,862,864,867,869,871,873,875,877,879,881],{"class":70,"line":861},32,[68,863,698],{"class":233},[68,865,866],{"class":233}," auto",[68,868,353],{"class":229},[68,870,246],{"class":233},[68,872,717],{"class":74},[68,874,564],{"class":229},[68,876,722],{"class":82},[68,878,237],{"class":229},[68,880,727],{"class":82},[68,882,730],{"class":229},[68,884,886,888],{"class":70,"line":885},33,[68,887,592],{"class":233},[68,889,890],{"class":229}," (ok)\n",[68,892,894],{"class":70,"line":893},34,[68,895,609],{"class":229},[68,897,899,901,903,905,908,910,912,914,916,918,920],{"class":70,"line":898},35,[68,900,808],{"class":74},[68,902,811],{"class":229},[68,904,814],{"class":233},[68,906,907],{"class":78}," \"C++17: 10 \u002F 2 = \"",[68,909,820],{"class":233},[68,911,283],{"class":229},[68,913,814],{"class":233},[68,915,827],{"class":78},[68,917,830],{"class":82},[68,919,833],{"class":78},[68,921,836],{"class":229},[68,923,925],{"class":70,"line":924},36,[68,926,637],{"class":229},[68,928,930],{"class":70,"line":929},37,[68,931,267],{"emptyLinePlaceholder":266},[68,933,935],{"class":70,"line":934},38,[68,936,937],{"class":273},"    \u002F\u002F C++17：同样的方法也可以接收失败结果。\n",[68,939,941,943,945,948,950,952,954,956,958,960],{"class":70,"line":940},39,[68,942,698],{"class":233},[68,944,866],{"class":233},[68,946,947],{"class":229}," [failed_value, failed_ok] ",[68,949,246],{"class":233},[68,951,717],{"class":74},[68,953,564],{"class":229},[68,955,722],{"class":82},[68,957,237],{"class":229},[68,959,620],{"class":82},[68,961,730],{"class":229},[68,963,965],{"class":70,"line":964},40,[68,966,267],{"emptyLinePlaceholder":266},[68,968,970],{"class":70,"line":969},41,[68,971,972],{"class":273},"    \u002F\u002F failed_ok 为 false，说明 failed_value 不是有效的除法结果。\n",[68,974,976,978,981,984],{"class":70,"line":975},42,[68,977,592],{"class":233},[68,979,980],{"class":229}," (",[68,982,983],{"class":233},"!",[68,985,986],{"class":229},"failed_ok)\n",[68,988,990],{"class":70,"line":989},43,[68,991,609],{"class":229},[68,993,995,997,999,1001,1004,1006,1008],{"class":70,"line":994},44,[68,996,808],{"class":74},[68,998,811],{"class":229},[68,1000,814],{"class":233},[68,1002,1003],{"class":78}," \"10 \u002F 0: division failed",[68,1005,830],{"class":82},[68,1007,833],{"class":78},[68,1009,836],{"class":229},[68,1011,1013],{"class":70,"line":1012},45,[68,1014,637],{"class":229},[68,1016,1018],{"class":70,"line":1017},46,[68,1019,267],{"emptyLinePlaceholder":266},[68,1021,1023,1025,1027],{"class":70,"line":1022},47,[68,1024,643],{"class":233},[68,1026,601],{"class":82},[68,1028,836],{"class":229},[68,1030,1032],{"class":70,"line":1031},48,[68,1033,665],{"class":229},[14,1035,1036,214],{},[41,1037,1038],{},"运行结果",[59,1040,1045],{"className":1041,"code":1043,"language":1044},[1042],"language-text","before C++17: 10 \u002F 2 = 5\nC++17: 10 \u002F 2 = 5\n10 \u002F 0: division failed\n","text",[18,1046,1043],{"__ignoreMap":64},[502,1048,1050],{"id":1049},"示例-2tuple-和数组从逐项访问到-c17-结构化绑定","示例 2：tuple 和数组——从逐项访问到 C++17 结构化绑定",[59,1052,1054],{"className":217,"code":1053,"language":219,"meta":64,"style":64},"#include \u003Ciostream>\n#include \u003Cstring>\n#include \u003Ctuple>\n\n\u002F\u002F 返回多个值\nstd::tuple\u003Cstd::string, int, double> get_student_info()\n{\n    return {\"Alice\", 20, 3.8};  \u002F\u002F 姓名、年龄、GPA\n}\n\nint main()\n{\n    \u002F\u002F C++17 之前：先保存完整的 tuple。\n    const auto old_info = get_student_info();\n\n    \u002F\u002F std::get\u003C下标>() 按位置访问 tuple，编号从 0 开始。\n    const std::string& old_name = std::get\u003C0>(old_info);\n    const int old_age = std::get\u003C1>(old_info);\n    const double old_gpa = std::get\u003C2>(old_info);\n\n    std::cout \u003C\u003C \"before C++17 tuple: \"\n              \u003C\u003C old_name \u003C\u003C \", \" \u003C\u003C old_age \u003C\u003C \", \" \u003C\u003C old_gpa \u003C\u003C \"\\n\";\n\n    \u002F\u002F C++17：结构化绑定按 tuple 中元素的顺序声明三个变量。\n    \u002F\u002F const auto& 表示只读引用，可以避免复制 tuple 中的 string。\n    const auto& [name, age, gpa] = old_info;\n    std::cout \u003C\u003C \"C++17 tuple: \"\n              \u003C\u003C name \u003C\u003C \", \" \u003C\u003C age \u003C\u003C \", \" \u003C\u003C gpa \u003C\u003C \"\\n\";\n\n    int numbers[] = {10, 20, 30};\n\n    \u002F\u002F C++17 之前：使用下标逐个访问数组元素。\n    std::cout \u003C\u003C \"before C++17 array: \"\n              \u003C\u003C numbers[0] \u003C\u003C \", \" \u003C\u003C numbers[1] \u003C\u003C \", \" \u003C\u003C numbers[2] \u003C\u003C \"\\n\";\n\n    \u002F\u002F C++17：数组有三个元素，所以左侧也必须声明三个名字。\n    \u002F\u002F 这里没有写 &，因此 a、b、c 是三个元素的副本。\n    const auto [a, b, c] = numbers;\n    std::cout \u003C\u003C \"C++17 array: \" \u003C\u003C a \u003C\u003C \", \" \u003C\u003C b \u003C\u003C \", \" \u003C\u003C c \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[18,1055,1056,1062,1069,1076,1080,1085,1118,1122,1146,1150,1154,1162,1166,1171,1188,1192,1197,1228,1252,1276,1280,1292,1326,1330,1335,1340,1354,1365,1400,1404,1429,1433,1438,1449,1495,1499,1504,1509,1523,1567,1571,1579],{"__ignoreMap":64},[68,1057,1058,1060],{"class":70,"line":71},[68,1059,515],{"class":233},[68,1061,518],{"class":78},[68,1063,1064,1066],{"class":70,"line":263},[68,1065,515],{"class":233},[68,1067,1068],{"class":78}," \u003Cstring>\n",[68,1070,1071,1073],{"class":70,"line":270},[68,1072,515],{"class":233},[68,1074,1075],{"class":78}," \u003Ctuple>\n",[68,1077,1078],{"class":70,"line":277},[68,1079,267],{"emptyLinePlaceholder":266},[68,1081,1082],{"class":70,"line":291},[68,1083,1084],{"class":273},"\u002F\u002F 返回多个值\n",[68,1086,1087,1089,1091,1093,1095,1097,1099,1102,1104,1106,1108,1111,1113,1116],{"class":70,"line":583},[68,1088,226],{"class":74},[68,1090,544],{"class":229},[68,1092,367],{"class":74},[68,1094,549],{"class":229},[68,1096,226],{"class":74},[68,1098,544],{"class":229},[68,1100,1101],{"class":74},"string",[68,1103,237],{"class":229},[68,1105,280],{"class":233},[68,1107,237],{"class":229},[68,1109,1110],{"class":233},"double",[68,1112,558],{"class":229},[68,1114,1115],{"class":74},"get_student_info",[68,1117,681],{"class":229},[68,1119,1120],{"class":70,"line":589},[68,1121,586],{"class":229},[68,1123,1124,1126,1128,1131,1133,1136,1138,1141,1143],{"class":70,"line":606},[68,1125,643],{"class":233},[68,1127,249],{"class":229},[68,1129,1130],{"class":78},"\"Alice\"",[68,1132,237],{"class":229},[68,1134,1135],{"class":82},"20",[68,1137,237],{"class":229},[68,1139,1140],{"class":82},"3.8",[68,1142,628],{"class":229},[68,1144,1145],{"class":273},"  \u002F\u002F 姓名、年龄、GPA\n",[68,1147,1148],{"class":70,"line":612},[68,1149,665],{"class":229},[68,1151,1152],{"class":70,"line":634},[68,1153,267],{"emptyLinePlaceholder":266},[68,1155,1156,1158,1160],{"class":70,"line":640},[68,1157,280],{"class":233},[68,1159,678],{"class":74},[68,1161,681],{"class":229},[68,1163,1164],{"class":70,"line":662},[68,1165,586],{"class":229},[68,1167,1168],{"class":70,"line":668},[68,1169,1170],{"class":273},"    \u002F\u002F C++17 之前：先保存完整的 tuple。\n",[68,1172,1173,1175,1177,1180,1182,1185],{"class":70,"line":673},[68,1174,698],{"class":233},[68,1176,866],{"class":233},[68,1178,1179],{"class":229}," old_info ",[68,1181,246],{"class":233},[68,1183,1184],{"class":74}," get_student_info",[68,1186,1187],{"class":229},"();\n",[68,1189,1190],{"class":70,"line":684},[68,1191,267],{"emptyLinePlaceholder":266},[68,1193,1194],{"class":70,"line":689},[68,1195,1196],{"class":273},"    \u002F\u002F std::get\u003C下标>() 按位置访问 tuple，编号从 0 开始。\n",[68,1198,1199,1201,1203,1206,1209,1212,1214,1216,1218,1221,1223,1225],{"class":70,"line":695},[68,1200,698],{"class":233},[68,1202,701],{"class":74},[68,1204,1205],{"class":229},"::string",[68,1207,1208],{"class":233},"&",[68,1210,1211],{"class":229}," old_name ",[68,1213,246],{"class":233},[68,1215,701],{"class":74},[68,1217,544],{"class":229},[68,1219,1220],{"class":74},"get",[68,1222,549],{"class":229},[68,1224,620],{"class":82},[68,1226,1227],{"class":229},">(old_info);\n",[68,1229,1230,1232,1234,1237,1239,1241,1243,1245,1247,1250],{"class":70,"line":733},[68,1231,698],{"class":233},[68,1233,749],{"class":233},[68,1235,1236],{"class":229}," old_age ",[68,1238,246],{"class":233},[68,1240,701],{"class":74},[68,1242,544],{"class":229},[68,1244,1220],{"class":74},[68,1246,549],{"class":229},[68,1248,1249],{"class":82},"1",[68,1251,1227],{"class":229},[68,1253,1254,1256,1259,1262,1264,1266,1268,1270,1272,1274],{"class":70,"line":738},[68,1255,698],{"class":233},[68,1257,1258],{"class":233}," double",[68,1260,1261],{"class":229}," old_gpa ",[68,1263,246],{"class":233},[68,1265,701],{"class":74},[68,1267,544],{"class":229},[68,1269,1220],{"class":74},[68,1271,549],{"class":229},[68,1273,727],{"class":82},[68,1275,1227],{"class":229},[68,1277,1278],{"class":70,"line":744},[68,1279,267],{"emptyLinePlaceholder":266},[68,1281,1282,1285,1287,1289],{"class":70,"line":760},[68,1283,1284],{"class":74},"    std",[68,1286,811],{"class":229},[68,1288,814],{"class":233},[68,1290,1291],{"class":78}," \"before C++17 tuple: \"\n",[68,1293,1294,1297,1299,1301,1304,1306,1308,1310,1312,1314,1316,1318,1320,1322,1324],{"class":70,"line":765},[68,1295,1296],{"class":233},"              \u003C\u003C",[68,1298,1211],{"class":229},[68,1300,814],{"class":233},[68,1302,1303],{"class":78}," \", \"",[68,1305,820],{"class":233},[68,1307,1236],{"class":229},[68,1309,814],{"class":233},[68,1311,1303],{"class":78},[68,1313,820],{"class":233},[68,1315,1261],{"class":229},[68,1317,814],{"class":233},[68,1319,827],{"class":78},[68,1321,830],{"class":82},[68,1323,833],{"class":78},[68,1325,836],{"class":229},[68,1327,1328],{"class":70,"line":771},[68,1329,267],{"emptyLinePlaceholder":266},[68,1331,1332],{"class":70,"line":787},[68,1333,1334],{"class":273},"    \u002F\u002F C++17：结构化绑定按 tuple 中元素的顺序声明三个变量。\n",[68,1336,1337],{"class":70,"line":792},[68,1338,1339],{"class":273},"    \u002F\u002F const auto& 表示只读引用，可以避免复制 tuple 中的 string。\n",[68,1341,1342,1344,1346,1349,1351],{"class":70,"line":800},[68,1343,698],{"class":233},[68,1345,418],{"class":233},[68,1347,1348],{"class":229}," [name, age, gpa] ",[68,1350,246],{"class":233},[68,1352,1353],{"class":229}," old_info;\n",[68,1355,1356,1358,1360,1362],{"class":70,"line":805},[68,1357,1284],{"class":74},[68,1359,811],{"class":229},[68,1361,814],{"class":233},[68,1363,1364],{"class":78}," \"C++17 tuple: \"\n",[68,1366,1367,1369,1372,1374,1376,1378,1381,1383,1385,1387,1390,1392,1394,1396,1398],{"class":70,"line":839},[68,1368,1296],{"class":233},[68,1370,1371],{"class":229}," name ",[68,1373,814],{"class":233},[68,1375,1303],{"class":78},[68,1377,820],{"class":233},[68,1379,1380],{"class":229}," age ",[68,1382,814],{"class":233},[68,1384,1303],{"class":78},[68,1386,820],{"class":233},[68,1388,1389],{"class":229}," gpa ",[68,1391,814],{"class":233},[68,1393,827],{"class":78},[68,1395,830],{"class":82},[68,1397,833],{"class":78},[68,1399,836],{"class":229},[68,1401,1402],{"class":70,"line":844},[68,1403,267],{"emptyLinePlaceholder":266},[68,1405,1406,1409,1412,1414,1416,1418,1420,1422,1424,1427],{"class":70,"line":849},[68,1407,1408],{"class":233},"    int",[68,1410,1411],{"class":229}," numbers[] ",[68,1413,246],{"class":233},[68,1415,249],{"class":229},[68,1417,722],{"class":82},[68,1419,237],{"class":229},[68,1421,1135],{"class":82},[68,1423,237],{"class":229},[68,1425,1426],{"class":82},"30",[68,1428,260],{"class":229},[68,1430,1431],{"class":70,"line":855},[68,1432,267],{"emptyLinePlaceholder":266},[68,1434,1435],{"class":70,"line":861},[68,1436,1437],{"class":273},"    \u002F\u002F C++17 之前：使用下标逐个访问数组元素。\n",[68,1439,1440,1442,1444,1446],{"class":70,"line":885},[68,1441,1284],{"class":74},[68,1443,811],{"class":229},[68,1445,814],{"class":233},[68,1447,1448],{"class":78}," \"before C++17 array: \"\n",[68,1450,1451,1453,1456,1458,1461,1463,1465,1467,1469,1471,1473,1475,1477,1479,1481,1483,1485,1487,1489,1491,1493],{"class":70,"line":893},[68,1452,1296],{"class":233},[68,1454,1455],{"class":229}," numbers[",[68,1457,620],{"class":82},[68,1459,1460],{"class":229},"] ",[68,1462,814],{"class":233},[68,1464,1303],{"class":78},[68,1466,820],{"class":233},[68,1468,1455],{"class":229},[68,1470,1249],{"class":82},[68,1472,1460],{"class":229},[68,1474,814],{"class":233},[68,1476,1303],{"class":78},[68,1478,820],{"class":233},[68,1480,1455],{"class":229},[68,1482,727],{"class":82},[68,1484,1460],{"class":229},[68,1486,814],{"class":233},[68,1488,827],{"class":78},[68,1490,830],{"class":82},[68,1492,833],{"class":78},[68,1494,836],{"class":229},[68,1496,1497],{"class":70,"line":898},[68,1498,267],{"emptyLinePlaceholder":266},[68,1500,1501],{"class":70,"line":924},[68,1502,1503],{"class":273},"    \u002F\u002F C++17：数组有三个元素，所以左侧也必须声明三个名字。\n",[68,1505,1506],{"class":70,"line":929},[68,1507,1508],{"class":273},"    \u002F\u002F 这里没有写 &，因此 a、b、c 是三个元素的副本。\n",[68,1510,1511,1513,1515,1518,1520],{"class":70,"line":934},[68,1512,698],{"class":233},[68,1514,866],{"class":233},[68,1516,1517],{"class":229}," [a, b, c] ",[68,1519,246],{"class":233},[68,1521,1522],{"class":229}," numbers;\n",[68,1524,1525,1527,1529,1531,1534,1536,1539,1541,1543,1545,1548,1550,1552,1554,1557,1559,1561,1563,1565],{"class":70,"line":940},[68,1526,1284],{"class":74},[68,1528,811],{"class":229},[68,1530,814],{"class":233},[68,1532,1533],{"class":78}," \"C++17 array: \"",[68,1535,820],{"class":233},[68,1537,1538],{"class":229}," a ",[68,1540,814],{"class":233},[68,1542,1303],{"class":78},[68,1544,820],{"class":233},[68,1546,1547],{"class":229}," b ",[68,1549,814],{"class":233},[68,1551,1303],{"class":78},[68,1553,820],{"class":233},[68,1555,1556],{"class":229}," c ",[68,1558,814],{"class":233},[68,1560,827],{"class":78},[68,1562,830],{"class":82},[68,1564,833],{"class":78},[68,1566,836],{"class":229},[68,1568,1569],{"class":70,"line":964},[68,1570,267],{"emptyLinePlaceholder":266},[68,1572,1573,1575,1577],{"class":70,"line":969},[68,1574,643],{"class":233},[68,1576,601],{"class":82},[68,1578,836],{"class":229},[68,1580,1581],{"class":70,"line":975},[68,1582,665],{"class":229},[14,1584,1585,214],{},[41,1586,1038],{},[59,1588,1591],{"className":1589,"code":1590,"language":1044},[1042],"before C++17 tuple: Alice, 20, 3.8\nC++17 tuple: Alice, 20, 3.8\nbefore C++17 array: 10, 20, 30\nC++17 array: 10, 20, 30\n",[18,1592,1590],{"__ignoreMap":64},[502,1594,1596],{"id":1595},"示例-3结构体从成员访问到-c17-结构化绑定","示例 3：结构体——从成员访问到 C++17 结构化绑定",[59,1598,1600],{"className":217,"code":1599,"language":219,"meta":64,"style":64},"#include \u003Ciostream>\n#include \u003Cstring>\n\nstruct Point\n{\n    double x;\n    double y;\n    double z;\n};\n\nPoint midpoint(const Point& p1, const Point& p2)\n{\n    return {\n        (p1.x + p2.x) \u002F 2.0,\n        (p1.y + p2.y) \u002F 2.0,\n        (p1.z + p2.z) \u002F 2.0\n    };\n}\n\nint main()\n{\n    Point p1{1.0, 2.0, 3.0};\n    Point p2{5.0, 6.0, 7.0};\n\n    \u002F\u002F C++17 之前：先接收完整的结构体，再通过成员名访问数据。\n    const Point old_middle = midpoint(p1, p2);\n    std::cout \u003C\u003C \"before C++17 midpoint: (\"\n              \u003C\u003C old_middle.x \u003C\u003C \", \"\n              \u003C\u003C old_middle.y \u003C\u003C \", \"\n              \u003C\u003C old_middle.z \u003C\u003C \")\\n\";\n\n    \u002F\u002F C++17：结构化绑定按成员的声明顺序解包结构体。\n    \u002F\u002F x 对应 Point::x，y 对应 Point::y，z 对应 Point::z。\n    const auto [x, y, z] = midpoint(p1, p2);\n    std::cout \u003C\u003C \"C++17 midpoint: (\" \u003C\u003C x \u003C\u003C \", \" \u003C\u003C y \u003C\u003C \", \" \u003C\u003C z \u003C\u003C \")\\n\";\n\n    \u002F\u002F C++17：也可以直接解包临时创建的结构体对象。\n    const auto [a, b, c] = Point{10.0, 20.0, 30.0};\n    std::cout \u003C\u003C \"C++17 temporary point: (\"\n              \u003C\u003C a \u003C\u003C \", \" \u003C\u003C b \u003C\u003C \", \" \u003C\u003C c \u003C\u003C \")\\n\";\n\n    return 0;\n}\n",[18,1601,1602,1608,1614,1618,1626,1630,1638,1645,1652,1656,1660,1693,1697,1704,1723,1739,1754,1759,1763,1767,1775,1779,1799,1819,1823,1828,1842,1853,1865,1876,1894,1898,1903,1908,1923,1967,1971,1976,2004,2015,2047,2051,2059],{"__ignoreMap":64},[68,1603,1604,1606],{"class":70,"line":71},[68,1605,515],{"class":233},[68,1607,518],{"class":78},[68,1609,1610,1612],{"class":70,"line":263},[68,1611,515],{"class":233},[68,1613,1068],{"class":78},[68,1615,1616],{"class":70,"line":270},[68,1617,267],{"emptyLinePlaceholder":266},[68,1619,1620,1623],{"class":70,"line":277},[68,1621,1622],{"class":233},"struct",[68,1624,1625],{"class":74}," Point\n",[68,1627,1628],{"class":70,"line":291},[68,1629,586],{"class":229},[68,1631,1632,1635],{"class":70,"line":583},[68,1633,1634],{"class":233},"    double",[68,1636,1637],{"class":229}," x;\n",[68,1639,1640,1642],{"class":70,"line":589},[68,1641,1634],{"class":233},[68,1643,1644],{"class":229}," y;\n",[68,1646,1647,1649],{"class":70,"line":606},[68,1648,1634],{"class":233},[68,1650,1651],{"class":229}," z;\n",[68,1653,1654],{"class":70,"line":612},[68,1655,260],{"class":229},[68,1657,1658],{"class":70,"line":634},[68,1659,267],{"emptyLinePlaceholder":266},[68,1661,1662,1665,1668,1670,1672,1675,1677,1680,1682,1684,1686,1688,1691],{"class":70,"line":640},[68,1663,1664],{"class":74},"Point",[68,1666,1667],{"class":74}," midpoint",[68,1669,564],{"class":229},[68,1671,415],{"class":233},[68,1673,1674],{"class":74}," Point",[68,1676,1208],{"class":233},[68,1678,1679],{"class":569}," p1",[68,1681,237],{"class":229},[68,1683,415],{"class":233},[68,1685,1674],{"class":74},[68,1687,1208],{"class":233},[68,1689,1690],{"class":569}," p2",[68,1692,580],{"class":229},[68,1694,1695],{"class":70,"line":662},[68,1696,586],{"class":229},[68,1698,1699,1701],{"class":70,"line":668},[68,1700,643],{"class":233},[68,1702,1703],{"class":229}," {\n",[68,1705,1706,1709,1712,1715,1717,1720],{"class":70,"line":673},[68,1707,1708],{"class":229},"        (p1.x ",[68,1710,1711],{"class":233},"+",[68,1713,1714],{"class":229}," p2.x) ",[68,1716,649],{"class":233},[68,1718,1719],{"class":82}," 2.0",[68,1721,1722],{"class":229},",\n",[68,1724,1725,1728,1730,1733,1735,1737],{"class":70,"line":684},[68,1726,1727],{"class":229},"        (p1.y ",[68,1729,1711],{"class":233},[68,1731,1732],{"class":229}," p2.y) ",[68,1734,649],{"class":233},[68,1736,1719],{"class":82},[68,1738,1722],{"class":229},[68,1740,1741,1744,1746,1749,1751],{"class":70,"line":689},[68,1742,1743],{"class":229},"        (p1.z ",[68,1745,1711],{"class":233},[68,1747,1748],{"class":229}," p2.z) ",[68,1750,649],{"class":233},[68,1752,1753],{"class":82}," 2.0\n",[68,1755,1756],{"class":70,"line":695},[68,1757,1758],{"class":229},"    };\n",[68,1760,1761],{"class":70,"line":733},[68,1762,665],{"class":229},[68,1764,1765],{"class":70,"line":738},[68,1766,267],{"emptyLinePlaceholder":266},[68,1768,1769,1771,1773],{"class":70,"line":744},[68,1770,280],{"class":233},[68,1772,678],{"class":74},[68,1774,681],{"class":229},[68,1776,1777],{"class":70,"line":760},[68,1778,586],{"class":229},[68,1780,1781,1784,1787,1789,1792,1794,1797],{"class":70,"line":765},[68,1782,1783],{"class":229},"    Point p1{",[68,1785,1786],{"class":82},"1.0",[68,1788,237],{"class":229},[68,1790,1791],{"class":82},"2.0",[68,1793,237],{"class":229},[68,1795,1796],{"class":82},"3.0",[68,1798,260],{"class":229},[68,1800,1801,1804,1807,1809,1812,1814,1817],{"class":70,"line":771},[68,1802,1803],{"class":229},"    Point p2{",[68,1805,1806],{"class":82},"5.0",[68,1808,237],{"class":229},[68,1810,1811],{"class":82},"6.0",[68,1813,237],{"class":229},[68,1815,1816],{"class":82},"7.0",[68,1818,260],{"class":229},[68,1820,1821],{"class":70,"line":787},[68,1822,267],{"emptyLinePlaceholder":266},[68,1824,1825],{"class":70,"line":792},[68,1826,1827],{"class":273},"    \u002F\u002F C++17 之前：先接收完整的结构体，再通过成员名访问数据。\n",[68,1829,1830,1832,1835,1837,1839],{"class":70,"line":800},[68,1831,698],{"class":233},[68,1833,1834],{"class":229}," Point old_middle ",[68,1836,246],{"class":233},[68,1838,1667],{"class":74},[68,1840,1841],{"class":229},"(p1, p2);\n",[68,1843,1844,1846,1848,1850],{"class":70,"line":805},[68,1845,1284],{"class":74},[68,1847,811],{"class":229},[68,1849,814],{"class":233},[68,1851,1852],{"class":78}," \"before C++17 midpoint: (\"\n",[68,1854,1855,1857,1860,1862],{"class":70,"line":839},[68,1856,1296],{"class":233},[68,1858,1859],{"class":229}," old_middle.x ",[68,1861,814],{"class":233},[68,1863,1864],{"class":78}," \", \"\n",[68,1866,1867,1869,1872,1874],{"class":70,"line":844},[68,1868,1296],{"class":233},[68,1870,1871],{"class":229}," old_middle.y ",[68,1873,814],{"class":233},[68,1875,1864],{"class":78},[68,1877,1878,1880,1883,1885,1888,1890,1892],{"class":70,"line":849},[68,1879,1296],{"class":233},[68,1881,1882],{"class":229}," old_middle.z ",[68,1884,814],{"class":233},[68,1886,1887],{"class":78}," \")",[68,1889,830],{"class":82},[68,1891,833],{"class":78},[68,1893,836],{"class":229},[68,1895,1896],{"class":70,"line":855},[68,1897,267],{"emptyLinePlaceholder":266},[68,1899,1900],{"class":70,"line":861},[68,1901,1902],{"class":273},"    \u002F\u002F C++17：结构化绑定按成员的声明顺序解包结构体。\n",[68,1904,1905],{"class":70,"line":885},[68,1906,1907],{"class":273},"    \u002F\u002F x 对应 Point::x，y 对应 Point::y，z 对应 Point::z。\n",[68,1909,1910,1912,1914,1917,1919,1921],{"class":70,"line":893},[68,1911,698],{"class":233},[68,1913,866],{"class":233},[68,1915,1916],{"class":229}," [x, y, z] ",[68,1918,246],{"class":233},[68,1920,1667],{"class":74},[68,1922,1841],{"class":229},[68,1924,1925,1927,1929,1931,1934,1936,1939,1941,1943,1945,1948,1950,1952,1954,1957,1959,1961,1963,1965],{"class":70,"line":898},[68,1926,1284],{"class":74},[68,1928,811],{"class":229},[68,1930,814],{"class":233},[68,1932,1933],{"class":78}," \"C++17 midpoint: (\"",[68,1935,820],{"class":233},[68,1937,1938],{"class":229}," x ",[68,1940,814],{"class":233},[68,1942,1303],{"class":78},[68,1944,820],{"class":233},[68,1946,1947],{"class":229}," y ",[68,1949,814],{"class":233},[68,1951,1303],{"class":78},[68,1953,820],{"class":233},[68,1955,1956],{"class":229}," z ",[68,1958,814],{"class":233},[68,1960,1887],{"class":78},[68,1962,830],{"class":82},[68,1964,833],{"class":78},[68,1966,836],{"class":229},[68,1968,1969],{"class":70,"line":924},[68,1970,267],{"emptyLinePlaceholder":266},[68,1972,1973],{"class":70,"line":929},[68,1974,1975],{"class":273},"    \u002F\u002F C++17：也可以直接解包临时创建的结构体对象。\n",[68,1977,1978,1980,1982,1984,1986,1989,1992,1994,1997,1999,2002],{"class":70,"line":934},[68,1979,698],{"class":233},[68,1981,866],{"class":233},[68,1983,1517],{"class":229},[68,1985,246],{"class":233},[68,1987,1988],{"class":229}," Point{",[68,1990,1991],{"class":82},"10.0",[68,1993,237],{"class":229},[68,1995,1996],{"class":82},"20.0",[68,1998,237],{"class":229},[68,2000,2001],{"class":82},"30.0",[68,2003,260],{"class":229},[68,2005,2006,2008,2010,2012],{"class":70,"line":940},[68,2007,1284],{"class":74},[68,2009,811],{"class":229},[68,2011,814],{"class":233},[68,2013,2014],{"class":78}," \"C++17 temporary point: (\"\n",[68,2016,2017,2019,2021,2023,2025,2027,2029,2031,2033,2035,2037,2039,2041,2043,2045],{"class":70,"line":964},[68,2018,1296],{"class":233},[68,2020,1538],{"class":229},[68,2022,814],{"class":233},[68,2024,1303],{"class":78},[68,2026,820],{"class":233},[68,2028,1547],{"class":229},[68,2030,814],{"class":233},[68,2032,1303],{"class":78},[68,2034,820],{"class":233},[68,2036,1556],{"class":229},[68,2038,814],{"class":233},[68,2040,1887],{"class":78},[68,2042,830],{"class":82},[68,2044,833],{"class":78},[68,2046,836],{"class":229},[68,2048,2049],{"class":70,"line":969},[68,2050,267],{"emptyLinePlaceholder":266},[68,2052,2053,2055,2057],{"class":70,"line":975},[68,2054,643],{"class":233},[68,2056,601],{"class":82},[68,2058,836],{"class":229},[68,2060,2061],{"class":70,"line":989},[68,2062,665],{"class":229},[14,2064,2065,214],{},[41,2066,1038],{},[59,2068,2071],{"className":2069,"code":2070,"language":1044},[1042],"before C++17 midpoint: (3, 4, 5)\nC++17 midpoint: (3, 4, 5)\nC++17 temporary point: (10, 20, 30)\n",[18,2072,2070],{"__ignoreMap":64},[502,2074,2076],{"id":2075},"示例-4map对比-c17-前后的插入结果和遍历写法","示例 4：map——对比 C++17 前后的插入结果和遍历写法",[59,2078,2080],{"className":217,"code":2079,"language":219,"meta":64,"style":64},"#include \u003Ciostream>\n#include \u003Cmap>\n#include \u003Cstring>\n\nint main()\n{\n    std::map\u003Cstd::string, int> scores;\n\n    \u002F\u002F map::insert 返回一个 pair\u003Citerator, bool>：\n    \u002F\u002F first 是指向相应元素的迭代器，second 表示是否插入成功。\n\n    \u002F\u002F C++17 之前：先接收完整的 pair，再分别读取 first 和 second。\n    const auto old_insert_result = scores.insert({\"Alice\", 85});\n    const auto old_it = old_insert_result.first;\n    const bool old_inserted = old_insert_result.second;\n\n    if (old_inserted)\n    {\n        \u002F\u002F 迭代器的 second 是 map 元素的 value，这里是 Alice 的分数。\n        std::cout \u003C\u003C \"before C++17 insert: Alice inserted, score: \"\n                  \u003C\u003C old_it->second \u003C\u003C \"\\n\";\n    }\n\n    \u002F\u002F C++17：直接把 insert 返回的 pair 解包为迭代器和成功标志。\n    \u002F\u002F 由于 Alice 已经存在，这次重复插入会失败。\n    const auto [it, inserted] = scores.insert({\"Alice\", 100});\n    if (!inserted)\n    {\n        std::cout \u003C\u003C \"C++17 insert: Alice already exists, score: \"\n                  \u003C\u003C it->second \u003C\u003C \"\\n\";\n    }\n\n    \u002F\u002F 添加另外两个元素，供下面演示遍历使用。\n    scores.insert({\"Bob\", 92});\n    scores.insert({\"Charlie\", 78});\n\n    \u002F\u002F C++17 之前：范围 for 每次取得一个 pair。\n    \u002F\u002F pair.first 是 map 的 key，pair.second 是 map 的 value。\n    std::cout \u003C\u003C \"\\nbefore C++17 traversal:\\n\";\n    for (const auto& pair : scores)\n    {\n        std::cout \u003C\u003C \"  \" \u003C\u003C pair.first \u003C\u003C \": \" \u003C\u003C pair.second \u003C\u003C \"\\n\";\n    }\n\n    \u002F\u002F C++17：在范围 for 中使用结构化绑定，直接命名 key 和 value。\n    \u002F\u002F const auto& 表示只读引用，既不复制元素，也不会修改 map。\n    std::cout \u003C\u003C \"C++17 traversal:\\n\";\n    for (const auto& [name, score] : scores)\n    {\n        std::cout \u003C\u003C \"  \" \u003C\u003C name \u003C\u003C \": \" \u003C\u003C score \u003C\u003C \"\\n\";\n    }\n\n    return 0;\n}\n",[18,2081,2082,2088,2095,2101,2105,2113,2117,2137,2141,2146,2151,2155,2160,2190,2204,2218,2222,2229,2233,2238,2249,2267,2271,2275,2280,2285,2311,2322,2326,2337,2354,2358,2362,2367,2386,2404,2408,2413,2418,2439,2453,2457,2493,2497,2501,2506,2511,2528,2541,2546,2580,2585,2590,2599],{"__ignoreMap":64},[68,2083,2084,2086],{"class":70,"line":71},[68,2085,515],{"class":233},[68,2087,518],{"class":78},[68,2089,2090,2092],{"class":70,"line":263},[68,2091,515],{"class":233},[68,2093,2094],{"class":78}," \u003Cmap>\n",[68,2096,2097,2099],{"class":70,"line":270},[68,2098,515],{"class":233},[68,2100,1068],{"class":78},[68,2102,2103],{"class":70,"line":277},[68,2104,267],{"emptyLinePlaceholder":266},[68,2106,2107,2109,2111],{"class":70,"line":291},[68,2108,280],{"class":233},[68,2110,678],{"class":74},[68,2112,681],{"class":229},[68,2114,2115],{"class":70,"line":583},[68,2116,586],{"class":229},[68,2118,2119,2121,2124,2126,2128,2131,2134],{"class":70,"line":589},[68,2120,1284],{"class":74},[68,2122,2123],{"class":229},"::map",[68,2125,549],{"class":233},[68,2127,226],{"class":74},[68,2129,2130],{"class":229},"::string, ",[68,2132,2133],{"class":233},"int>",[68,2135,2136],{"class":229}," scores;\n",[68,2138,2139],{"class":70,"line":606},[68,2140,267],{"emptyLinePlaceholder":266},[68,2142,2143],{"class":70,"line":612},[68,2144,2145],{"class":273},"    \u002F\u002F map::insert 返回一个 pair\u003Citerator, bool>：\n",[68,2147,2148],{"class":70,"line":634},[68,2149,2150],{"class":273},"    \u002F\u002F first 是指向相应元素的迭代器，second 表示是否插入成功。\n",[68,2152,2153],{"class":70,"line":640},[68,2154,267],{"emptyLinePlaceholder":266},[68,2156,2157],{"class":70,"line":662},[68,2158,2159],{"class":273},"    \u002F\u002F C++17 之前：先接收完整的 pair，再分别读取 first 和 second。\n",[68,2161,2162,2164,2166,2169,2171,2174,2177,2180,2182,2184,2187],{"class":70,"line":668},[68,2163,698],{"class":233},[68,2165,866],{"class":233},[68,2167,2168],{"class":229}," old_insert_result ",[68,2170,246],{"class":233},[68,2172,2173],{"class":229}," scores.",[68,2175,2176],{"class":74},"insert",[68,2178,2179],{"class":229},"({",[68,2181,1130],{"class":78},[68,2183,237],{"class":229},[68,2185,2186],{"class":82},"85",[68,2188,2189],{"class":229},"});\n",[68,2191,2192,2194,2196,2199,2201],{"class":70,"line":673},[68,2193,698],{"class":233},[68,2195,866],{"class":233},[68,2197,2198],{"class":229}," old_it ",[68,2200,246],{"class":233},[68,2202,2203],{"class":229}," old_insert_result.first;\n",[68,2205,2206,2208,2210,2213,2215],{"class":70,"line":684},[68,2207,698],{"class":233},[68,2209,776],{"class":233},[68,2211,2212],{"class":229}," old_inserted ",[68,2214,246],{"class":233},[68,2216,2217],{"class":229}," old_insert_result.second;\n",[68,2219,2220],{"class":70,"line":689},[68,2221,267],{"emptyLinePlaceholder":266},[68,2223,2224,2226],{"class":70,"line":695},[68,2225,592],{"class":233},[68,2227,2228],{"class":229}," (old_inserted)\n",[68,2230,2231],{"class":70,"line":733},[68,2232,609],{"class":229},[68,2234,2235],{"class":70,"line":738},[68,2236,2237],{"class":273},"        \u002F\u002F 迭代器的 second 是 map 元素的 value，这里是 Alice 的分数。\n",[68,2239,2240,2242,2244,2246],{"class":70,"line":744},[68,2241,808],{"class":74},[68,2243,811],{"class":229},[68,2245,814],{"class":233},[68,2247,2248],{"class":78}," \"before C++17 insert: Alice inserted, score: \"\n",[68,2250,2251,2254,2257,2259,2261,2263,2265],{"class":70,"line":760},[68,2252,2253],{"class":233},"                  \u003C\u003C",[68,2255,2256],{"class":229}," old_it->second ",[68,2258,814],{"class":233},[68,2260,827],{"class":78},[68,2262,830],{"class":82},[68,2264,833],{"class":78},[68,2266,836],{"class":229},[68,2268,2269],{"class":70,"line":765},[68,2270,637],{"class":229},[68,2272,2273],{"class":70,"line":771},[68,2274,267],{"emptyLinePlaceholder":266},[68,2276,2277],{"class":70,"line":787},[68,2278,2279],{"class":273},"    \u002F\u002F C++17：直接把 insert 返回的 pair 解包为迭代器和成功标志。\n",[68,2281,2282],{"class":70,"line":792},[68,2283,2284],{"class":273},"    \u002F\u002F 由于 Alice 已经存在，这次重复插入会失败。\n",[68,2286,2287,2289,2291,2294,2296,2298,2300,2302,2304,2306,2309],{"class":70,"line":800},[68,2288,698],{"class":233},[68,2290,866],{"class":233},[68,2292,2293],{"class":229}," [it, inserted] ",[68,2295,246],{"class":233},[68,2297,2173],{"class":229},[68,2299,2176],{"class":74},[68,2301,2179],{"class":229},[68,2303,1130],{"class":78},[68,2305,237],{"class":229},[68,2307,2308],{"class":82},"100",[68,2310,2189],{"class":229},[68,2312,2313,2315,2317,2319],{"class":70,"line":805},[68,2314,592],{"class":233},[68,2316,980],{"class":229},[68,2318,983],{"class":233},[68,2320,2321],{"class":229},"inserted)\n",[68,2323,2324],{"class":70,"line":839},[68,2325,609],{"class":229},[68,2327,2328,2330,2332,2334],{"class":70,"line":844},[68,2329,808],{"class":74},[68,2331,811],{"class":229},[68,2333,814],{"class":233},[68,2335,2336],{"class":78}," \"C++17 insert: Alice already exists, score: \"\n",[68,2338,2339,2341,2344,2346,2348,2350,2352],{"class":70,"line":849},[68,2340,2253],{"class":233},[68,2342,2343],{"class":229}," it->second ",[68,2345,814],{"class":233},[68,2347,827],{"class":78},[68,2349,830],{"class":82},[68,2351,833],{"class":78},[68,2353,836],{"class":229},[68,2355,2356],{"class":70,"line":855},[68,2357,637],{"class":229},[68,2359,2360],{"class":70,"line":861},[68,2361,267],{"emptyLinePlaceholder":266},[68,2363,2364],{"class":70,"line":885},[68,2365,2366],{"class":273},"    \u002F\u002F 添加另外两个元素，供下面演示遍历使用。\n",[68,2368,2369,2372,2374,2376,2379,2381,2384],{"class":70,"line":893},[68,2370,2371],{"class":229},"    scores.",[68,2373,2176],{"class":74},[68,2375,2179],{"class":229},[68,2377,2378],{"class":78},"\"Bob\"",[68,2380,237],{"class":229},[68,2382,2383],{"class":82},"92",[68,2385,2189],{"class":229},[68,2387,2388,2390,2392,2394,2397,2399,2402],{"class":70,"line":898},[68,2389,2371],{"class":229},[68,2391,2176],{"class":74},[68,2393,2179],{"class":229},[68,2395,2396],{"class":78},"\"Charlie\"",[68,2398,237],{"class":229},[68,2400,2401],{"class":82},"78",[68,2403,2189],{"class":229},[68,2405,2406],{"class":70,"line":924},[68,2407,267],{"emptyLinePlaceholder":266},[68,2409,2410],{"class":70,"line":929},[68,2411,2412],{"class":273},"    \u002F\u002F C++17 之前：范围 for 每次取得一个 pair。\n",[68,2414,2415],{"class":70,"line":934},[68,2416,2417],{"class":273},"    \u002F\u002F pair.first 是 map 的 key，pair.second 是 map 的 value。\n",[68,2419,2420,2422,2424,2426,2428,2430,2433,2435,2437],{"class":70,"line":940},[68,2421,1284],{"class":74},[68,2423,811],{"class":229},[68,2425,814],{"class":233},[68,2427,827],{"class":78},[68,2429,830],{"class":82},[68,2431,2432],{"class":78},"before C++17 traversal:",[68,2434,830],{"class":82},[68,2436,833],{"class":78},[68,2438,836],{"class":229},[68,2440,2441,2444,2446,2448,2450],{"class":70,"line":964},[68,2442,2443],{"class":233},"    for",[68,2445,980],{"class":229},[68,2447,415],{"class":233},[68,2449,418],{"class":233},[68,2451,2452],{"class":229}," pair : scores)\n",[68,2454,2455],{"class":70,"line":969},[68,2456,609],{"class":229},[68,2458,2459,2461,2463,2465,2468,2470,2473,2475,2478,2480,2483,2485,2487,2489,2491],{"class":70,"line":975},[68,2460,808],{"class":74},[68,2462,811],{"class":229},[68,2464,814],{"class":233},[68,2466,2467],{"class":78}," \"  \"",[68,2469,820],{"class":233},[68,2471,2472],{"class":229}," pair.first ",[68,2474,814],{"class":233},[68,2476,2477],{"class":78}," \": \"",[68,2479,820],{"class":233},[68,2481,2482],{"class":229}," pair.second ",[68,2484,814],{"class":233},[68,2486,827],{"class":78},[68,2488,830],{"class":82},[68,2490,833],{"class":78},[68,2492,836],{"class":229},[68,2494,2495],{"class":70,"line":989},[68,2496,637],{"class":229},[68,2498,2499],{"class":70,"line":994},[68,2500,267],{"emptyLinePlaceholder":266},[68,2502,2503],{"class":70,"line":1012},[68,2504,2505],{"class":273},"    \u002F\u002F C++17：在范围 for 中使用结构化绑定，直接命名 key 和 value。\n",[68,2507,2508],{"class":70,"line":1017},[68,2509,2510],{"class":273},"    \u002F\u002F const auto& 表示只读引用，既不复制元素，也不会修改 map。\n",[68,2512,2513,2515,2517,2519,2522,2524,2526],{"class":70,"line":1022},[68,2514,1284],{"class":74},[68,2516,811],{"class":229},[68,2518,814],{"class":233},[68,2520,2521],{"class":78}," \"C++17 traversal:",[68,2523,830],{"class":82},[68,2525,833],{"class":78},[68,2527,836],{"class":229},[68,2529,2530,2532,2534,2536,2538],{"class":70,"line":1031},[68,2531,2443],{"class":233},[68,2533,980],{"class":229},[68,2535,415],{"class":233},[68,2537,418],{"class":233},[68,2539,2540],{"class":229}," [name, score] : scores)\n",[68,2542,2544],{"class":70,"line":2543},49,[68,2545,609],{"class":229},[68,2547,2549,2551,2553,2555,2557,2559,2561,2563,2565,2567,2570,2572,2574,2576,2578],{"class":70,"line":2548},50,[68,2550,808],{"class":74},[68,2552,811],{"class":229},[68,2554,814],{"class":233},[68,2556,2467],{"class":78},[68,2558,820],{"class":233},[68,2560,1371],{"class":229},[68,2562,814],{"class":233},[68,2564,2477],{"class":78},[68,2566,820],{"class":233},[68,2568,2569],{"class":229}," score ",[68,2571,814],{"class":233},[68,2573,827],{"class":78},[68,2575,830],{"class":82},[68,2577,833],{"class":78},[68,2579,836],{"class":229},[68,2581,2583],{"class":70,"line":2582},51,[68,2584,637],{"class":229},[68,2586,2588],{"class":70,"line":2587},52,[68,2589,267],{"emptyLinePlaceholder":266},[68,2591,2593,2595,2597],{"class":70,"line":2592},53,[68,2594,643],{"class":233},[68,2596,601],{"class":82},[68,2598,836],{"class":229},[68,2600,2602],{"class":70,"line":2601},54,[68,2603,665],{"class":229},[14,2605,2606,214],{},[41,2607,1038],{},[59,2609,2612],{"className":2610,"code":2611,"language":1044},[1042],"before C++17 insert: Alice inserted, score: 85\nC++17 insert: Alice already exists, score: 85\n\nbefore C++17 traversal:\n  Alice: 85\n  Bob: 92\n  Charlie: 78\nC++17 traversal:\n  Alice: 85\n  Bob: 92\n  Charlie: 78\n",[18,2613,2611],{"__ignoreMap":64},[10,2615,1038],{"id":1038},[14,2617,2618],{},"见上方每个示例的\"运行结果\"。",[10,2620,2621],{"id":2621},"示例中的关键语法解释",[106,2623,2624,2643],{},[109,2625,2626],{},[112,2627,2628,2631,2634,2637,2640],{},[115,2629,2630],{"align":117},"示例",[115,2632,2633],{"align":117},"讲了什么",[115,2635,2636],{"align":117},"新出现的语法",[115,2638,2639],{"align":117},"为什么这样写",[115,2641,2642],{"align":117},"注意事项",[126,2644,2645,2668,2693,2714],{},[112,2646,2647,2650,2657,2662,2665],{},[131,2648,2649],{"align":117},"示例 1",[131,2651,2652,2653,2656],{"align":117},"从 ",[18,2654,2655],{},"pair.first\u002Fsecond"," 改为解包 pair",[131,2658,2659],{"align":117},[18,2660,2661],{},"auto [value, ok] = pair",[131,2663,2664],{"align":117},"C++17 可以一次声明两个有意义的变量名",[131,2666,2667],{"align":117},"变量名可以自定义，但对应顺序不能改变",[112,2669,2670,2673,2679,2687,2690],{},[131,2671,2672],{"align":117},"示例 2",[131,2674,2652,2675,2678],{"align":117},[18,2676,2677],{},"std::get\u003CN>()","、数组下标改为统一解包",[131,2680,2681,139,2684],{"align":117},[18,2682,2683],{},"auto [a,b,c] = tuple",[18,2685,2686],{},"auto [a,b,c] = array",[131,2688,2689],{"align":117},"C++17 对 tuple 和数组采用相似语法",[131,2691,2692],{"align":117},"变量个数必须和 tuple、数组的元素个数一致",[112,2694,2695,2698,2703,2708,2711],{},[131,2696,2697],{"align":117},"示例 3",[131,2699,2652,2700,2702],{"align":117},[18,2701,176],{}," 改为解包结构体",[131,2704,2705],{"align":117},[18,2706,2707],{},"auto [x,y,z] = struct_obj",[131,2709,2710],{"align":117},"C++17 按结构体成员声明顺序绑定",[131,2712,2713],{"align":117},"可绑定的成员需要满足访问条件，且顺序由结构体定义决定",[112,2715,2716,2719,2722,2730,2733],{},[131,2717,2718],{"align":117},"示例 4",[131,2720,2721],{"align":117},"对比 C++17 前后的 map 写法",[131,2723,2724,139,2727],{"align":117},[18,2725,2726],{},"auto [it, ok] = m.insert(...)",[18,2728,2729],{},"[name, score]",[131,2731,2732],{"align":117},"返回值和 map 元素都能直接取出并命名",[131,2734,2735,2737,2738],{"align":117},[18,2736,2176],{}," 返回 ",[18,2739,2740],{},"pair\u003Citerator, bool>",[10,2742,2744,210,2747,2750],{"id":2743},"auto-a-b-和-auto-a-b-的区别",[18,2745,2746],{},"auto [a, b]",[18,2748,2749],{},"auto& [a, b]"," 的区别",[14,2752,2753,2754,139,2756,2758,2759,2761],{},"下面讨论的 ",[18,2755,2746],{},[18,2757,2749],{}," 都是 C++17 结构化绑定语法。结构化绑定不写 ",[18,2760,1208],{}," 时通常会产生副本；遍历大对象或想修改原数据时，需要考虑使用引用。",[14,2763,2764,2765,2767,2768,214],{},"C++17 之前没有结构化绑定。修改 map 的 value 时，通常取得整个 ",[18,2766,364],{}," 的引用，再修改它的 ",[18,2769,213],{},[59,2771,2773],{"className":217,"code":2772,"language":219,"meta":64,"style":64},"\u002F\u002F C++17 之前：pair.second 是 map 元素的 value。\nfor (auto& pair : scores)\n{\n    pair.second += 10;\n}\n",[18,2774,2775,2780,2791,2795,2808],{"__ignoreMap":64},[68,2776,2777],{"class":70,"line":71},[68,2778,2779],{"class":273},"\u002F\u002F C++17 之前：pair.second 是 map 元素的 value。\n",[68,2781,2782,2785,2787,2789],{"class":70,"line":263},[68,2783,2784],{"class":233},"for",[68,2786,980],{"class":229},[68,2788,401],{"class":233},[68,2790,2452],{"class":229},[68,2792,2793],{"class":70,"line":270},[68,2794,586],{"class":229},[68,2796,2797,2800,2803,2806],{"class":70,"line":277},[68,2798,2799],{"class":229},"    pair.second ",[68,2801,2802],{"class":233},"+=",[68,2804,2805],{"class":82}," 10",[68,2807,836],{"class":229},[68,2809,2810],{"class":70,"line":291},[68,2811,665],{"class":229},[502,2813,2815],{"id":2814},"示例-5c17-结构化绑定中修改-map-的-value-必须使用引用","示例 5：C++17 结构化绑定中，修改 map 的 value 必须使用引用",[59,2817,2819],{"className":217,"code":2818,"language":219,"meta":64,"style":64},"#include \u003Ciostream>\n#include \u003Cmap>\n#include \u003Cstring>\n\nint main()\n{\n    std::map\u003Cstd::string, int> scores = {\n        {\"Alice\", 85},\n        {\"Bob\", 92}\n    };\n\n    \u002F\u002F C++17：没有写 &，name 和 score 不引用 map 中的原元素。\n    \u002F\u002F 每轮循环得到的是当前 key 和 value 的副本。\n    for (auto [name, score] : scores)\n    {\n        \u002F\u002F 这里只修改局部变量 score，scores 中的原分数不会变化。\n        score += 10;\n    }\n\n    std::cout \u003C\u003C \"after auto copy:\\n\";\n\n    \u002F\u002F C++17：const auto& 不复制 map 元素，适合只读输出。\n    for (const auto& [name, score] : scores)\n    {\n        std::cout \u003C\u003C name \u003C\u003C \": \" \u003C\u003C score \u003C\u003C \"\\n\";\n    }\n\n    \u002F\u002F C++17：auto& 让 name 和 score 引用 map 中的原元素。\n    for (auto& [name, score] : scores)\n    {\n        \u002F\u002F score 是 value 的引用，因此这次会修改原 map 中的分数。\n        score += 10;\n    }\n\n    std::cout \u003C\u003C \"after auto& reference:\\n\";\n\n    \u002F\u002F 修改完成后再次只读遍历，确认新分数已经保存在 map 中。\n    for (const auto& [name, score] : scores)\n    {\n        std::cout \u003C\u003C name \u003C\u003C \": \" \u003C\u003C score \u003C\u003C \"\\n\";\n    }\n\n    return 0;\n}\n",[18,2820,2821,2827,2833,2839,2843,2851,2855,2876,2890,2902,2906,2910,2915,2920,2930,2934,2939,2950,2954,2958,2975,2979,2984,2996,3000,3028,3032,3036,3041,3051,3055,3060,3070,3074,3078,3095,3099,3104,3116,3120,3148,3152,3156,3164],{"__ignoreMap":64},[68,2822,2823,2825],{"class":70,"line":71},[68,2824,515],{"class":233},[68,2826,518],{"class":78},[68,2828,2829,2831],{"class":70,"line":263},[68,2830,515],{"class":233},[68,2832,2094],{"class":78},[68,2834,2835,2837],{"class":70,"line":270},[68,2836,515],{"class":233},[68,2838,1068],{"class":78},[68,2840,2841],{"class":70,"line":277},[68,2842,267],{"emptyLinePlaceholder":266},[68,2844,2845,2847,2849],{"class":70,"line":291},[68,2846,280],{"class":233},[68,2848,678],{"class":74},[68,2850,681],{"class":229},[68,2852,2853],{"class":70,"line":583},[68,2854,586],{"class":229},[68,2856,2857,2859,2861,2863,2865,2867,2869,2872,2874],{"class":70,"line":589},[68,2858,1284],{"class":74},[68,2860,2123],{"class":229},[68,2862,549],{"class":233},[68,2864,226],{"class":74},[68,2866,2130],{"class":229},[68,2868,2133],{"class":233},[68,2870,2871],{"class":229}," scores ",[68,2873,246],{"class":233},[68,2875,1703],{"class":229},[68,2877,2878,2881,2883,2885,2887],{"class":70,"line":606},[68,2879,2880],{"class":229},"        {",[68,2882,1130],{"class":78},[68,2884,237],{"class":229},[68,2886,2186],{"class":82},[68,2888,2889],{"class":229},"},\n",[68,2891,2892,2894,2896,2898,2900],{"class":70,"line":612},[68,2893,2880],{"class":229},[68,2895,2378],{"class":78},[68,2897,237],{"class":229},[68,2899,2383],{"class":82},[68,2901,665],{"class":229},[68,2903,2904],{"class":70,"line":634},[68,2905,1758],{"class":229},[68,2907,2908],{"class":70,"line":640},[68,2909,267],{"emptyLinePlaceholder":266},[68,2911,2912],{"class":70,"line":662},[68,2913,2914],{"class":273},"    \u002F\u002F C++17：没有写 &，name 和 score 不引用 map 中的原元素。\n",[68,2916,2917],{"class":70,"line":668},[68,2918,2919],{"class":273},"    \u002F\u002F 每轮循环得到的是当前 key 和 value 的副本。\n",[68,2921,2922,2924,2926,2928],{"class":70,"line":673},[68,2923,2443],{"class":233},[68,2925,980],{"class":229},[68,2927,350],{"class":233},[68,2929,2540],{"class":229},[68,2931,2932],{"class":70,"line":684},[68,2933,609],{"class":229},[68,2935,2936],{"class":70,"line":689},[68,2937,2938],{"class":273},"        \u002F\u002F 这里只修改局部变量 score，scores 中的原分数不会变化。\n",[68,2940,2941,2944,2946,2948],{"class":70,"line":695},[68,2942,2943],{"class":229},"        score ",[68,2945,2802],{"class":233},[68,2947,2805],{"class":82},[68,2949,836],{"class":229},[68,2951,2952],{"class":70,"line":733},[68,2953,637],{"class":229},[68,2955,2956],{"class":70,"line":738},[68,2957,267],{"emptyLinePlaceholder":266},[68,2959,2960,2962,2964,2966,2969,2971,2973],{"class":70,"line":744},[68,2961,1284],{"class":74},[68,2963,811],{"class":229},[68,2965,814],{"class":233},[68,2967,2968],{"class":78}," \"after auto copy:",[68,2970,830],{"class":82},[68,2972,833],{"class":78},[68,2974,836],{"class":229},[68,2976,2977],{"class":70,"line":760},[68,2978,267],{"emptyLinePlaceholder":266},[68,2980,2981],{"class":70,"line":765},[68,2982,2983],{"class":273},"    \u002F\u002F C++17：const auto& 不复制 map 元素，适合只读输出。\n",[68,2985,2986,2988,2990,2992,2994],{"class":70,"line":771},[68,2987,2443],{"class":233},[68,2989,980],{"class":229},[68,2991,415],{"class":233},[68,2993,418],{"class":233},[68,2995,2540],{"class":229},[68,2997,2998],{"class":70,"line":787},[68,2999,609],{"class":229},[68,3001,3002,3004,3006,3008,3010,3012,3014,3016,3018,3020,3022,3024,3026],{"class":70,"line":792},[68,3003,808],{"class":74},[68,3005,811],{"class":229},[68,3007,814],{"class":233},[68,3009,1371],{"class":229},[68,3011,814],{"class":233},[68,3013,2477],{"class":78},[68,3015,820],{"class":233},[68,3017,2569],{"class":229},[68,3019,814],{"class":233},[68,3021,827],{"class":78},[68,3023,830],{"class":82},[68,3025,833],{"class":78},[68,3027,836],{"class":229},[68,3029,3030],{"class":70,"line":800},[68,3031,637],{"class":229},[68,3033,3034],{"class":70,"line":805},[68,3035,267],{"emptyLinePlaceholder":266},[68,3037,3038],{"class":70,"line":839},[68,3039,3040],{"class":273},"    \u002F\u002F C++17：auto& 让 name 和 score 引用 map 中的原元素。\n",[68,3042,3043,3045,3047,3049],{"class":70,"line":844},[68,3044,2443],{"class":233},[68,3046,980],{"class":229},[68,3048,401],{"class":233},[68,3050,2540],{"class":229},[68,3052,3053],{"class":70,"line":849},[68,3054,609],{"class":229},[68,3056,3057],{"class":70,"line":855},[68,3058,3059],{"class":273},"        \u002F\u002F score 是 value 的引用，因此这次会修改原 map 中的分数。\n",[68,3061,3062,3064,3066,3068],{"class":70,"line":861},[68,3063,2943],{"class":229},[68,3065,2802],{"class":233},[68,3067,2805],{"class":82},[68,3069,836],{"class":229},[68,3071,3072],{"class":70,"line":885},[68,3073,637],{"class":229},[68,3075,3076],{"class":70,"line":893},[68,3077,267],{"emptyLinePlaceholder":266},[68,3079,3080,3082,3084,3086,3089,3091,3093],{"class":70,"line":898},[68,3081,1284],{"class":74},[68,3083,811],{"class":229},[68,3085,814],{"class":233},[68,3087,3088],{"class":78}," \"after auto& reference:",[68,3090,830],{"class":82},[68,3092,833],{"class":78},[68,3094,836],{"class":229},[68,3096,3097],{"class":70,"line":924},[68,3098,267],{"emptyLinePlaceholder":266},[68,3100,3101],{"class":70,"line":929},[68,3102,3103],{"class":273},"    \u002F\u002F 修改完成后再次只读遍历，确认新分数已经保存在 map 中。\n",[68,3105,3106,3108,3110,3112,3114],{"class":70,"line":934},[68,3107,2443],{"class":233},[68,3109,980],{"class":229},[68,3111,415],{"class":233},[68,3113,418],{"class":233},[68,3115,2540],{"class":229},[68,3117,3118],{"class":70,"line":940},[68,3119,609],{"class":229},[68,3121,3122,3124,3126,3128,3130,3132,3134,3136,3138,3140,3142,3144,3146],{"class":70,"line":964},[68,3123,808],{"class":74},[68,3125,811],{"class":229},[68,3127,814],{"class":233},[68,3129,1371],{"class":229},[68,3131,814],{"class":233},[68,3133,2477],{"class":78},[68,3135,820],{"class":233},[68,3137,2569],{"class":229},[68,3139,814],{"class":233},[68,3141,827],{"class":78},[68,3143,830],{"class":82},[68,3145,833],{"class":78},[68,3147,836],{"class":229},[68,3149,3150],{"class":70,"line":969},[68,3151,637],{"class":229},[68,3153,3154],{"class":70,"line":975},[68,3155,267],{"emptyLinePlaceholder":266},[68,3157,3158,3160,3162],{"class":70,"line":989},[68,3159,643],{"class":233},[68,3161,601],{"class":82},[68,3163,836],{"class":229},[68,3165,3166],{"class":70,"line":994},[68,3167,665],{"class":229},[14,3169,3170,214],{},[41,3171,1038],{},[59,3173,3176],{"className":3174,"code":3175,"language":1044},[1042],"after auto copy:\nAlice: 85\nBob: 92\nafter auto& reference:\nAlice: 95\nBob: 102\n",[18,3177,3175],{"__ignoreMap":64},[14,3179,3180,3181,3184,3185,3188,3189,3192],{},"注意：",[18,3182,3183],{},"map"," 的 key 仍然不能改。即使使用 C++17 的 ",[18,3186,3187],{},"auto& [name, score]","，",[18,3190,3191],{},"name"," 也是只读的，因为 map 必须保证 key 不变，才能维持内部的排序规则。",[10,3194,3195],{"id":3195},"常见错误",[14,3197,3198],{},[41,3199,3200],{},"错误 1：变量个数不匹配",[59,3202,3204],{"className":217,"code":3203,"language":219,"meta":64,"style":64},"\u002F\u002F C++17：右侧 tuple 有三个元素，左侧却只有两个变量，无法一一对应。\nauto [x, y] = std::make_tuple(1, 2, 3);  \u002F\u002F ❌ 编译错误\n",[18,3205,3206,3211],{"__ignoreMap":64},[68,3207,3208],{"class":70,"line":71},[68,3209,3210],{"class":273},"\u002F\u002F C++17：右侧 tuple 有三个元素，左侧却只有两个变量，无法一一对应。\n",[68,3212,3213,3215,3218,3220,3222,3224,3227,3229,3231,3233,3235,3237,3240,3243],{"class":70,"line":263},[68,3214,350],{"class":233},[68,3216,3217],{"class":229}," [x, y] ",[68,3219,246],{"class":233},[68,3221,701],{"class":74},[68,3223,544],{"class":229},[68,3225,3226],{"class":74},"make_tuple",[68,3228,564],{"class":229},[68,3230,1249],{"class":82},[68,3232,237],{"class":229},[68,3234,727],{"class":82},[68,3236,237],{"class":229},[68,3238,3239],{"class":82},"3",[68,3241,3242],{"class":229},");",[68,3244,3245],{"class":273},"  \u002F\u002F ❌ 编译错误\n",[14,3247,3248],{},"正确做法：变量个数必须等于复合类型的元素个数。",[14,3250,3251],{},[41,3252,3253],{},"错误 2：解包非公有成员的结构体",[59,3255,3257],{"className":217,"code":3256,"language":219,"meta":64,"style":64},"struct A { private: int x; public: int y; };\nA obj;\n\n\u002F\u002F C++17：此处不能访问私有成员 x，因此不能这样进行结构化绑定。\nauto [x, y] = obj;  \u002F\u002F ❌ 编译错误\n",[18,3258,3259,3285,3290,3294,3299],{"__ignoreMap":64},[68,3260,3261,3263,3266,3269,3272,3274,3277,3280,3282],{"class":70,"line":71},[68,3262,1622],{"class":233},[68,3264,3265],{"class":74}," A",[68,3267,3268],{"class":229}," { ",[68,3270,3271],{"class":233},"private:",[68,3273,749],{"class":233},[68,3275,3276],{"class":229}," x; ",[68,3278,3279],{"class":233},"public:",[68,3281,749],{"class":233},[68,3283,3284],{"class":229}," y; };\n",[68,3286,3287],{"class":70,"line":263},[68,3288,3289],{"class":229},"A obj;\n",[68,3291,3292],{"class":70,"line":270},[68,3293,267],{"emptyLinePlaceholder":266},[68,3295,3296],{"class":70,"line":277},[68,3297,3298],{"class":273},"\u002F\u002F C++17：此处不能访问私有成员 x，因此不能这样进行结构化绑定。\n",[68,3300,3301,3303,3305,3307,3310],{"class":70,"line":291},[68,3302,350],{"class":233},[68,3304,3217],{"class":229},[68,3306,246],{"class":233},[68,3308,3309],{"class":229}," obj;",[68,3311,3245],{"class":273},[14,3313,3314,3315,97],{},"正确做法：在使用结构化绑定的位置，所有被绑定的成员都必须可以访问。对初学阶段常见的普通结构体来说，最直观的做法是让这些成员保持 ",[18,3316,3317],{},"public",[14,3319,3320],{},[41,3321,3322,3323,3325,3326,3328],{},"错误 3：用 ",[18,3324,350],{}," 而不是 ",[18,3327,401],{}," 导致修改无效",[59,3330,3332],{"className":217,"code":3331,"language":219,"meta":64,"style":64},"\u002F\u002F C++17：没有写 &，k 和 v 是从 map 元素得到的副本。\nauto [k, v] = *map.begin();\n\n\u002F\u002F 这里只修改局部变量 v，不会修改 map 中的 value。\nv = 100;\n",[18,3333,3334,3339,3359,3363,3368],{"__ignoreMap":64},[68,3335,3336],{"class":70,"line":71},[68,3337,3338],{"class":273},"\u002F\u002F C++17：没有写 &，k 和 v 是从 map 元素得到的副本。\n",[68,3340,3341,3343,3346,3348,3351,3354,3357],{"class":70,"line":263},[68,3342,350],{"class":233},[68,3344,3345],{"class":229}," [k, v] ",[68,3347,246],{"class":233},[68,3349,3350],{"class":233}," *",[68,3352,3353],{"class":229},"map.",[68,3355,3356],{"class":74},"begin",[68,3358,1187],{"class":229},[68,3360,3361],{"class":70,"line":270},[68,3362,267],{"emptyLinePlaceholder":266},[68,3364,3365],{"class":70,"line":277},[68,3366,3367],{"class":273},"\u002F\u002F 这里只修改局部变量 v，不会修改 map 中的 value。\n",[68,3369,3370,3373,3375,3378],{"class":70,"line":291},[68,3371,3372],{"class":229},"v ",[68,3374,246],{"class":233},[68,3376,3377],{"class":82}," 100",[68,3379,836],{"class":229},[14,3381,3382,3383,97],{},"正确做法：要修改原值用 ",[18,3384,3385],{},"auto& [k, v] = ...",[10,3387,3388],{"id":3388},"使用建议",[3390,3391,3392,3404,3413,3428,3439],"ol",{},[3393,3394,3395,3403],"li",{},[41,3396,3397,3398,649,3400,3402],{},"函数返回多值时优先用 ",[18,3399,24],{},[18,3401,20],{}," + 结构化绑定","，而不是输出参数。",[3393,3405,3406,3412],{},[41,3407,3408,3409],{},"C++17 中只读遍历 map 时优先用 ",[18,3410,3411],{},"const auto& [key, value]","，避免拷贝，也能清楚表达 key 和 value 的含义。",[3393,3414,3415,3418,3419,3422,3423,139,3425,3427],{},[41,3416,3417],{},"解包 insert 返回值","：C++17 的 ",[18,3420,3421],{},"auto [it, inserted] = map.insert(...)"," 比继续使用 ",[18,3424,32],{},[18,3426,35],{}," 更直观。",[3393,3429,3430,3435,3436,97],{},[41,3431,3432,3433],{},"需要修改原数据时使用 ",[18,3434,401],{},"；只读且不想拷贝时使用 ",[18,3437,3438],{},"const auto&",[3393,3440,3441,3444,3445,3448,3449,97],{},[41,3442,3443],{},"维护 C++17 以前的项目时继续使用原有访问方式","：pair 用 ",[18,3446,3447],{},".first\u002F.second","，tuple 用 ",[18,3450,2677],{},[10,3452,3453],{"id":3453},"小结",[3455,3456,3457,3465,3468,3474,3481],"ul",{},[3393,3458,3459,3460,139,3462,3464],{},"C++17 之前需要通过 ",[18,3461,3447],{},[18,3463,2677],{},"、成员名或数组下标分别取值。",[3393,3466,3467],{},"C++17 结构化绑定可以把 pair \u002F tuple \u002F 结构体 \u002F 数组分解成独立变量。",[3393,3469,3470,3471,97],{},"C++17 基本语法是 ",[18,3472,3473],{},"auto [var1, var2, ...] = expression",[3393,3475,3476,3477,3480],{},"遍历 map 时 ",[18,3478,3479],{},"[key, value]"," 是最佳实践（C++17）。",[3393,3482,3483,3484,3487],{},"insert 返回值用 ",[18,3485,3486],{},"[iterator, bool]"," 解包非常清晰。",[3489,3490,3491],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":64,"searchDepth":263,"depth":263,"links":3493},[3494,3495,3496,3497,3498,3499,3500,3501,3507,3508,3509,3513,3514,3515],{"id":12,"depth":263,"text":12},{"id":47,"depth":263,"text":47},{"id":53,"depth":263,"text":54},{"id":86,"depth":263,"text":86},{"id":100,"depth":263,"text":101},{"id":371,"depth":263,"text":371},{"id":430,"depth":263,"text":430},{"id":500,"depth":263,"text":500,"children":3502},[3503,3504,3505,3506],{"id":504,"depth":270,"text":505},{"id":1049,"depth":270,"text":1050},{"id":1595,"depth":270,"text":1596},{"id":2075,"depth":270,"text":2076},{"id":1038,"depth":263,"text":1038},{"id":2621,"depth":263,"text":2621},{"id":2743,"depth":263,"text":3510,"children":3511},"auto [a, b] 和 auto& [a, b] 的区别",[3512],{"id":2814,"depth":270,"text":2815},{"id":3195,"depth":263,"text":3195},{"id":3388,"depth":263,"text":3388},{"id":3453,"depth":263,"text":3453},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","2000-0600","2023-10-05","wiki\u002F2023-10-05-cplusplus-jiao-xue","zh-cn:2023-10-05-cplusplus-jiao-xue","\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定",false,null,"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","zh-CN","zh-cn",{},{"title":5,"description":64},"-6xQfKFhdrBuf3uj58tI5IWVfjCkip3jzGjYu4dDZis",[3534,3540,3545,3550,3555,3560,3565,3569,3574,3579,3584,3589,3594,3599,3604,3609,3614,3619,3624,3629,3634,3639,3644,3649,3654,3659,3664,3669,3674,3679,3684,3689,3694,3699,3704,3709,3714,3719,3723,3728,3733,3738,3743,3744,3749,3754,3759,3764,3769,3774,3779,3784,3789,3794,3799,3804,3809,3814,3819,3824,3829,3834,3839,3844,3849,3854,3859,3864,3869,3874,3879,3884,3889,3894,3899,3904,3909,3914,3919,3924,3929,3934],{"path":3535,"stem":3536,"title":3537,"date":3518,"chapterOrder":3538,"chapterDepth":3539,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F0100-C++开发环境搭建与测试","C++开发环境搭建与测试","0100",0,{"path":3541,"stem":3542,"title":3543,"date":3518,"chapterOrder":3544,"chapterDepth":3539,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++基础初识","0200",{"path":3546,"stem":3547,"title":3548,"date":3518,"chapterOrder":3549,"chapterDepth":3539,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0300-shu-ju-lei-xing-yu-shu-ju-cun-fang","wiki\u002F2023-10-05-Cplusplus教学\u002F0300-数据类型与数据存放","数据类型与数据存放","0300",{"path":3551,"stem":3552,"title":3553,"date":3518,"chapterOrder":3554,"chapterDepth":3539,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","wiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","输入输出","0400",{"path":3556,"stem":3557,"title":3558,"date":3518,"chapterOrder":3559,"chapterDepth":3539,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","wiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","运算符","0500",{"path":3561,"stem":3562,"title":3563,"date":3518,"chapterOrder":3564,"chapterDepth":3539,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","wiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","程序流程结构","0600",{"path":3566,"stem":3567,"title":186,"date":3518,"chapterOrder":3568,"chapterDepth":3539,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","wiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","0700",{"path":3570,"stem":3571,"title":3572,"date":3518,"chapterOrder":3573,"chapterDepth":3539,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","函数与头文件","0800",{"path":3575,"stem":3576,"title":3577,"date":3518,"chapterOrder":3578,"chapterDepth":3539,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","指针","0900",{"path":3580,"stem":3581,"title":3582,"date":3518,"chapterOrder":3583,"chapterDepth":3539,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","wiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","结构体与共用体","1000",{"path":3585,"stem":3586,"title":3587,"date":3518,"chapterOrder":3588,"chapterDepth":3539,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1100-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1100-内存分区与生命周期","内存分区与生命周期","1100",{"path":3590,"stem":3591,"title":3592,"date":3518,"chapterOrder":3593,"chapterDepth":3539,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","wiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","引用","1200",{"path":3595,"stem":3596,"title":3597,"date":3518,"chapterOrder":3598,"chapterDepth":3539,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao-yu-ming-ming-kong-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高与命名空间","函数提高与命名空间","1300",{"path":3600,"stem":3601,"title":3602,"date":3518,"chapterOrder":3603,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","封装","1400-0100",{"path":3605,"stem":3606,"title":3607,"date":3518,"chapterOrder":3608,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0200-dui-xiang-chu-shi-hua-he-qing-li","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0200-对象初始化和清理","对象初始化和清理","1400-0200",{"path":3610,"stem":3611,"title":3612,"date":3518,"chapterOrder":3613,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0300-dui-xiang-mo-xing-yu-this-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0300-对象模型与this指针","对象模型与this指针","1400-0300",{"path":3615,"stem":3616,"title":3617,"date":3518,"chapterOrder":3618,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0400-you-yuan-yu-yun-suan-fu-zhong-zai","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0400-友元与运算符重载","友元与运算符重载","1400-0400",{"path":3620,"stem":3621,"title":3622,"date":3518,"chapterOrder":3623,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","继承","1400-0500",{"path":3625,"stem":3626,"title":3627,"date":3518,"chapterOrder":3628,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","多态","1400-0600",{"path":3630,"stem":3631,"title":3632,"date":3518,"chapterOrder":3633,"chapterDepth":3539,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","类和对象","1400",{"path":3635,"stem":3636,"title":3637,"date":3518,"chapterOrder":3638,"chapterDepth":3539,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","wiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","文件操作","1500",{"path":3640,"stem":3641,"title":3642,"date":3518,"chapterOrder":3643,"chapterDepth":3539,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","wiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","异常处理","1600",{"path":3645,"stem":3646,"title":3647,"date":3518,"chapterOrder":3648,"chapterDepth":3539,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","模板","1700",{"path":3650,"stem":3651,"title":3652,"date":3518,"chapterOrder":3653,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","STL初识","1800-0100",{"path":3655,"stem":3656,"title":3657,"date":3518,"chapterOrder":3658,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0200-std-array","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0200-std-array","std::array","1800-0200",{"path":3660,"stem":3661,"title":3662,"date":3518,"chapterOrder":3663,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string容器","1800-0300",{"path":3665,"stem":3666,"title":3667,"date":3518,"chapterOrder":3668,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector容器","vector 容器","1800-0400",{"path":3670,"stem":3671,"title":3672,"date":3518,"chapterOrder":3673,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-deque-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-deque容器","deque 容器","1800-0500",{"path":3675,"stem":3676,"title":3677,"date":3518,"chapterOrder":3678,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-stack-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-stack容器","stack 容器","1800-0600",{"path":3680,"stem":3681,"title":3682,"date":3518,"chapterOrder":3683,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-queue-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-queue容器","queue 容器","1800-0700",{"path":3685,"stem":3686,"title":3687,"date":3518,"chapterOrder":3688,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-list-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-list容器","list 容器","1800-0800",{"path":3690,"stem":3691,"title":3692,"date":3518,"chapterOrder":3693,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0900-set-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0900-set容器","set \u002F multiset 容器","1800-0900",{"path":3695,"stem":3696,"title":3697,"date":3518,"chapterOrder":3698,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1000-map-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-1000-map容器","map \u002F multimap 容器","1800-1000",{"path":3700,"stem":3701,"title":3702,"date":3518,"chapterOrder":3703,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1100-han-shu-dui-xiang-yu-wei-ci","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-1100-函数对象与谓词","函数对象与谓词","1800-1100",{"path":3705,"stem":3706,"title":3707,"date":3518,"chapterOrder":3708,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1200-chang-yong-suan-fa","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-1200-常用算法","常用算法","1800-1200",{"path":3710,"stem":3711,"title":3712,"date":3518,"chapterOrder":3713,"chapterDepth":3539,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","STL提高编程","1800",{"path":3715,"stem":3716,"title":3717,"date":3518,"chapterOrder":3718,"chapterDepth":3539,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","wiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++类型转换","1900",{"path":3720,"stem":3721,"title":350,"date":3518,"chapterOrder":3722,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","2000-0100",{"path":3724,"stem":3725,"title":3726,"date":3518,"chapterOrder":3727,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","nullptr","2000-0200",{"path":3729,"stem":3730,"title":3731,"date":3518,"chapterOrder":3732,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","using","2000-0300",{"path":3734,"stem":3735,"title":3736,"date":3518,"chapterOrder":3737,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0400-enum-class","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0400-enum-class","enum class","2000-0400",{"path":3739,"stem":3740,"title":3741,"date":3518,"chapterOrder":3742,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0500-fan-wei-for-xun-huan","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0500-范围for循环","范围 for 循环","2000-0500",{"path":3516,"stem":3524,"title":5,"date":3518,"chapterOrder":3517,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},{"path":3745,"stem":3746,"title":3747,"date":3518,"chapterOrder":3748,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","constexpr","2000-0700",{"path":3750,"stem":3751,"title":3752,"date":3518,"chapterOrder":3753,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII","2000-0800",{"path":3755,"stem":3756,"title":3757,"date":3518,"chapterOrder":3758,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","智能指针","2000-0900",{"path":3760,"stem":3761,"title":3762,"date":3518,"chapterOrder":3763,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义","右值引用和移动语义","2000-1000",{"path":3765,"stem":3766,"title":3767,"date":3518,"chapterOrder":3768,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","Lambda 表达式","2000-1100",{"path":3770,"stem":3771,"title":3772,"date":3518,"chapterOrder":3773,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","std::function","2000-1200",{"path":3775,"stem":3776,"title":3777,"date":3518,"chapterOrder":3778,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","std::bind","2000-1300",{"path":3780,"stem":3781,"title":3782,"date":3518,"chapterOrder":3783,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional","std::optional","2000-1400",{"path":3785,"stem":3786,"title":3787,"date":3518,"chapterOrder":3788,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1500-std-variant","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1500-std-variant","std::variant","2000-1500",{"path":3790,"stem":3791,"title":3792,"date":3518,"chapterOrder":3793,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1600-std-span","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1600-std-span","std::span","2000-1600",{"path":3795,"stem":3796,"title":3797,"date":3518,"chapterOrder":3798,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1700-std-format-print","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1700-std-format-print","std::format \u002F std::print","2000-1700",{"path":3800,"stem":3801,"title":3802,"date":3518,"chapterOrder":3803,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1800-std-chrono","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1800-std-chrono","std::chrono","2000-1800",{"path":3805,"stem":3806,"title":3807,"date":3518,"chapterOrder":3808,"chapterDepth":263,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0100-std-thread","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0100-std-thread","std::thread 与 join","2000-1900-0100",{"path":3810,"stem":3811,"title":3812,"date":3518,"chapterOrder":3813,"chapterDepth":263,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-mutex-lock-guard","mutex 与 lock_guard","2000-1900-0200",{"path":3815,"stem":3816,"title":3817,"date":3518,"chapterOrder":3818,"chapterDepth":263,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0300-std-atomic","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0300-std-atomic","std::atomic","2000-1900-0300",{"path":3820,"stem":3821,"title":3822,"date":3518,"chapterOrder":3823,"chapterDepth":263,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0400-condition-variable","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0400-condition-variable","condition_variable","2000-1900-0400",{"path":3825,"stem":3826,"title":3827,"date":3518,"chapterOrder":3828,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发编程","并发编程","2000-1900",{"path":3830,"stem":3831,"title":3832,"date":3518,"chapterOrder":3833,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2000-std-filesystem","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-2000-std-filesystem","std::filesystem","2000-2000",{"path":3835,"stem":3836,"title":3837,"date":3518,"chapterOrder":3838,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","modules 简介","2000-2100",{"path":3840,"stem":3841,"title":3842,"date":3518,"chapterOrder":3843,"chapterDepth":3539,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","现代C++","2000",{"path":3845,"stem":3846,"title":3847,"date":3518,"chapterOrder":3848,"chapterDepth":263,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0100-ding-shi-qi-yu-yi-bu-io","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0100-定时器与异步IO","定时器与异步 IO","2100-0100-0100",{"path":3850,"stem":3851,"title":3852,"date":3518,"chapterOrder":3853,"chapterDepth":263,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0200-boost-asio-ji-chu","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0200-Boost.Asio基础","Boost.Asio 基础","2100-0100-0200",{"path":3855,"stem":3856,"title":3857,"date":3518,"chapterOrder":3858,"chapterDepth":263,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0300-chuan-kou-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0300-串口通信","串口通信","2100-0100-0300",{"path":3860,"stem":3861,"title":3862,"date":3518,"chapterOrder":3863,"chapterDepth":263,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0400-tcp-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0400-TCP通信","TCP 通信","2100-0100-0400",{"path":3865,"stem":3866,"title":3867,"date":3518,"chapterOrder":3868,"chapterDepth":263,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0500-udp-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0500-UDP通信","UDP 通信","2100-0100-0500",{"path":3870,"stem":3871,"title":3872,"date":3518,"chapterOrder":3873,"chapterDepth":263,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0600-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0600-机器人工程写法与ROS2集成","机器人工程写法与 ROS2 集成","2100-0100-0600",{"path":3875,"stem":3876,"title":3877,"date":3518,"chapterOrder":3878,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","Boost.Asio异步IO库","2100-0100",{"path":3880,"stem":3881,"title":3882,"date":3518,"chapterOrder":3883,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0200-eigen-xian-xing-dai-shu-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0200-Eigen线性代数库","Eigen线性代数库","2100-0200",{"path":3885,"stem":3886,"title":3887,"date":3518,"chapterOrder":3888,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0300-opencv-ji-suan-ji-shi-jue-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0300-OpenCV计算机视觉库","OpenCV计算机视觉库","2100-0300",{"path":3890,"stem":3891,"title":3892,"date":3518,"chapterOrder":3893,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0400-pcl-dian-yun-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0400-PCL点云库","PCL点云库","2100-0400",{"path":3895,"stem":3896,"title":3897,"date":3518,"chapterOrder":3898,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0500-sophus-li-qun-li-dai-shu-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0500-Sophus李群李代数库","Sophus 李群李代数库","2100-0500",{"path":3900,"stem":3901,"title":3902,"date":3518,"chapterOrder":3903,"chapterDepth":3539,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","常用库学习","2100",{"path":3905,"stem":3906,"title":3907,"date":3518,"chapterOrder":3908,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0100-cmakepresets-yu-gou-jian-an-zhuang","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0100-CMakePresets与构建安装","CMakePresets与构建安装","2200-0100",{"path":3910,"stem":3911,"title":3912,"date":3518,"chapterOrder":3913,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项","顶层CMake与公共编译选项","2200-0200",{"path":3915,"stem":3916,"title":3917,"date":3518,"chapterOrder":3918,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0300-src-yu-lib-mo-kuai-cmake-xiang-jie","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0300-src与lib模块CMake详解","src与lib模块CMake详解","2200-0300",{"path":3920,"stem":3921,"title":3922,"date":3518,"chapterOrder":3923,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法","第三方库依赖写法","2200-0400",{"path":3925,"stem":3926,"title":3927,"date":3518,"chapterOrder":3928,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0500-mu-ban-kuo-zhan-yu-chang-jian-wen-ti","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0500-模板扩展与常见问题","模板扩展与常见问题","2200-0500",{"path":3930,"stem":3931,"title":3932,"date":3518,"chapterOrder":3933,"chapterDepth":3539,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake工程模板","2200",{"path":3521,"stem":3935,"title":3936,"date":3518,"chapterOrder":3526,"chapterDepth":3539,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":266},"wiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++教程",{"variants":3938},[3939,3942,3945,3948,3951],{"path":3940,"localeSlug":3941,"i18nKey":3524},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","en-us",{"path":3943,"localeSlug":3944,"i18nKey":3524},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","zh-hant",{"path":3946,"localeSlug":3947,"i18nKey":3524},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","zh-hk",{"path":3949,"localeSlug":3950,"i18nKey":3524},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","zh-tw",{"path":3516,"localeSlug":3529,"i18nKey":3524},[3940,3527,3943,3527,3946,3527,3949,3527,3516,3527],1784646786158]