[{"data":1,"prerenderedAt":3954},["ShallowReactive",2],{"wiki-page-\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding":3,"wiki-doc-items-\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding":3534,"language-switcher-data-\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding":3938,"wiki-i18n-paths-\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding":3953},{"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":3526,"locale":3527,"localeSlug":3528,"meta":3529,"navigation":266,"path":3516,"seo":3530,"sourcePath":3531,"sourceStem":3524,"stem":3532,"wikiDepth":71,"__hash__":3533},"content\u002F_i18n\u002Fzh-hant\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-hant\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-hant:2023-10-05-cplusplus-jiao-xue","\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定",false,null,"zh-Hant","zh-hant",{},{"title":5,"description":64},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","UMPJv7QxCGX9LfXInhztiD5Z9bV3KTCQUsdFRlqElJE",[3535,3541,3546,3551,3556,3561,3566,3570,3575,3580,3585,3590,3595,3600,3605,3610,3615,3620,3625,3630,3635,3640,3645,3650,3655,3660,3665,3670,3675,3680,3685,3690,3695,3700,3705,3710,3715,3720,3724,3729,3734,3739,3744,3745,3750,3755,3760,3765,3770,3775,3780,3785,3790,3795,3800,3805,3810,3815,3820,3825,3830,3835,3840,3845,3850,3855,3860,3865,3870,3875,3880,3885,3890,3895,3900,3905,3910,3915,3920,3925,3930,3935],{"path":3536,"stem":3537,"title":3538,"date":3518,"chapterOrder":3539,"chapterDepth":3540,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0100-C++开发环境搭建与测试","C++開發環境搭建與測試","0100",0,{"path":3542,"stem":3543,"title":3544,"date":3518,"chapterOrder":3545,"chapterDepth":3540,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++基礎初識","0200",{"path":3547,"stem":3548,"title":3549,"date":3518,"chapterOrder":3550,"chapterDepth":3540,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0300-shu-ju-lei-xing-yu-shu-ju-cun-fang","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0300-数据类型与数据存放","數據類型與數據存放","0300",{"path":3552,"stem":3553,"title":3554,"date":3518,"chapterOrder":3555,"chapterDepth":3540,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","輸入輸出","0400",{"path":3557,"stem":3558,"title":3559,"date":3518,"chapterOrder":3560,"chapterDepth":3540,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","運算符","0500",{"path":3562,"stem":3563,"title":3564,"date":3518,"chapterOrder":3565,"chapterDepth":3540,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","程序流程結構","0600",{"path":3567,"stem":3568,"title":186,"date":3518,"chapterOrder":3569,"chapterDepth":3540,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","0700",{"path":3571,"stem":3572,"title":3573,"date":3518,"chapterOrder":3574,"chapterDepth":3540,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","函數與頭文件","0800",{"path":3576,"stem":3577,"title":3578,"date":3518,"chapterOrder":3579,"chapterDepth":3540,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","指針","0900",{"path":3581,"stem":3582,"title":3583,"date":3518,"chapterOrder":3584,"chapterDepth":3540,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","結構體與共用體","1000",{"path":3586,"stem":3587,"title":3588,"date":3518,"chapterOrder":3589,"chapterDepth":3540,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1100-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1100-内存分区与生命周期","內存分區與生命週期","1100",{"path":3591,"stem":3592,"title":3593,"date":3518,"chapterOrder":3594,"chapterDepth":3540,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","引用","1200",{"path":3596,"stem":3597,"title":3598,"date":3518,"chapterOrder":3599,"chapterDepth":3540,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao-yu-ming-ming-kong-jian","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高与命名空间","函數提高與命名空間","1300",{"path":3601,"stem":3602,"title":3603,"date":3518,"chapterOrder":3604,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","封裝","1400-0100",{"path":3606,"stem":3607,"title":3608,"date":3518,"chapterOrder":3609,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0200-dui-xiang-chu-shi-hua-he-qing-li","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0200-对象初始化和清理","對象初始化和清理","1400-0200",{"path":3611,"stem":3612,"title":3613,"date":3518,"chapterOrder":3614,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0300-dui-xiang-mo-xing-yu-this-zhi-zhen","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0300-对象模型与this指针","對象模型與this指針","1400-0300",{"path":3616,"stem":3617,"title":3618,"date":3518,"chapterOrder":3619,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0400-you-yuan-yu-yun-suan-fu-zhong-zai","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0400-友元与运算符重载","友元與運算符重載","1400-0400",{"path":3621,"stem":3622,"title":3623,"date":3518,"chapterOrder":3624,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","繼承","1400-0500",{"path":3626,"stem":3627,"title":3628,"date":3518,"chapterOrder":3629,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","多態","1400-0600",{"path":3631,"stem":3632,"title":3633,"date":3518,"chapterOrder":3634,"chapterDepth":3540,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","類和對象","1400",{"path":3636,"stem":3637,"title":3638,"date":3518,"chapterOrder":3639,"chapterDepth":3540,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","文件操作","1500",{"path":3641,"stem":3642,"title":3643,"date":3518,"chapterOrder":3644,"chapterDepth":3540,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","異常處理","1600",{"path":3646,"stem":3647,"title":3648,"date":3518,"chapterOrder":3649,"chapterDepth":3540,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","模板","1700",{"path":3651,"stem":3652,"title":3653,"date":3518,"chapterOrder":3654,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","STL初識","1800-0100",{"path":3656,"stem":3657,"title":3658,"date":3518,"chapterOrder":3659,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0200-std-array","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0200-std-array","std::array","1800-0200",{"path":3661,"stem":3662,"title":3663,"date":3518,"chapterOrder":3664,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string容器","1800-0300",{"path":3666,"stem":3667,"title":3668,"date":3518,"chapterOrder":3669,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector容器","vector 容器","1800-0400",{"path":3671,"stem":3672,"title":3673,"date":3518,"chapterOrder":3674,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-deque-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-deque容器","deque 容器","1800-0500",{"path":3676,"stem":3677,"title":3678,"date":3518,"chapterOrder":3679,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-stack-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-stack容器","stack 容器","1800-0600",{"path":3681,"stem":3682,"title":3683,"date":3518,"chapterOrder":3684,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-queue-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-queue容器","queue 容器","1800-0700",{"path":3686,"stem":3687,"title":3688,"date":3518,"chapterOrder":3689,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-list-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-list容器","list 容器","1800-0800",{"path":3691,"stem":3692,"title":3693,"date":3518,"chapterOrder":3694,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0900-set-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0900-set容器","set \u002F multiset 容器","1800-0900",{"path":3696,"stem":3697,"title":3698,"date":3518,"chapterOrder":3699,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1000-map-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1000-map容器","map \u002F multimap 容器","1800-1000",{"path":3701,"stem":3702,"title":3703,"date":3518,"chapterOrder":3704,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1100-han-shu-dui-xiang-yu-wei-ci","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1100-函数对象与谓词","函數對象與謂詞","1800-1100",{"path":3706,"stem":3707,"title":3708,"date":3518,"chapterOrder":3709,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1200-chang-yong-suan-fa","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1200-常用算法","常用算法","1800-1200",{"path":3711,"stem":3712,"title":3713,"date":3518,"chapterOrder":3714,"chapterDepth":3540,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","STL提高編程","1800",{"path":3716,"stem":3717,"title":3718,"date":3518,"chapterOrder":3719,"chapterDepth":3540,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++類型轉換","1900",{"path":3721,"stem":3722,"title":350,"date":3518,"chapterOrder":3723,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","2000-0100",{"path":3725,"stem":3726,"title":3727,"date":3518,"chapterOrder":3728,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","nullptr","2000-0200",{"path":3730,"stem":3731,"title":3732,"date":3518,"chapterOrder":3733,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","using","2000-0300",{"path":3735,"stem":3736,"title":3737,"date":3518,"chapterOrder":3738,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0400-enum-class","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0400-enum-class","enum class","2000-0400",{"path":3740,"stem":3741,"title":3742,"date":3518,"chapterOrder":3743,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0500-fan-wei-for-xun-huan","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0500-范围for循环","範圍 for 循環","2000-0500",{"path":3516,"stem":3532,"title":5,"date":3518,"chapterOrder":3517,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},{"path":3746,"stem":3747,"title":3748,"date":3518,"chapterOrder":3749,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","constexpr","2000-0700",{"path":3751,"stem":3752,"title":3753,"date":3518,"chapterOrder":3754,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII","2000-0800",{"path":3756,"stem":3757,"title":3758,"date":3518,"chapterOrder":3759,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","智能指針","2000-0900",{"path":3761,"stem":3762,"title":3763,"date":3518,"chapterOrder":3764,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义","右值引用和移動語義","2000-1000",{"path":3766,"stem":3767,"title":3768,"date":3518,"chapterOrder":3769,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","Lambda 表達式","2000-1100",{"path":3771,"stem":3772,"title":3773,"date":3518,"chapterOrder":3774,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","std::function","2000-1200",{"path":3776,"stem":3777,"title":3778,"date":3518,"chapterOrder":3779,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","std::bind","2000-1300",{"path":3781,"stem":3782,"title":3783,"date":3518,"chapterOrder":3784,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional","std::optional","2000-1400",{"path":3786,"stem":3787,"title":3788,"date":3518,"chapterOrder":3789,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1500-std-variant","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1500-std-variant","std::variant","2000-1500",{"path":3791,"stem":3792,"title":3793,"date":3518,"chapterOrder":3794,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1600-std-span","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1600-std-span","std::span","2000-1600",{"path":3796,"stem":3797,"title":3798,"date":3518,"chapterOrder":3799,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1700-std-format-print","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1700-std-format-print","std::format \u002F std::print","2000-1700",{"path":3801,"stem":3802,"title":3803,"date":3518,"chapterOrder":3804,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1800-std-chrono","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1800-std-chrono","std::chrono","2000-1800",{"path":3806,"stem":3807,"title":3808,"date":3518,"chapterOrder":3809,"chapterDepth":263,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0100-std-thread","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0100-std-thread","std::thread 與 join","2000-1900-0100",{"path":3811,"stem":3812,"title":3813,"date":3518,"chapterOrder":3814,"chapterDepth":263,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-mutex-lock-guard","mutex 與 lock_guard","2000-1900-0200",{"path":3816,"stem":3817,"title":3818,"date":3518,"chapterOrder":3819,"chapterDepth":263,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0300-std-atomic","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0300-std-atomic","std::atomic","2000-1900-0300",{"path":3821,"stem":3822,"title":3823,"date":3518,"chapterOrder":3824,"chapterDepth":263,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0400-condition-variable","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0400-condition-variable","condition_variable","2000-1900-0400",{"path":3826,"stem":3827,"title":3828,"date":3518,"chapterOrder":3829,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bian-cheng","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发编程","併發編程","2000-1900",{"path":3831,"stem":3832,"title":3833,"date":3518,"chapterOrder":3834,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2000-std-filesystem","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2000-std-filesystem","std::filesystem","2000-2000",{"path":3836,"stem":3837,"title":3838,"date":3518,"chapterOrder":3839,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","modules 簡介","2000-2100",{"path":3841,"stem":3842,"title":3843,"date":3518,"chapterOrder":3844,"chapterDepth":3540,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","現代C++","2000",{"path":3846,"stem":3847,"title":3848,"date":3518,"chapterOrder":3849,"chapterDepth":263,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0100-ding-shi-qi-yu-yi-bu-io","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0100-定时器与异步IO","定時器與異步 IO","2100-0100-0100",{"path":3851,"stem":3852,"title":3853,"date":3518,"chapterOrder":3854,"chapterDepth":263,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0200-boost-asio-ji-chu","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0200-Boost.Asio基础","Boost.Asio 基礎","2100-0100-0200",{"path":3856,"stem":3857,"title":3858,"date":3518,"chapterOrder":3859,"chapterDepth":263,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0300-chuan-kou-tong-xin","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0300-串口通信","串口通信","2100-0100-0300",{"path":3861,"stem":3862,"title":3863,"date":3518,"chapterOrder":3864,"chapterDepth":263,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0400-tcp-tong-xin","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0400-TCP通信","TCP 通信","2100-0100-0400",{"path":3866,"stem":3867,"title":3868,"date":3518,"chapterOrder":3869,"chapterDepth":263,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0500-udp-tong-xin","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0500-UDP通信","UDP 通信","2100-0100-0500",{"path":3871,"stem":3872,"title":3873,"date":3518,"chapterOrder":3874,"chapterDepth":263,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0600-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0600-机器人工程写法与ROS2集成","機器人工程寫法與 ROS2 集成","2100-0100-0600",{"path":3876,"stem":3877,"title":3878,"date":3518,"chapterOrder":3879,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","Boost.Asio異步IO庫","2100-0100",{"path":3881,"stem":3882,"title":3883,"date":3518,"chapterOrder":3884,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0200-eigen-xian-xing-dai-shu-ku","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0200-Eigen线性代数库","Eigen線性代數庫","2100-0200",{"path":3886,"stem":3887,"title":3888,"date":3518,"chapterOrder":3889,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0300-opencv-ji-suan-ji-shi-jue-ku","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0300-OpenCV计算机视觉库","OpenCV計算機視覺庫","2100-0300",{"path":3891,"stem":3892,"title":3893,"date":3518,"chapterOrder":3894,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0400-pcl-dian-yun-ku","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0400-PCL点云库","PCL點雲庫","2100-0400",{"path":3896,"stem":3897,"title":3898,"date":3518,"chapterOrder":3899,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0500-sophus-li-qun-li-dai-shu-ku","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0500-Sophus李群李代数库","Sophus 李羣李代數庫","2100-0500",{"path":3901,"stem":3902,"title":3903,"date":3518,"chapterOrder":3904,"chapterDepth":3540,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","常用庫學習","2100",{"path":3906,"stem":3907,"title":3908,"date":3518,"chapterOrder":3909,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0100-cmakepresets-yu-gou-jian-an-zhuang","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0100-CMakePresets与构建安装","CMakePresets與構建安裝","2200-0100",{"path":3911,"stem":3912,"title":3913,"date":3518,"chapterOrder":3914,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项","頂層CMake與公共編譯選項","2200-0200",{"path":3916,"stem":3917,"title":3918,"date":3518,"chapterOrder":3919,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0300-src-yu-lib-mo-kuai-cmake-xiang-jie","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0300-src与lib模块CMake详解","src與lib模塊CMake詳解","2200-0300",{"path":3921,"stem":3922,"title":3923,"date":3518,"chapterOrder":3924,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法","第三方庫依賴寫法","2200-0400",{"path":3926,"stem":3927,"title":3928,"date":3518,"chapterOrder":3929,"chapterDepth":71,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0500-mu-ban-kuo-zhan-yu-chang-jian-wen-ti","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0500-模板扩展与常见问题","模板擴展與常見問題","2200-0500",{"path":3931,"stem":3932,"title":3933,"date":3518,"chapterOrder":3934,"chapterDepth":3540,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":3525},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake工程模板","2200",{"path":3521,"stem":3936,"title":3937,"date":3518,"chapterOrder":3526,"chapterDepth":3540,"docKey":3520,"docRoot":3521,"docTitle":3522,"isWikiDoc":266,"isWikiIndex":266},"_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++教程",{"variants":3939},[3940,3943,3944,3947,3950],{"path":3941,"localeSlug":3942,"i18nKey":3524},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","en-us",{"path":3516,"localeSlug":3528,"i18nKey":3524},{"path":3945,"localeSlug":3946,"i18nKey":3524},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","zh-hk",{"path":3948,"localeSlug":3949,"i18nKey":3524},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","zh-tw",{"path":3951,"localeSlug":3952,"i18nKey":3524},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","zh-cn",[3941,3531,3516,3531,3945,3531,3948,3531,3951,3531],1784646812710]