[{"data":1,"prerenderedAt":3386},["ShallowReactive",2],{"wiki-page-\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional":3,"wiki-doc-items-\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional":2956,"language-switcher-data-\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional":3370,"wiki-i18n-paths-\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional":3385},{"id":4,"title":5,"body":6,"canonicalPath":2938,"chapterDepth":89,"chapterOrder":2939,"date":2940,"description":82,"docI18nKey":2941,"docKey":2942,"docRoot":2943,"docTitle":2944,"extension":2945,"i18nKey":2946,"isBlogPost":2947,"isWikiDoc":187,"isWikiIndex":2947,"layout":2948,"legacyPath":2948,"locale":2949,"localeSlug":2950,"meta":2951,"navigation":187,"path":2938,"seo":2952,"sourcePath":2953,"sourceStem":2946,"stem":2954,"wikiDepth":89,"__hash__":2955},"content\u002F_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional.md","std::optional",{"type":7,"value":8,"toc":2917},"minimark",[9,13,17,20,48,54,57,66,70,73,76,98,101,292,295,380,383,388,929,936,944,948,1432,1436,1442,1449,1476,1486,1500,1506,1518,1524,1533,1537,1914,1918,1924,1926,1929,1932,2034,2038,2043,2106,2110,2653,2657,2663,2672,2675,2682,2713,2722,2733,2759,2765,2774,2806,2813,2816,2882,2885,2913],[10,11,12],"h2",{"id":12},"本節解決什麼問題",[14,15,16],"p",{},"函數返回結果時，如何表示\"沒有結果\"？",[14,18,19],{},"常見的做法各有缺點：",[21,22,23,39,45],"ul",{},[24,25,26,27,31,32,35,36,38],"li",{},"返回 ",[28,29,30],"code",{},"-1"," 或 ",[28,33,34],{},"nullptr","：語義不清晰，且 ",[28,37,30],{}," 可能是合法值。",[24,40,26,41,44],{},[28,42,43],{},"bool"," + 輸出參數：代碼冗長，需要先聲明變量。",[24,46,47],{},"拋出異常：異常有開銷，且\"查不到\"往往不算異常情況。",[14,49,50,53],{},[28,51,52],{},"std::optional\u003CT>"," 優雅地表達了\"可能有值、也可能沒有值\"的語義。",[10,55,56],{"id":56},"這個特性是什麼",[14,58,59,61,62,65],{},[28,60,52],{}," 是一個模板類，它要麼包含一個 ",[28,63,64],{},"T"," 類型的值，要麼為空（沒有值）。它讓\"可能沒有值\"這個信息成為類型的一部分，編譯器幫你檢查。",[10,67,69],{"id":68},"c-標準版本","C++ 標準版本",[14,71,72],{},"C++17",[10,74,75],{"id":75},"需要的頭文件",[77,78,83],"pre",{"className":79,"code":80,"language":81,"meta":82,"style":82},"language-cpp shiki shiki-themes github-light github-dark","#include \u003Coptional>\n","cpp","",[28,84,85],{"__ignoreMap":82},[86,87,90,94],"span",{"class":88,"line":89},"line",1,[86,91,93],{"class":92},"szBVR","#include",[86,95,97],{"class":96},"sZZnC"," \u003Coptional>\n",[10,99,100],{"id":100},"基本語法",[77,102,104],{"className":79,"code":103,"language":81,"meta":82,"style":82},"std::optional\u003CT> opt;                    \u002F\u002F 默认空\nstd::optional\u003CT> opt = value;            \u002F\u002F 有值\nstd::optional\u003CT> opt = std::nullopt;     \u002F\u002F 显式空\n\n\u002F\u002F 检查是否有值\nif (opt.has_value()) { ... }\nif (opt) { ... }                         \u002F\u002F 隐式转 bool\n\n\u002F\u002F 获取值\nT val = opt.value();                     \u002F\u002F 若无值抛异常\nT val = *opt;                            \u002F\u002F 若无值是未定义行为\nT val = opt.value_or(default);           \u002F\u002F 若无值返回默认值\n",[28,105,106,131,156,182,189,195,210,221,226,232,252,268],{"__ignoreMap":82},[86,107,108,112,116,119,121,124,127],{"class":88,"line":89},[86,109,111],{"class":110},"sScJk","std",[86,113,115],{"class":114},"sVt8B","::optional",[86,117,118],{"class":92},"\u003C",[86,120,64],{"class":114},[86,122,123],{"class":92},">",[86,125,126],{"class":114}," opt;",[86,128,130],{"class":129},"sJ8bj","                    \u002F\u002F 默认空\n",[86,132,134,136,138,140,142,144,147,150,153],{"class":88,"line":133},2,[86,135,111],{"class":110},[86,137,115],{"class":114},[86,139,118],{"class":92},[86,141,64],{"class":114},[86,143,123],{"class":92},[86,145,146],{"class":114}," opt ",[86,148,149],{"class":92},"=",[86,151,152],{"class":114}," value;",[86,154,155],{"class":129},"            \u002F\u002F 有值\n",[86,157,159,161,163,165,167,169,171,173,176,179],{"class":88,"line":158},3,[86,160,111],{"class":110},[86,162,115],{"class":114},[86,164,118],{"class":92},[86,166,64],{"class":114},[86,168,123],{"class":92},[86,170,146],{"class":114},[86,172,149],{"class":92},[86,174,175],{"class":110}," std",[86,177,178],{"class":114},"::nullopt;",[86,180,181],{"class":129},"     \u002F\u002F 显式空\n",[86,183,185],{"class":88,"line":184},4,[86,186,188],{"emptyLinePlaceholder":187},true,"\n",[86,190,192],{"class":88,"line":191},5,[86,193,194],{"class":129},"\u002F\u002F 检查是否有值\n",[86,196,198,201,204,207],{"class":88,"line":197},6,[86,199,200],{"class":92},"if",[86,202,203],{"class":114}," (opt.",[86,205,206],{"class":110},"has_value",[86,208,209],{"class":114},"()) { ... }\n",[86,211,213,215,218],{"class":88,"line":212},7,[86,214,200],{"class":92},[86,216,217],{"class":114}," (opt) { ... }",[86,219,220],{"class":129},"                         \u002F\u002F 隐式转 bool\n",[86,222,224],{"class":88,"line":223},8,[86,225,188],{"emptyLinePlaceholder":187},[86,227,229],{"class":88,"line":228},9,[86,230,231],{"class":129},"\u002F\u002F 获取值\n",[86,233,235,238,240,243,246,249],{"class":88,"line":234},10,[86,236,237],{"class":114},"T val ",[86,239,149],{"class":92},[86,241,242],{"class":114}," opt.",[86,244,245],{"class":110},"value",[86,247,248],{"class":114},"();",[86,250,251],{"class":129},"                     \u002F\u002F 若无值抛异常\n",[86,253,255,257,259,262,265],{"class":88,"line":254},11,[86,256,237],{"class":114},[86,258,149],{"class":92},[86,260,261],{"class":92}," *",[86,263,264],{"class":114},"opt;",[86,266,267],{"class":129},"                            \u002F\u002F 若无值是未定义行为\n",[86,269,271,273,275,277,280,283,286,289],{"class":88,"line":270},12,[86,272,237],{"class":114},[86,274,149],{"class":92},[86,276,242],{"class":114},[86,278,279],{"class":110},"value_or",[86,281,282],{"class":114},"(",[86,284,285],{"class":92},"default",[86,287,288],{"class":114},");",[86,290,291],{"class":129},"           \u002F\u002F 若无值返回默认值\n",[10,293,294],{"id":294},"常用用法",[296,297,298,312],"table",{},[299,300,301],"thead",{},[302,303,304,309],"tr",{},[305,306,308],"th",{"align":307},"left","操作",[305,310,311],{"align":307},"說明",[313,314,315,326,340,350,360,370],"tbody",{},[302,316,317,323],{},[318,319,320],"td",{"align":307},[28,321,322],{},"opt.has_value()",[318,324,325],{"align":307},"是否有值",[302,327,328,333],{},[318,329,330],{"align":307},[28,331,332],{},"opt.value()",[318,334,335,336,339],{"align":307},"獲取值（無值拋 ",[28,337,338],{},"std::bad_optional_access","）",[302,341,342,347],{},[318,343,344],{"align":307},[28,345,346],{},"*opt",[318,348,349],{"align":307},"獲取值（無值行為未定義，先檢查！）",[302,351,352,357],{},[318,353,354],{"align":307},[28,355,356],{},"opt.value_or(default)",[318,358,359],{"align":307},"獲取值，無值返回默認值",[302,361,362,367],{},[318,363,364],{"align":307},[28,365,366],{},"opt = std::nullopt",[318,368,369],{"align":307},"清空",[302,371,372,377],{},[318,373,374],{"align":307},[28,375,376],{},"opt.emplace(args...)",[318,378,379],{"align":307},"原地構造值",[10,381,382],{"id":382},"示例代碼",[384,385,387],"h3",{"id":386},"示例-1用-optional-表示可能找不到","示例 1：用 optional 表示\"可能找不到\"",[77,389,391],{"className":79,"code":390,"language":81,"meta":82,"style":82},"#include \u003Ciostream>\n#include \u003Coptional>\n#include \u003Cstring>\n#include \u003Cvector>\n\n\u002F\u002F 在 vector 中查找元素，返回位置（可能找不到）\nstd::optional\u003Csize_t> find_index(const std::vector\u003Cstd::string>& v,\n                                  const std::string& target)\n{\n    for (size_t i = 0; i \u003C v.size(); ++i)\n    {\n        if (v[i] == target)\n        {\n            return i;  \u002F\u002F 找到了\n        }\n    }\n    return std::nullopt;  \u002F\u002F 没找到\n}\n\nint main()\n{\n    std::vector\u003Cstd::string> names = {\"Alice\", \"Bob\", \"Charlie\"};\n\n    auto idx = find_index(names, \"Bob\");\n    if (idx)\n    {\n        std::cout \u003C\u003C \"Found Bob at index \" \u003C\u003C *idx \u003C\u003C \"\\n\";\n    }\n\n    auto idx2 = find_index(names, \"David\");\n    if (!idx2)\n    {\n        std::cout \u003C\u003C \"David not found\\n\";\n    }\n\n    \u002F\u002F 使用 value_or 提供默认值\n    std::cout \u003C\u003C \"Result: \" \u003C\u003C idx.value_or(999) \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"Result2: \" \u003C\u003C idx2.value_or(999) \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[28,392,393,400,406,413,420,424,429,483,502,507,546,551,565,571,583,589,595,608,614,619,631,636,679,684,706,715,720,757,762,767,786,799,804,822,827,832,838,875,910,915,924],{"__ignoreMap":82},[86,394,395,397],{"class":88,"line":89},[86,396,93],{"class":92},[86,398,399],{"class":96}," \u003Ciostream>\n",[86,401,402,404],{"class":88,"line":133},[86,403,93],{"class":92},[86,405,97],{"class":96},[86,407,408,410],{"class":88,"line":158},[86,409,93],{"class":92},[86,411,412],{"class":96}," \u003Cstring>\n",[86,414,415,417],{"class":88,"line":184},[86,416,93],{"class":92},[86,418,419],{"class":96}," \u003Cvector>\n",[86,421,422],{"class":88,"line":191},[86,423,188],{"emptyLinePlaceholder":187},[86,425,426],{"class":88,"line":197},[86,427,428],{"class":129},"\u002F\u002F 在 vector 中查找元素，返回位置（可能找不到）\n",[86,430,431,433,436,439,441,444,447,450,452,455,457,459,462,464,466,468,471,473,476,480],{"class":88,"line":212},[86,432,111],{"class":110},[86,434,435],{"class":114},"::",[86,437,438],{"class":110},"optional",[86,440,118],{"class":114},[86,442,443],{"class":92},"size_t",[86,445,446],{"class":114},"> ",[86,448,449],{"class":110},"find_index",[86,451,282],{"class":114},[86,453,454],{"class":92},"const",[86,456,175],{"class":110},[86,458,435],{"class":114},[86,460,461],{"class":110},"vector",[86,463,118],{"class":114},[86,465,111],{"class":110},[86,467,435],{"class":114},[86,469,470],{"class":110},"string",[86,472,123],{"class":114},[86,474,475],{"class":92},"&",[86,477,479],{"class":478},"s4XuR"," v",[86,481,482],{"class":114},",\n",[86,484,485,488,490,492,494,496,499],{"class":88,"line":223},[86,486,487],{"class":92},"                                  const",[86,489,175],{"class":110},[86,491,435],{"class":114},[86,493,470],{"class":110},[86,495,475],{"class":92},[86,497,498],{"class":478}," target",[86,500,501],{"class":114},")\n",[86,503,504],{"class":88,"line":228},[86,505,506],{"class":114},"{\n",[86,508,509,512,515,517,520,522,526,529,531,534,537,540,543],{"class":88,"line":234},[86,510,511],{"class":92},"    for",[86,513,514],{"class":114}," (",[86,516,443],{"class":92},[86,518,519],{"class":114}," i ",[86,521,149],{"class":92},[86,523,525],{"class":524},"sj4cs"," 0",[86,527,528],{"class":114},"; i ",[86,530,118],{"class":92},[86,532,533],{"class":114}," v.",[86,535,536],{"class":110},"size",[86,538,539],{"class":114},"(); ",[86,541,542],{"class":92},"++",[86,544,545],{"class":114},"i)\n",[86,547,548],{"class":88,"line":254},[86,549,550],{"class":114},"    {\n",[86,552,553,556,559,562],{"class":88,"line":270},[86,554,555],{"class":92},"        if",[86,557,558],{"class":114}," (v[i] ",[86,560,561],{"class":92},"==",[86,563,564],{"class":114}," target)\n",[86,566,568],{"class":88,"line":567},13,[86,569,570],{"class":114},"        {\n",[86,572,574,577,580],{"class":88,"line":573},14,[86,575,576],{"class":92},"            return",[86,578,579],{"class":114}," i;",[86,581,582],{"class":129},"  \u002F\u002F 找到了\n",[86,584,586],{"class":88,"line":585},15,[86,587,588],{"class":114},"        }\n",[86,590,592],{"class":88,"line":591},16,[86,593,594],{"class":114},"    }\n",[86,596,598,601,603,605],{"class":88,"line":597},17,[86,599,600],{"class":92},"    return",[86,602,175],{"class":110},[86,604,178],{"class":114},[86,606,607],{"class":129},"  \u002F\u002F 没找到\n",[86,609,611],{"class":88,"line":610},18,[86,612,613],{"class":114},"}\n",[86,615,617],{"class":88,"line":616},19,[86,618,188],{"emptyLinePlaceholder":187},[86,620,622,625,628],{"class":88,"line":621},20,[86,623,624],{"class":92},"int",[86,626,627],{"class":110}," main",[86,629,630],{"class":114},"()\n",[86,632,634],{"class":88,"line":633},21,[86,635,506],{"class":114},[86,637,639,642,645,647,649,652,654,657,659,662,665,668,671,673,676],{"class":88,"line":638},22,[86,640,641],{"class":110},"    std",[86,643,644],{"class":114},"::vector",[86,646,118],{"class":92},[86,648,111],{"class":110},[86,650,651],{"class":114},"::string",[86,653,123],{"class":92},[86,655,656],{"class":114}," names ",[86,658,149],{"class":92},[86,660,661],{"class":114}," {",[86,663,664],{"class":96},"\"Alice\"",[86,666,667],{"class":114},", ",[86,669,670],{"class":96},"\"Bob\"",[86,672,667],{"class":114},[86,674,675],{"class":96},"\"Charlie\"",[86,677,678],{"class":114},"};\n",[86,680,682],{"class":88,"line":681},23,[86,683,188],{"emptyLinePlaceholder":187},[86,685,687,690,693,695,698,701,703],{"class":88,"line":686},24,[86,688,689],{"class":92},"    auto",[86,691,692],{"class":114}," idx ",[86,694,149],{"class":92},[86,696,697],{"class":110}," find_index",[86,699,700],{"class":114},"(names, ",[86,702,670],{"class":96},[86,704,705],{"class":114},");\n",[86,707,709,712],{"class":88,"line":708},25,[86,710,711],{"class":92},"    if",[86,713,714],{"class":114}," (idx)\n",[86,716,718],{"class":88,"line":717},26,[86,719,550],{"class":114},[86,721,723,726,729,732,735,738,740,743,745,748,751,754],{"class":88,"line":722},27,[86,724,725],{"class":110},"        std",[86,727,728],{"class":114},"::cout ",[86,730,731],{"class":92},"\u003C\u003C",[86,733,734],{"class":96}," \"Found Bob at index \"",[86,736,737],{"class":92}," \u003C\u003C",[86,739,261],{"class":92},[86,741,742],{"class":114},"idx ",[86,744,731],{"class":92},[86,746,747],{"class":96}," \"",[86,749,750],{"class":524},"\\n",[86,752,753],{"class":96},"\"",[86,755,756],{"class":114},";\n",[86,758,760],{"class":88,"line":759},28,[86,761,594],{"class":114},[86,763,765],{"class":88,"line":764},29,[86,766,188],{"emptyLinePlaceholder":187},[86,768,770,772,775,777,779,781,784],{"class":88,"line":769},30,[86,771,689],{"class":92},[86,773,774],{"class":114}," idx2 ",[86,776,149],{"class":92},[86,778,697],{"class":110},[86,780,700],{"class":114},[86,782,783],{"class":96},"\"David\"",[86,785,705],{"class":114},[86,787,789,791,793,796],{"class":88,"line":788},31,[86,790,711],{"class":92},[86,792,514],{"class":114},[86,794,795],{"class":92},"!",[86,797,798],{"class":114},"idx2)\n",[86,800,802],{"class":88,"line":801},32,[86,803,550],{"class":114},[86,805,807,809,811,813,816,818,820],{"class":88,"line":806},33,[86,808,725],{"class":110},[86,810,728],{"class":114},[86,812,731],{"class":92},[86,814,815],{"class":96}," \"David not found",[86,817,750],{"class":524},[86,819,753],{"class":96},[86,821,756],{"class":114},[86,823,825],{"class":88,"line":824},34,[86,826,594],{"class":114},[86,828,830],{"class":88,"line":829},35,[86,831,188],{"emptyLinePlaceholder":187},[86,833,835],{"class":88,"line":834},36,[86,836,837],{"class":129},"    \u002F\u002F 使用 value_or 提供默认值\n",[86,839,841,843,845,847,850,852,855,857,859,862,865,867,869,871,873],{"class":88,"line":840},37,[86,842,641],{"class":110},[86,844,728],{"class":114},[86,846,731],{"class":92},[86,848,849],{"class":96}," \"Result: \"",[86,851,737],{"class":92},[86,853,854],{"class":114}," idx.",[86,856,279],{"class":110},[86,858,282],{"class":114},[86,860,861],{"class":524},"999",[86,863,864],{"class":114},") ",[86,866,731],{"class":92},[86,868,747],{"class":96},[86,870,750],{"class":524},[86,872,753],{"class":96},[86,874,756],{"class":114},[86,876,878,880,882,884,887,889,892,894,896,898,900,902,904,906,908],{"class":88,"line":877},38,[86,879,641],{"class":110},[86,881,728],{"class":114},[86,883,731],{"class":92},[86,885,886],{"class":96}," \"Result2: \"",[86,888,737],{"class":92},[86,890,891],{"class":114}," idx2.",[86,893,279],{"class":110},[86,895,282],{"class":114},[86,897,861],{"class":524},[86,899,864],{"class":114},[86,901,731],{"class":92},[86,903,747],{"class":96},[86,905,750],{"class":524},[86,907,753],{"class":96},[86,909,756],{"class":114},[86,911,913],{"class":88,"line":912},39,[86,914,188],{"emptyLinePlaceholder":187},[86,916,918,920,922],{"class":88,"line":917},40,[86,919,600],{"class":92},[86,921,525],{"class":524},[86,923,756],{"class":114},[86,925,927],{"class":88,"line":926},41,[86,928,613],{"class":114},[14,930,931,935],{},[932,933,934],"strong",{},"運行結果","：",[77,937,942],{"className":938,"code":940,"language":941},[939],"language-text","Found Bob at index 1\nDavid not found\nResult: 1\nResult2: 999\n","text",[28,943,940],{"__ignoreMap":82},[384,945,947],{"id":946},"示例-2在示例-1-基礎上用-optional-表示可能失敗的轉換","示例 2：在示例 1 基礎上，用 optional 表示\"可能失敗的轉換\"",[77,949,951],{"className":79,"code":950,"language":81,"meta":82,"style":82},"#include \u003Ciostream>\n#include \u003Coptional>\n#include \u003Cstring>\n\n\u002F\u002F 字符串转整数，失败返回 nullopt\nstd::optional\u003Cint> to_int(const std::string& s)\n{\n    try\n    {\n        size_t pos;\n        int val = std::stoi(s, &pos);\n        if (pos == s.size())  \u002F\u002F 整个字符串都被转换了\n        {\n            return val;\n        }\n    }\n    catch (...) {}\n    return std::nullopt;\n}\n\nint main()\n{\n    auto r1 = to_int(\"42\");\n    auto r2 = to_int(\"3.14\");  \u002F\u002F 带小数点\n    auto r3 = to_int(\"hello\"); \u002F\u002F 不是数字\n\n    std::cout \u003C\u003C \"\\\"42\\\" -> \" \u003C\u003C r1.value_or(-1) \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"\\\"3.14\\\" -> \" \u003C\u003C r2.value_or(-1) \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"\\\"hello\\\" -> \" \u003C\u003C r3.value_or(-1) \u003C\u003C \"\\n\";\n\n    \u002F\u002F 用 if 检查\n    if (auto r = to_int(\"100\"); r)\n    {\n        std::cout \u003C\u003C \"100 * 2 = \" \u003C\u003C (*r * 2) \u003C\u003C \"\\n\";\n    }\n\n    return 0;\n}\n",[28,952,953,959,965,971,975,980,1014,1018,1023,1027,1035,1060,1080,1084,1091,1095,1099,1107,1116,1120,1124,1132,1136,1155,1176,1197,1201,1249,1293,1337,1341,1346,1370,1374,1412,1416,1420,1428],{"__ignoreMap":82},[86,954,955,957],{"class":88,"line":89},[86,956,93],{"class":92},[86,958,399],{"class":96},[86,960,961,963],{"class":88,"line":133},[86,962,93],{"class":92},[86,964,97],{"class":96},[86,966,967,969],{"class":88,"line":158},[86,968,93],{"class":92},[86,970,412],{"class":96},[86,972,973],{"class":88,"line":184},[86,974,188],{"emptyLinePlaceholder":187},[86,976,977],{"class":88,"line":191},[86,978,979],{"class":129},"\u002F\u002F 字符串转整数，失败返回 nullopt\n",[86,981,982,984,986,988,990,992,994,997,999,1001,1003,1005,1007,1009,1012],{"class":88,"line":197},[86,983,111],{"class":110},[86,985,435],{"class":114},[86,987,438],{"class":110},[86,989,118],{"class":114},[86,991,624],{"class":92},[86,993,446],{"class":114},[86,995,996],{"class":110},"to_int",[86,998,282],{"class":114},[86,1000,454],{"class":92},[86,1002,175],{"class":110},[86,1004,435],{"class":114},[86,1006,470],{"class":110},[86,1008,475],{"class":92},[86,1010,1011],{"class":478}," s",[86,1013,501],{"class":114},[86,1015,1016],{"class":88,"line":212},[86,1017,506],{"class":114},[86,1019,1020],{"class":88,"line":223},[86,1021,1022],{"class":92},"    try\n",[86,1024,1025],{"class":88,"line":228},[86,1026,550],{"class":114},[86,1028,1029,1032],{"class":88,"line":234},[86,1030,1031],{"class":92},"        size_t",[86,1033,1034],{"class":114}," pos;\n",[86,1036,1037,1040,1043,1045,1047,1049,1052,1055,1057],{"class":88,"line":254},[86,1038,1039],{"class":92},"        int",[86,1041,1042],{"class":114}," val ",[86,1044,149],{"class":92},[86,1046,175],{"class":110},[86,1048,435],{"class":114},[86,1050,1051],{"class":110},"stoi",[86,1053,1054],{"class":114},"(s, ",[86,1056,475],{"class":92},[86,1058,1059],{"class":114},"pos);\n",[86,1061,1062,1064,1067,1069,1072,1074,1077],{"class":88,"line":270},[86,1063,555],{"class":92},[86,1065,1066],{"class":114}," (pos ",[86,1068,561],{"class":92},[86,1070,1071],{"class":114}," s.",[86,1073,536],{"class":110},[86,1075,1076],{"class":114},"())",[86,1078,1079],{"class":129},"  \u002F\u002F 整个字符串都被转换了\n",[86,1081,1082],{"class":88,"line":567},[86,1083,570],{"class":114},[86,1085,1086,1088],{"class":88,"line":573},[86,1087,576],{"class":92},[86,1089,1090],{"class":114}," val;\n",[86,1092,1093],{"class":88,"line":585},[86,1094,588],{"class":114},[86,1096,1097],{"class":88,"line":591},[86,1098,594],{"class":114},[86,1100,1101,1104],{"class":88,"line":597},[86,1102,1103],{"class":92},"    catch",[86,1105,1106],{"class":114}," (...) {}\n",[86,1108,1109,1111,1113],{"class":88,"line":610},[86,1110,600],{"class":92},[86,1112,175],{"class":110},[86,1114,1115],{"class":114},"::nullopt;\n",[86,1117,1118],{"class":88,"line":616},[86,1119,613],{"class":114},[86,1121,1122],{"class":88,"line":621},[86,1123,188],{"emptyLinePlaceholder":187},[86,1125,1126,1128,1130],{"class":88,"line":633},[86,1127,624],{"class":92},[86,1129,627],{"class":110},[86,1131,630],{"class":114},[86,1133,1134],{"class":88,"line":638},[86,1135,506],{"class":114},[86,1137,1138,1140,1143,1145,1148,1150,1153],{"class":88,"line":681},[86,1139,689],{"class":92},[86,1141,1142],{"class":114}," r1 ",[86,1144,149],{"class":92},[86,1146,1147],{"class":110}," to_int",[86,1149,282],{"class":114},[86,1151,1152],{"class":96},"\"42\"",[86,1154,705],{"class":114},[86,1156,1157,1159,1162,1164,1166,1168,1171,1173],{"class":88,"line":686},[86,1158,689],{"class":92},[86,1160,1161],{"class":114}," r2 ",[86,1163,149],{"class":92},[86,1165,1147],{"class":110},[86,1167,282],{"class":114},[86,1169,1170],{"class":96},"\"3.14\"",[86,1172,288],{"class":114},[86,1174,1175],{"class":129},"  \u002F\u002F 带小数点\n",[86,1177,1178,1180,1183,1185,1187,1189,1192,1194],{"class":88,"line":708},[86,1179,689],{"class":92},[86,1181,1182],{"class":114}," r3 ",[86,1184,149],{"class":92},[86,1186,1147],{"class":110},[86,1188,282],{"class":114},[86,1190,1191],{"class":96},"\"hello\"",[86,1193,288],{"class":114},[86,1195,1196],{"class":129}," \u002F\u002F 不是数字\n",[86,1198,1199],{"class":88,"line":717},[86,1200,188],{"emptyLinePlaceholder":187},[86,1202,1203,1205,1207,1209,1211,1214,1217,1219,1222,1224,1227,1229,1231,1234,1237,1239,1241,1243,1245,1247],{"class":88,"line":722},[86,1204,641],{"class":110},[86,1206,728],{"class":114},[86,1208,731],{"class":92},[86,1210,747],{"class":96},[86,1212,1213],{"class":524},"\\\"",[86,1215,1216],{"class":96},"42",[86,1218,1213],{"class":524},[86,1220,1221],{"class":96}," -> \"",[86,1223,737],{"class":92},[86,1225,1226],{"class":114}," r1.",[86,1228,279],{"class":110},[86,1230,282],{"class":114},[86,1232,1233],{"class":92},"-",[86,1235,1236],{"class":524},"1",[86,1238,864],{"class":114},[86,1240,731],{"class":92},[86,1242,747],{"class":96},[86,1244,750],{"class":524},[86,1246,753],{"class":96},[86,1248,756],{"class":114},[86,1250,1251,1253,1255,1257,1259,1261,1264,1266,1268,1270,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291],{"class":88,"line":759},[86,1252,641],{"class":110},[86,1254,728],{"class":114},[86,1256,731],{"class":92},[86,1258,747],{"class":96},[86,1260,1213],{"class":524},[86,1262,1263],{"class":96},"3.14",[86,1265,1213],{"class":524},[86,1267,1221],{"class":96},[86,1269,737],{"class":92},[86,1271,1272],{"class":114}," r2.",[86,1274,279],{"class":110},[86,1276,282],{"class":114},[86,1278,1233],{"class":92},[86,1280,1236],{"class":524},[86,1282,864],{"class":114},[86,1284,731],{"class":92},[86,1286,747],{"class":96},[86,1288,750],{"class":524},[86,1290,753],{"class":96},[86,1292,756],{"class":114},[86,1294,1295,1297,1299,1301,1303,1305,1308,1310,1312,1314,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335],{"class":88,"line":764},[86,1296,641],{"class":110},[86,1298,728],{"class":114},[86,1300,731],{"class":92},[86,1302,747],{"class":96},[86,1304,1213],{"class":524},[86,1306,1307],{"class":96},"hello",[86,1309,1213],{"class":524},[86,1311,1221],{"class":96},[86,1313,737],{"class":92},[86,1315,1316],{"class":114}," r3.",[86,1318,279],{"class":110},[86,1320,282],{"class":114},[86,1322,1233],{"class":92},[86,1324,1236],{"class":524},[86,1326,864],{"class":114},[86,1328,731],{"class":92},[86,1330,747],{"class":96},[86,1332,750],{"class":524},[86,1334,753],{"class":96},[86,1336,756],{"class":114},[86,1338,1339],{"class":88,"line":769},[86,1340,188],{"emptyLinePlaceholder":187},[86,1342,1343],{"class":88,"line":788},[86,1344,1345],{"class":129},"    \u002F\u002F 用 if 检查\n",[86,1347,1348,1350,1352,1355,1358,1360,1362,1364,1367],{"class":88,"line":801},[86,1349,711],{"class":92},[86,1351,514],{"class":114},[86,1353,1354],{"class":92},"auto",[86,1356,1357],{"class":114}," r ",[86,1359,149],{"class":92},[86,1361,1147],{"class":110},[86,1363,282],{"class":114},[86,1365,1366],{"class":96},"\"100\"",[86,1368,1369],{"class":114},"); r)\n",[86,1371,1372],{"class":88,"line":806},[86,1373,550],{"class":114},[86,1375,1376,1378,1380,1382,1385,1387,1389,1392,1395,1397,1400,1402,1404,1406,1408,1410],{"class":88,"line":824},[86,1377,725],{"class":110},[86,1379,728],{"class":114},[86,1381,731],{"class":92},[86,1383,1384],{"class":96}," \"100 * 2 = \"",[86,1386,737],{"class":92},[86,1388,514],{"class":114},[86,1390,1391],{"class":92},"*",[86,1393,1394],{"class":114},"r ",[86,1396,1391],{"class":92},[86,1398,1399],{"class":524}," 2",[86,1401,864],{"class":114},[86,1403,731],{"class":92},[86,1405,747],{"class":96},[86,1407,750],{"class":524},[86,1409,753],{"class":96},[86,1411,756],{"class":114},[86,1413,1414],{"class":88,"line":829},[86,1415,594],{"class":114},[86,1417,1418],{"class":88,"line":834},[86,1419,188],{"emptyLinePlaceholder":187},[86,1421,1422,1424,1426],{"class":88,"line":840},[86,1423,600],{"class":92},[86,1425,525],{"class":524},[86,1427,756],{"class":114},[86,1429,1430],{"class":88,"line":877},[86,1431,613],{"class":114},[14,1433,1434,935],{},[932,1435,934],{},[77,1437,1440],{"className":1438,"code":1439,"language":941},[939],"\"42\" -> 42\n\"3.14\" -> -1\n\"hello\" -> -1\n100 * 2 = 200\n",[28,1441,1439],{"__ignoreMap":82},[14,1443,1444,1445,1448],{},"這裡的",[28,1446,1447],{},"std::stoi","函數，他的轉換規則是：從字符串開頭（必須數字為開頭）開始，儘可能解析一個整數；只要能解析出一部分，就算 stoi 本身成功。\n例如：",[21,1450,1451,1462,1469],{},[24,1452,1453,1454,1457,1458,1461],{},"轉換",[28,1455,1456],{},"\"123\"","字符串，結果是成功的，為",[28,1459,1460],{},"123","。",[24,1463,1453,1464,1457,1467,1461],{},[28,1465,1466],{},"\"123abc\"",[28,1468,1460],{},[24,1470,1453,1471,1457,1473,1461],{},[28,1472,1170],{},[28,1474,1475],{},"3",[14,1477,1478,1479,1482,1483,1485],{},"而這個函數的",[28,1480,1481],{},"pos","參數表示",[28,1484,1447],{},"解析到了字符串的哪個位置，也就是第一個沒有被轉換的字符的位置。\n例如：",[21,1487,1488],{},[24,1489,1453,1490,1492,1493,1496,1497,1499],{},[28,1491,1466],{},"字符串，",[28,1494,1495],{},"val","是123,但",[28,1498,1481],{},"是3。（序號從0開始，如下圖）",[77,1501,1504],{"className":1502,"code":1503,"language":941,"meta":82},[939],"123abc\n012345\n   ↑\n   pos = 3\n",[28,1505,1503],{"__ignoreMap":82},[21,1507,1508],{},[24,1509,1453,1510,1492,1512,1514,1515,1517],{},[28,1511,1170],{},[28,1513,1495],{},"是3,但",[28,1516,1481],{},"是1。（序號從0開始，如下圖）",[77,1519,1522],{"className":1520,"code":1521,"language":941,"meta":82},[939],"3.14\n0123\n ↑\n pos = 1\n",[28,1523,1521],{"__ignoreMap":82},[14,1525,1444,1526,1529,1530,1461],{},[28,1527,1528],{},"pos == s.size()","是不成立的，所以返回",[28,1531,1532],{},"std::nullopt",[384,1534,1536],{"id":1535},"示例-3在示例-2-基礎上用-optional-作為結構體成員可能沒有的字段","示例 3：在示例 2 基礎上，用 optional 作為結構體成員（\"可能沒有\"的字段）",[77,1538,1540],{"className":79,"code":1539,"language":81,"meta":82,"style":82},"#include \u003Ciostream>\n#include \u003Coptional>\n#include \u003Cstring>\n\nstruct Person\n{\n    std::string name;\n    int age;\n    std::optional\u003Cstd::string> nickname;  \u002F\u002F 可能没有昵称\n    std::optional\u003Cint> score;              \u002F\u002F 成绩可能尚未录入\n};\n\nvoid print_person(const Person& p)\n{\n    std::cout \u003C\u003C \"Name: \" \u003C\u003C p.name \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"Age: \" \u003C\u003C p.age \u003C\u003C \"\\n\";\n\n    std::cout \u003C\u003C \"Nickname: \" \u003C\u003C p.nickname.value_or(\"(none)\") \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"Score: \" \u003C\u003C p.score.value_or(-1) \u003C\u003C \"\\n\";\n\n    std::cout \u003C\u003C \"---\\n\";\n}\n\nint main()\n{\n    Person p1{\"Alice\", 20, \"Ali\", 95};\n    Person p2{\"Bob\", 22, std::nullopt, std::nullopt};  \u002F\u002F 没有昵称和成绩\n\n    print_person(p1);\n    print_person(p2);\n\n    return 0;\n}\n",[28,1541,1542,1548,1554,1560,1564,1572,1576,1583,1591,1611,1626,1630,1634,1656,1660,1686,1712,1716,1751,1787,1791,1808,1812,1816,1824,1828,1852,1879,1883,1891,1898,1902,1910],{"__ignoreMap":82},[86,1543,1544,1546],{"class":88,"line":89},[86,1545,93],{"class":92},[86,1547,399],{"class":96},[86,1549,1550,1552],{"class":88,"line":133},[86,1551,93],{"class":92},[86,1553,97],{"class":96},[86,1555,1556,1558],{"class":88,"line":158},[86,1557,93],{"class":92},[86,1559,412],{"class":96},[86,1561,1562],{"class":88,"line":184},[86,1563,188],{"emptyLinePlaceholder":187},[86,1565,1566,1569],{"class":88,"line":191},[86,1567,1568],{"class":92},"struct",[86,1570,1571],{"class":110}," Person\n",[86,1573,1574],{"class":88,"line":197},[86,1575,506],{"class":114},[86,1577,1578,1580],{"class":88,"line":212},[86,1579,641],{"class":110},[86,1581,1582],{"class":114},"::string name;\n",[86,1584,1585,1588],{"class":88,"line":223},[86,1586,1587],{"class":92},"    int",[86,1589,1590],{"class":114}," age;\n",[86,1592,1593,1595,1597,1599,1601,1603,1605,1608],{"class":88,"line":228},[86,1594,641],{"class":110},[86,1596,115],{"class":114},[86,1598,118],{"class":92},[86,1600,111],{"class":110},[86,1602,651],{"class":114},[86,1604,123],{"class":92},[86,1606,1607],{"class":114}," nickname;",[86,1609,1610],{"class":129},"  \u002F\u002F 可能没有昵称\n",[86,1612,1613,1615,1617,1620,1623],{"class":88,"line":234},[86,1614,641],{"class":110},[86,1616,115],{"class":114},[86,1618,1619],{"class":92},"\u003Cint>",[86,1621,1622],{"class":114}," score;",[86,1624,1625],{"class":129},"              \u002F\u002F 成绩可能尚未录入\n",[86,1627,1628],{"class":88,"line":254},[86,1629,678],{"class":114},[86,1631,1632],{"class":88,"line":270},[86,1633,188],{"emptyLinePlaceholder":187},[86,1635,1636,1639,1642,1644,1646,1649,1651,1654],{"class":88,"line":567},[86,1637,1638],{"class":92},"void",[86,1640,1641],{"class":110}," print_person",[86,1643,282],{"class":114},[86,1645,454],{"class":92},[86,1647,1648],{"class":110}," Person",[86,1650,475],{"class":92},[86,1652,1653],{"class":478}," p",[86,1655,501],{"class":114},[86,1657,1658],{"class":88,"line":573},[86,1659,506],{"class":114},[86,1661,1662,1664,1666,1668,1671,1673,1676,1678,1680,1682,1684],{"class":88,"line":585},[86,1663,641],{"class":110},[86,1665,728],{"class":114},[86,1667,731],{"class":92},[86,1669,1670],{"class":96}," \"Name: \"",[86,1672,737],{"class":92},[86,1674,1675],{"class":114}," p.name ",[86,1677,731],{"class":92},[86,1679,747],{"class":96},[86,1681,750],{"class":524},[86,1683,753],{"class":96},[86,1685,756],{"class":114},[86,1687,1688,1690,1692,1694,1697,1699,1702,1704,1706,1708,1710],{"class":88,"line":591},[86,1689,641],{"class":110},[86,1691,728],{"class":114},[86,1693,731],{"class":92},[86,1695,1696],{"class":96}," \"Age: \"",[86,1698,737],{"class":92},[86,1700,1701],{"class":114}," p.age ",[86,1703,731],{"class":92},[86,1705,747],{"class":96},[86,1707,750],{"class":524},[86,1709,753],{"class":96},[86,1711,756],{"class":114},[86,1713,1714],{"class":88,"line":597},[86,1715,188],{"emptyLinePlaceholder":187},[86,1717,1718,1720,1722,1724,1727,1729,1732,1734,1736,1739,1741,1743,1745,1747,1749],{"class":88,"line":610},[86,1719,641],{"class":110},[86,1721,728],{"class":114},[86,1723,731],{"class":92},[86,1725,1726],{"class":96}," \"Nickname: \"",[86,1728,737],{"class":92},[86,1730,1731],{"class":114}," p.nickname.",[86,1733,279],{"class":110},[86,1735,282],{"class":114},[86,1737,1738],{"class":96},"\"(none)\"",[86,1740,864],{"class":114},[86,1742,731],{"class":92},[86,1744,747],{"class":96},[86,1746,750],{"class":524},[86,1748,753],{"class":96},[86,1750,756],{"class":114},[86,1752,1753,1755,1757,1759,1762,1764,1767,1769,1771,1773,1775,1777,1779,1781,1783,1785],{"class":88,"line":616},[86,1754,641],{"class":110},[86,1756,728],{"class":114},[86,1758,731],{"class":92},[86,1760,1761],{"class":96}," \"Score: \"",[86,1763,737],{"class":92},[86,1765,1766],{"class":114}," p.score.",[86,1768,279],{"class":110},[86,1770,282],{"class":114},[86,1772,1233],{"class":92},[86,1774,1236],{"class":524},[86,1776,864],{"class":114},[86,1778,731],{"class":92},[86,1780,747],{"class":96},[86,1782,750],{"class":524},[86,1784,753],{"class":96},[86,1786,756],{"class":114},[86,1788,1789],{"class":88,"line":621},[86,1790,188],{"emptyLinePlaceholder":187},[86,1792,1793,1795,1797,1799,1802,1804,1806],{"class":88,"line":633},[86,1794,641],{"class":110},[86,1796,728],{"class":114},[86,1798,731],{"class":92},[86,1800,1801],{"class":96}," \"---",[86,1803,750],{"class":524},[86,1805,753],{"class":96},[86,1807,756],{"class":114},[86,1809,1810],{"class":88,"line":638},[86,1811,613],{"class":114},[86,1813,1814],{"class":88,"line":681},[86,1815,188],{"emptyLinePlaceholder":187},[86,1817,1818,1820,1822],{"class":88,"line":686},[86,1819,624],{"class":92},[86,1821,627],{"class":110},[86,1823,630],{"class":114},[86,1825,1826],{"class":88,"line":708},[86,1827,506],{"class":114},[86,1829,1830,1833,1835,1837,1840,1842,1845,1847,1850],{"class":88,"line":717},[86,1831,1832],{"class":114},"    Person p1{",[86,1834,664],{"class":96},[86,1836,667],{"class":114},[86,1838,1839],{"class":524},"20",[86,1841,667],{"class":114},[86,1843,1844],{"class":96},"\"Ali\"",[86,1846,667],{"class":114},[86,1848,1849],{"class":524},"95",[86,1851,678],{"class":114},[86,1853,1854,1857,1859,1861,1864,1866,1868,1871,1873,1876],{"class":88,"line":722},[86,1855,1856],{"class":114},"    Person p2{",[86,1858,670],{"class":96},[86,1860,667],{"class":114},[86,1862,1863],{"class":524},"22",[86,1865,667],{"class":114},[86,1867,111],{"class":110},[86,1869,1870],{"class":114},"::nullopt, ",[86,1872,111],{"class":110},[86,1874,1875],{"class":114},"::nullopt};",[86,1877,1878],{"class":129},"  \u002F\u002F 没有昵称和成绩\n",[86,1880,1881],{"class":88,"line":759},[86,1882,188],{"emptyLinePlaceholder":187},[86,1884,1885,1888],{"class":88,"line":764},[86,1886,1887],{"class":110},"    print_person",[86,1889,1890],{"class":114},"(p1);\n",[86,1892,1893,1895],{"class":88,"line":769},[86,1894,1887],{"class":110},[86,1896,1897],{"class":114},"(p2);\n",[86,1899,1900],{"class":88,"line":788},[86,1901,188],{"emptyLinePlaceholder":187},[86,1903,1904,1906,1908],{"class":88,"line":801},[86,1905,600],{"class":92},[86,1907,525],{"class":524},[86,1909,756],{"class":114},[86,1911,1912],{"class":88,"line":806},[86,1913,613],{"class":114},[14,1915,1916,935],{},[932,1917,934],{},[77,1919,1922],{"className":1920,"code":1921,"language":941},[939],"Name: Alice\nAge: 20\nNickname: Ali\nScore: 95\n---\nName: Bob\nAge: 22\nNickname: (none)\nScore: -1\n---\n",[28,1923,1921],{"__ignoreMap":82},[10,1925,934],{"id":934},[14,1927,1928],{},"見上方每個示例的\"運行結果\"。",[10,1930,1931],{"id":1931},"示例中的關鍵語法解釋",[296,1933,1934,1953],{},[299,1935,1936],{},[302,1937,1938,1941,1944,1947,1950],{},[305,1939,1940],{"align":307},"示例",[305,1942,1943],{"align":307},"講了什麼",[305,1945,1946],{"align":307},"新出現的語法",[305,1948,1949],{"align":307},"為什麼這樣寫",[305,1951,1952],{"align":307},"注意事項",[313,1954,1955,1990,2014],{},[302,1956,1957,1960,1963,1981,1984],{},[318,1958,1959],{"align":307},"示例 1",[318,1961,1962],{"align":307},"optional 返回查找結果",[318,1964,1965,1968,1969,1972,1973,1972,1976,1972,1978],{"align":307},[28,1966,1967],{},"return i;"," \u002F ",[28,1970,1971],{},"return std::nullopt;","、",[28,1974,1975],{},"if(opt)",[28,1977,346],{},[28,1979,1980],{},"value_or()",[318,1982,1983],{"align":307},"optional 讓\"沒有值\"成為正常返回，語義清晰",[318,1985,1986,1987,1989],{"align":307},"解引用 ",[28,1988,346],{}," 前要確保有值",[302,1991,1992,1995,1998,2004,2007],{},[318,1993,1994],{"align":307},"示例 2",[318,1996,1997],{"align":307},"optional 表示轉換失敗",[318,1999,2000,2003],{"align":307},[28,2001,2002],{},"try\u002Fcatch"," 包裝 + optional",[318,2005,2006],{"align":307},"把異常轉換成空 optional，調用者更易處理",[318,2008,2009,2010,2013],{"align":307},"也可以用 ",[28,2011,2012],{},"std::from_chars","（C++17）更高效",[302,2015,2016,2019,2022,2028,2031],{},[318,2017,2018],{"align":307},"示例 3",[318,2020,2021],{"align":307},"optional 作為成員變量",[318,2023,2024,2027],{"align":307},[28,2025,2026],{},"std::optional\u003Cstd::string>"," 成員",[318,2029,2030],{"align":307},"\"可選字段\"用 optional 比用 magic value（如 -1）更清晰",[318,2032,2033],{"align":307},"optional 本身佔用額外空間（T 的大小 + bool + padding）",[10,2035,2037],{"id":2036},"optional-適合可能沒有不適合錯誤詳情很多","optional 適合\"可能沒有\"，不適合\"錯誤詳情很多\"",[14,2039,2040,2042],{},[28,2041,438],{}," 表達的是：這個值可能存在，也可能不存在。它不負責說明“為什麼失敗”。",[296,2044,2045,2055],{},[299,2046,2047],{},[302,2048,2049,2052],{},[305,2050,2051],{"align":307},"場景",[305,2053,2054],{"align":307},"推薦",[313,2056,2057,2067,2076,2086,2098],{},[302,2058,2059,2062],{},[318,2060,2061],{"align":307},"查找名字，可能找不到",[318,2063,2064],{"align":307},[28,2065,2066],{},"std::optional\u003Csize_t>",[302,2068,2069,2072],{},[318,2070,2071],{"align":307},"配置項可能沒填",[318,2073,2074],{"align":307},[28,2075,2026],{},[302,2077,2078,2081],{},[318,2079,2080],{"align":307},"字符串轉數字，只關心成不成功",[318,2082,2083],{"align":307},[28,2084,2085],{},"std::optional\u003Cint>",[302,2087,2088,2091],{},[318,2089,2090],{"align":307},"打開文件失敗，需要知道權限\u002F路徑\u002F格式錯誤",[318,2092,2093,2094,2097],{"align":307},"錯誤碼、異常、或 ",[28,2095,2096],{},"expected"," 類工具",[302,2099,2100,2103],{},[318,2101,2102],{"align":307},"網絡請求失敗，需要錯誤類型和錯誤消息",[318,2104,2105],{"align":307},"錯誤對象，不要只用 optional",[384,2107,2109],{"id":2108},"示例-4optional-和錯誤信息的區別","示例 4：optional 和錯誤信息的區別",[77,2111,2113],{"className":79,"code":2112,"language":81,"meta":82,"style":82},"#include \u003Ciostream>\n#include \u003Coptional>\n#include \u003Cstring>\n\n\u002F\u002F optional 表示“可能有值，也可能没有值”的结果。\nstd::optional\u003Cint> parse_port_simple(const std::string& text)\n{\n    try\n    {\n        int port = std::stoi(text);\n        if (port >= 0 && port \u003C= 65535)\n        {\n            return port;\n        }\n    }\n    catch (...) {}\n    return std::nullopt;\n}\n\nstruct ParseResult\n{\n    bool ok;\n    int value;\n    std::string error;\n};\n\nParseResult parse_port_with_error(const std::string& text)\n{\n    try\n    {\n        int port = std::stoi(text);\n        if (port \u003C 0 || port > 65535)\n        {\n            return {false, 0, \"port out of range\"};\n        }\n        return {true, port, \"\"};\n    }\n    catch (...)\n    {\n        return {false, 0, \"not a number\"};\n    }\n}\n\nint main()\n{\n    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    auto simple = parse_port_simple(\"70000\");\n    std::cout \u003C\u003C \"simple ok? \" \u003C\u003C (simple ? \"yes\" : \"no\") \u003C\u003C \"\\n\";\n\n    auto detailed = parse_port_with_error(\"70000\");\n    if (!detailed.ok)\n    {\n        std::cout \u003C\u003C \"error: \" \u003C\u003C detailed.error \u003C\u003C \"\\n\";\n    }\n\n    return 0;\n}\n",[28,2114,2115,2121,2127,2133,2137,2142,2176,2180,2184,2188,2206,2231,2235,2242,2246,2250,2256,2264,2268,2272,2279,2283,2291,2298,2305,2309,2313,2337,2341,2345,2349,2365,2386,2390,2411,2415,2433,2437,2444,2448,2467,2471,2476,2481,2490,2495,2501,2521,2562,2567,2585,2597,2602,2629,2634,2639,2648],{"__ignoreMap":82},[86,2116,2117,2119],{"class":88,"line":89},[86,2118,93],{"class":92},[86,2120,399],{"class":96},[86,2122,2123,2125],{"class":88,"line":133},[86,2124,93],{"class":92},[86,2126,97],{"class":96},[86,2128,2129,2131],{"class":88,"line":158},[86,2130,93],{"class":92},[86,2132,412],{"class":96},[86,2134,2135],{"class":88,"line":184},[86,2136,188],{"emptyLinePlaceholder":187},[86,2138,2139],{"class":88,"line":191},[86,2140,2141],{"class":129},"\u002F\u002F optional 表示“可能有值，也可能没有值”的结果。\n",[86,2143,2144,2146,2148,2150,2152,2154,2156,2159,2161,2163,2165,2167,2169,2171,2174],{"class":88,"line":197},[86,2145,111],{"class":110},[86,2147,435],{"class":114},[86,2149,438],{"class":110},[86,2151,118],{"class":114},[86,2153,624],{"class":92},[86,2155,446],{"class":114},[86,2157,2158],{"class":110},"parse_port_simple",[86,2160,282],{"class":114},[86,2162,454],{"class":92},[86,2164,175],{"class":110},[86,2166,435],{"class":114},[86,2168,470],{"class":110},[86,2170,475],{"class":92},[86,2172,2173],{"class":478}," text",[86,2175,501],{"class":114},[86,2177,2178],{"class":88,"line":212},[86,2179,506],{"class":114},[86,2181,2182],{"class":88,"line":223},[86,2183,1022],{"class":92},[86,2185,2186],{"class":88,"line":228},[86,2187,550],{"class":114},[86,2189,2190,2192,2195,2197,2199,2201,2203],{"class":88,"line":234},[86,2191,1039],{"class":92},[86,2193,2194],{"class":114}," port ",[86,2196,149],{"class":92},[86,2198,175],{"class":110},[86,2200,435],{"class":114},[86,2202,1051],{"class":110},[86,2204,2205],{"class":114},"(text);\n",[86,2207,2208,2210,2213,2216,2218,2221,2223,2226,2229],{"class":88,"line":254},[86,2209,555],{"class":92},[86,2211,2212],{"class":114}," (port ",[86,2214,2215],{"class":92},">=",[86,2217,525],{"class":524},[86,2219,2220],{"class":92}," &&",[86,2222,2194],{"class":114},[86,2224,2225],{"class":92},"\u003C=",[86,2227,2228],{"class":524}," 65535",[86,2230,501],{"class":114},[86,2232,2233],{"class":88,"line":270},[86,2234,570],{"class":114},[86,2236,2237,2239],{"class":88,"line":567},[86,2238,576],{"class":92},[86,2240,2241],{"class":114}," port;\n",[86,2243,2244],{"class":88,"line":573},[86,2245,588],{"class":114},[86,2247,2248],{"class":88,"line":585},[86,2249,594],{"class":114},[86,2251,2252,2254],{"class":88,"line":591},[86,2253,1103],{"class":92},[86,2255,1106],{"class":114},[86,2257,2258,2260,2262],{"class":88,"line":597},[86,2259,600],{"class":92},[86,2261,175],{"class":110},[86,2263,1115],{"class":114},[86,2265,2266],{"class":88,"line":610},[86,2267,613],{"class":114},[86,2269,2270],{"class":88,"line":616},[86,2271,188],{"emptyLinePlaceholder":187},[86,2273,2274,2276],{"class":88,"line":621},[86,2275,1568],{"class":92},[86,2277,2278],{"class":110}," ParseResult\n",[86,2280,2281],{"class":88,"line":633},[86,2282,506],{"class":114},[86,2284,2285,2288],{"class":88,"line":638},[86,2286,2287],{"class":92},"    bool",[86,2289,2290],{"class":114}," ok;\n",[86,2292,2293,2295],{"class":88,"line":681},[86,2294,1587],{"class":92},[86,2296,2297],{"class":114}," value;\n",[86,2299,2300,2302],{"class":88,"line":686},[86,2301,641],{"class":110},[86,2303,2304],{"class":114},"::string error;\n",[86,2306,2307],{"class":88,"line":708},[86,2308,678],{"class":114},[86,2310,2311],{"class":88,"line":717},[86,2312,188],{"emptyLinePlaceholder":187},[86,2314,2315,2318,2321,2323,2325,2327,2329,2331,2333,2335],{"class":88,"line":722},[86,2316,2317],{"class":110},"ParseResult",[86,2319,2320],{"class":110}," parse_port_with_error",[86,2322,282],{"class":114},[86,2324,454],{"class":92},[86,2326,175],{"class":110},[86,2328,435],{"class":114},[86,2330,470],{"class":110},[86,2332,475],{"class":92},[86,2334,2173],{"class":478},[86,2336,501],{"class":114},[86,2338,2339],{"class":88,"line":759},[86,2340,506],{"class":114},[86,2342,2343],{"class":88,"line":764},[86,2344,1022],{"class":92},[86,2346,2347],{"class":88,"line":769},[86,2348,550],{"class":114},[86,2350,2351,2353,2355,2357,2359,2361,2363],{"class":88,"line":788},[86,2352,1039],{"class":92},[86,2354,2194],{"class":114},[86,2356,149],{"class":92},[86,2358,175],{"class":110},[86,2360,435],{"class":114},[86,2362,1051],{"class":110},[86,2364,2205],{"class":114},[86,2366,2367,2369,2371,2373,2375,2378,2380,2382,2384],{"class":88,"line":801},[86,2368,555],{"class":92},[86,2370,2212],{"class":114},[86,2372,118],{"class":92},[86,2374,525],{"class":524},[86,2376,2377],{"class":92}," ||",[86,2379,2194],{"class":114},[86,2381,123],{"class":92},[86,2383,2228],{"class":524},[86,2385,501],{"class":114},[86,2387,2388],{"class":88,"line":806},[86,2389,570],{"class":114},[86,2391,2392,2394,2396,2399,2401,2404,2406,2409],{"class":88,"line":824},[86,2393,576],{"class":92},[86,2395,661],{"class":114},[86,2397,2398],{"class":524},"false",[86,2400,667],{"class":114},[86,2402,2403],{"class":524},"0",[86,2405,667],{"class":114},[86,2407,2408],{"class":96},"\"port out of range\"",[86,2410,678],{"class":114},[86,2412,2413],{"class":88,"line":829},[86,2414,588],{"class":114},[86,2416,2417,2420,2422,2425,2428,2431],{"class":88,"line":834},[86,2418,2419],{"class":92},"        return",[86,2421,661],{"class":114},[86,2423,2424],{"class":524},"true",[86,2426,2427],{"class":114},", port, ",[86,2429,2430],{"class":96},"\"\"",[86,2432,678],{"class":114},[86,2434,2435],{"class":88,"line":840},[86,2436,594],{"class":114},[86,2438,2439,2441],{"class":88,"line":877},[86,2440,1103],{"class":92},[86,2442,2443],{"class":114}," (...)\n",[86,2445,2446],{"class":88,"line":912},[86,2447,550],{"class":114},[86,2449,2450,2452,2454,2456,2458,2460,2462,2465],{"class":88,"line":917},[86,2451,2419],{"class":92},[86,2453,661],{"class":114},[86,2455,2398],{"class":524},[86,2457,667],{"class":114},[86,2459,2403],{"class":524},[86,2461,667],{"class":114},[86,2463,2464],{"class":96},"\"not a number\"",[86,2466,678],{"class":114},[86,2468,2469],{"class":88,"line":926},[86,2470,594],{"class":114},[86,2472,2474],{"class":88,"line":2473},42,[86,2475,613],{"class":114},[86,2477,2479],{"class":88,"line":2478},43,[86,2480,188],{"emptyLinePlaceholder":187},[86,2482,2484,2486,2488],{"class":88,"line":2483},44,[86,2485,624],{"class":92},[86,2487,627],{"class":110},[86,2489,630],{"class":114},[86,2491,2493],{"class":88,"line":2492},45,[86,2494,506],{"class":114},[86,2496,2498],{"class":88,"line":2497},46,[86,2499,2500],{"class":129},"    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n",[86,2502,2504,2506,2509,2511,2514,2516,2519],{"class":88,"line":2503},47,[86,2505,689],{"class":92},[86,2507,2508],{"class":114}," simple ",[86,2510,149],{"class":92},[86,2512,2513],{"class":110}," parse_port_simple",[86,2515,282],{"class":114},[86,2517,2518],{"class":96},"\"70000\"",[86,2520,705],{"class":114},[86,2522,2524,2526,2528,2530,2533,2535,2538,2541,2544,2547,2550,2552,2554,2556,2558,2560],{"class":88,"line":2523},48,[86,2525,641],{"class":110},[86,2527,728],{"class":114},[86,2529,731],{"class":92},[86,2531,2532],{"class":96}," \"simple ok? \"",[86,2534,737],{"class":92},[86,2536,2537],{"class":114}," (simple ",[86,2539,2540],{"class":92},"?",[86,2542,2543],{"class":96}," \"yes\"",[86,2545,2546],{"class":92}," :",[86,2548,2549],{"class":96}," \"no\"",[86,2551,864],{"class":114},[86,2553,731],{"class":92},[86,2555,747],{"class":96},[86,2557,750],{"class":524},[86,2559,753],{"class":96},[86,2561,756],{"class":114},[86,2563,2565],{"class":88,"line":2564},49,[86,2566,188],{"emptyLinePlaceholder":187},[86,2568,2570,2572,2575,2577,2579,2581,2583],{"class":88,"line":2569},50,[86,2571,689],{"class":92},[86,2573,2574],{"class":114}," detailed ",[86,2576,149],{"class":92},[86,2578,2320],{"class":110},[86,2580,282],{"class":114},[86,2582,2518],{"class":96},[86,2584,705],{"class":114},[86,2586,2588,2590,2592,2594],{"class":88,"line":2587},51,[86,2589,711],{"class":92},[86,2591,514],{"class":114},[86,2593,795],{"class":92},[86,2595,2596],{"class":114},"detailed.ok)\n",[86,2598,2600],{"class":88,"line":2599},52,[86,2601,550],{"class":114},[86,2603,2605,2607,2609,2611,2614,2616,2619,2621,2623,2625,2627],{"class":88,"line":2604},53,[86,2606,725],{"class":110},[86,2608,728],{"class":114},[86,2610,731],{"class":92},[86,2612,2613],{"class":96}," \"error: \"",[86,2615,737],{"class":92},[86,2617,2618],{"class":114}," detailed.error ",[86,2620,731],{"class":92},[86,2622,747],{"class":96},[86,2624,750],{"class":524},[86,2626,753],{"class":96},[86,2628,756],{"class":114},[86,2630,2632],{"class":88,"line":2631},54,[86,2633,594],{"class":114},[86,2635,2637],{"class":88,"line":2636},55,[86,2638,188],{"emptyLinePlaceholder":187},[86,2640,2642,2644,2646],{"class":88,"line":2641},56,[86,2643,600],{"class":92},[86,2645,525],{"class":524},[86,2647,756],{"class":114},[86,2649,2651],{"class":88,"line":2650},57,[86,2652,613],{"class":114},[14,2654,2655,935],{},[932,2656,934],{},[77,2658,2661],{"className":2659,"code":2660,"language":941},[939],"simple ok? no\nerror: port out of range\n",[28,2662,2660],{"__ignoreMap":82},[14,2664,2665,2666,2668,2669,2671],{},"如果調用者只關心“有沒有值”，",[28,2667,438],{}," 很合適；如果調用者需要知道失敗原因，單獨的 ",[28,2670,438],{}," 就不夠了。",[10,2673,2674],{"id":2674},"常見錯誤",[14,2676,2677],{},[932,2678,2679,2680],{},"錯誤 1：不檢查直接 ",[28,2681,346],{},[77,2683,2685],{"className":79,"code":2684,"language":81,"meta":82,"style":82},"std::optional\u003Cint> opt;\nstd::cout \u003C\u003C *opt;  \u002F\u002F ❌ 未定义行为！opt 为空\n",[28,2686,2687,2698],{"__ignoreMap":82},[86,2688,2689,2691,2693,2695],{"class":88,"line":89},[86,2690,111],{"class":110},[86,2692,115],{"class":114},[86,2694,1619],{"class":92},[86,2696,2697],{"class":114}," opt;\n",[86,2699,2700,2702,2704,2706,2708,2710],{"class":88,"line":133},[86,2701,111],{"class":110},[86,2703,728],{"class":114},[86,2705,731],{"class":92},[86,2707,261],{"class":92},[86,2709,264],{"class":114},[86,2711,2712],{"class":129},"  \u002F\u002F ❌ 未定义行为！opt 为空\n",[14,2714,2715,2716,2719,2720,1461],{},"正確做法：先 ",[28,2717,2718],{},"if (opt)"," 檢查，或用 ",[28,2721,356],{},[14,2723,2724],{},[932,2725,2726,2727,2729,2730,2732],{},"錯誤 2：把 ",[28,2728,1532],{}," 和 ",[28,2731,34],{}," 混淆",[77,2734,2736],{"className":79,"code":2735,"language":81,"meta":82,"style":82},"std::optional\u003Cint> opt = nullptr;  \u002F\u002F ❌ 编译错误！应该用 std::nullopt\n",[28,2737,2738],{"__ignoreMap":82},[86,2739,2740,2742,2744,2746,2748,2750,2753,2756],{"class":88,"line":89},[86,2741,111],{"class":110},[86,2743,115],{"class":114},[86,2745,1619],{"class":92},[86,2747,146],{"class":114},[86,2749,149],{"class":92},[86,2751,2752],{"class":524}," nullptr",[86,2754,2755],{"class":114},";",[86,2757,2758],{"class":129},"  \u002F\u002F ❌ 编译错误！应该用 std::nullopt\n",[14,2760,2761,2762],{},"正確做法：",[28,2763,2764],{},"opt = std::nullopt;",[14,2766,2767],{},[932,2768,2769,2770,2773],{},"錯誤 3：忘記 ",[28,2771,2772],{},"value()"," 會在無值時拋異常",[77,2775,2777],{"className":79,"code":2776,"language":81,"meta":82,"style":82},"std::optional\u003Cint> opt;\nstd::cout \u003C\u003C opt.value();  \u002F\u002F ❌ 抛出 std::bad_optional_access\n",[28,2778,2779,2789],{"__ignoreMap":82},[86,2780,2781,2783,2785,2787],{"class":88,"line":89},[86,2782,111],{"class":110},[86,2784,115],{"class":114},[86,2786,1619],{"class":92},[86,2788,2697],{"class":114},[86,2790,2791,2793,2795,2797,2799,2801,2803],{"class":88,"line":133},[86,2792,111],{"class":110},[86,2794,728],{"class":114},[86,2796,731],{"class":92},[86,2798,242],{"class":114},[86,2800,245],{"class":110},[86,2802,248],{"class":114},[86,2804,2805],{"class":129},"  \u002F\u002F ❌ 抛出 std::bad_optional_access\n",[14,2807,2808,2809,2812],{},"正確做法：用 ",[28,2810,2811],{},"value_or(default)"," 或先檢查。",[10,2814,2815],{"id":2815},"使用建議",[2817,2818,2819,2827,2833,2846,2858,2876],"ol",{},[24,2820,2821,2826],{},[932,2822,2823,2824],{},"函數可能\"沒有結果\"時返回 ",[28,2825,52],{},"：比返回 -1\u002Fnullptr 更安全。",[24,2828,2829,2832],{},[932,2830,2831],{},"結構體中\"可選字段\"用 optional","：比 magic number 語義更清晰。",[24,2834,2835,935,2843,2845],{},[932,2836,2837,2838,2840,2841],{},"默認用 ",[28,2839,1980],{}," 而不是 ",[28,2842,346],{},[28,2844,1980],{}," 更安全。",[24,2847,2848,2853,2854,2857],{},[932,2849,2850,2852],{},[28,2851,5],{}," 有額外空間開銷","：等於 ",[28,2855,2856],{},"sizeof(T) + sizeof(bool) + padding","，小對象影響不大。",[24,2859,2860,935,2866,667,2869,667,2872,2875],{},[932,2861,2862,2863,2865],{},"C++23 引入了 ",[28,2864,5],{}," 的 monadic 操作",[28,2867,2868],{},".and_then()",[28,2870,2871],{},".transform()",[28,2873,2874],{},".or_else()"," 鏈式調用更優雅。",[24,2877,2878,2881],{},[932,2879,2880],{},"需要錯誤詳情時別隻用 optional","：optional 只表達有沒有值，不表達為什麼沒有。",[10,2883,2884],{"id":2884},"小結",[21,2886,2887,2895,2898,2910],{},[24,2888,2889,2891,2892,2894],{},[28,2890,52],{}," 要麼包含一個 ",[28,2893,64],{},"，要麼為空。",[24,2896,2897],{},"解決了函數\"可能沒結果\"的語義問題，替代 magic value。",[24,2899,2900,2901,31,2904,2906,2907,2909],{},"用 ",[28,2902,2903],{},"has_value()",[28,2905,1975],{}," 檢查，用 ",[28,2908,2811],{}," 安全獲取值。",[24,2911,2912],{},"可用於函數返回值、結構體成員、函數參數（但參數不推薦用 optional）。",[2914,2915,2916],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}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}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":82,"searchDepth":133,"depth":133,"links":2918},[2919,2920,2921,2922,2923,2924,2925,2930,2931,2932,2935,2936,2937],{"id":12,"depth":133,"text":12},{"id":56,"depth":133,"text":56},{"id":68,"depth":133,"text":69},{"id":75,"depth":133,"text":75},{"id":100,"depth":133,"text":100},{"id":294,"depth":133,"text":294},{"id":382,"depth":133,"text":382,"children":2926},[2927,2928,2929],{"id":386,"depth":158,"text":387},{"id":946,"depth":158,"text":947},{"id":1535,"depth":158,"text":1536},{"id":934,"depth":133,"text":934},{"id":1931,"depth":133,"text":1931},{"id":2036,"depth":133,"text":2037,"children":2933},[2934],{"id":2108,"depth":158,"text":2109},{"id":2674,"depth":133,"text":2674},{"id":2815,"depth":133,"text":2815},{"id":2884,"depth":133,"text":2884},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","2000-1400","2023-10-05","wiki\u002F2023-10-05-cplusplus-jiao-xue","zh-tw:2023-10-05-cplusplus-jiao-xue","\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional",false,null,"zh-TW","zh-tw",{},{"title":5,"description":82},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional","wjWWQOK3O_vK9vjkhQQXL9dwspvTXOhCO8BTDp62RHo",[2957,2963,2968,2973,2978,2983,2988,2993,2998,3003,3008,3013,3018,3023,3028,3033,3038,3043,3048,3053,3058,3063,3068,3073,3078,3083,3088,3093,3098,3103,3108,3113,3118,3123,3128,3133,3138,3143,3148,3153,3157,3161,3166,3171,3176,3181,3186,3191,3196,3201,3206,3211,3216,3217,3222,3227,3232,3237,3242,3247,3252,3257,3262,3267,3272,3277,3282,3287,3292,3297,3302,3307,3312,3317,3322,3327,3332,3337,3342,3347,3352,3357,3362,3367],{"path":2958,"stem":2959,"title":2960,"date":2940,"chapterOrder":2961,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0100-C++开发环境搭建与测试","C++開發環境搭建與測試","0100",0,{"path":2964,"stem":2965,"title":2966,"date":2940,"chapterOrder":2967,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++基礎初識","0200",{"path":2969,"stem":2970,"title":2971,"date":2940,"chapterOrder":2972,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0300-shu-ju-lei-xing-yu-shu-ju-cun-fang","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0300-数据类型与数据存放","數據類型與數據存放","0300",{"path":2974,"stem":2975,"title":2976,"date":2940,"chapterOrder":2977,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","輸入輸出","0400",{"path":2979,"stem":2980,"title":2981,"date":2940,"chapterOrder":2982,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","運算符","0500",{"path":2984,"stem":2985,"title":2986,"date":2940,"chapterOrder":2987,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","程序流程結構","0600",{"path":2989,"stem":2990,"title":2991,"date":2940,"chapterOrder":2992,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","數組","0700",{"path":2994,"stem":2995,"title":2996,"date":2940,"chapterOrder":2997,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","函數與頭文件","0800",{"path":2999,"stem":3000,"title":3001,"date":2940,"chapterOrder":3002,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","指針","0900",{"path":3004,"stem":3005,"title":3006,"date":2940,"chapterOrder":3007,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","結構體與共用體","1000",{"path":3009,"stem":3010,"title":3011,"date":2940,"chapterOrder":3012,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1100-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1100-内存分区与生命周期","內存分區與生命週期","1100",{"path":3014,"stem":3015,"title":3016,"date":2940,"chapterOrder":3017,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","引用","1200",{"path":3019,"stem":3020,"title":3021,"date":2940,"chapterOrder":3022,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高","函數提高","1300",{"path":3024,"stem":3025,"title":3026,"date":2940,"chapterOrder":3027,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1350-ming-ming-kong-jian","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1350-命名空间","命名空間","1350",{"path":3029,"stem":3030,"title":3031,"date":2940,"chapterOrder":3032,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","封裝","1400-0100",{"path":3034,"stem":3035,"title":3036,"date":2940,"chapterOrder":3037,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0200-dui-xiang-chu-shi-hua-he-qing-li","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0200-对象初始化和清理","對象初始化和清理","1400-0200",{"path":3039,"stem":3040,"title":3041,"date":2940,"chapterOrder":3042,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0300-dui-xiang-mo-xing-yu-this-zhi-zhen","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0300-对象模型与this指针","對象模型與this指針","1400-0300",{"path":3044,"stem":3045,"title":3046,"date":2940,"chapterOrder":3047,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0400-you-yuan-yu-yun-suan-fu-zhong-zai","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0400-友元与运算符重载","友元與運算符重載","1400-0400",{"path":3049,"stem":3050,"title":3051,"date":2940,"chapterOrder":3052,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","繼承","1400-0500",{"path":3054,"stem":3055,"title":3056,"date":2940,"chapterOrder":3057,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","多態","1400-0600",{"path":3059,"stem":3060,"title":3061,"date":2940,"chapterOrder":3062,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","類和對象","1400",{"path":3064,"stem":3065,"title":3066,"date":2940,"chapterOrder":3067,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1450-han-shu-zhi-zhen","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1450-函数指针","函數指針","1450",{"path":3069,"stem":3070,"title":3071,"date":2940,"chapterOrder":3072,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","文件操作","1500",{"path":3074,"stem":3075,"title":3076,"date":2940,"chapterOrder":3077,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","異常處理","1600",{"path":3079,"stem":3080,"title":3081,"date":2940,"chapterOrder":3082,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","模板","1700",{"path":3084,"stem":3085,"title":3086,"date":2940,"chapterOrder":3087,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","STL初識","1800-0100",{"path":3089,"stem":3090,"title":3091,"date":2940,"chapterOrder":3092,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0200-std-array","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0200-std-array","std::array","1800-0200",{"path":3094,"stem":3095,"title":3096,"date":2940,"chapterOrder":3097,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string容器","1800-0300",{"path":3099,"stem":3100,"title":3101,"date":2940,"chapterOrder":3102,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-rong-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector容器","vector 容器","1800-0400",{"path":3104,"stem":3105,"title":3106,"date":2940,"chapterOrder":3107,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-deque-rong-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-deque容器","deque 容器","1800-0500",{"path":3109,"stem":3110,"title":3111,"date":2940,"chapterOrder":3112,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-stack-rong-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-stack容器","stack 容器","1800-0600",{"path":3114,"stem":3115,"title":3116,"date":2940,"chapterOrder":3117,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-queue-rong-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-queue容器","queue 容器","1800-0700",{"path":3119,"stem":3120,"title":3121,"date":2940,"chapterOrder":3122,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-list-rong-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-list容器","list 容器","1800-0800",{"path":3124,"stem":3125,"title":3126,"date":2940,"chapterOrder":3127,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0900-set-rong-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0900-set容器","set \u002F multiset 容器","1800-0900",{"path":3129,"stem":3130,"title":3131,"date":2940,"chapterOrder":3132,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1000-map-rong-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1000-map容器","map \u002F multimap 容器","1800-1000",{"path":3134,"stem":3135,"title":3136,"date":2940,"chapterOrder":3137,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1100-han-shu-dui-xiang-yu-wei-ci","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1100-函数对象与谓词","函數對象與謂詞","1800-1100",{"path":3139,"stem":3140,"title":3141,"date":2940,"chapterOrder":3142,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1200-chang-yong-suan-fa","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1200-常用算法","常用算法","1800-1200",{"path":3144,"stem":3145,"title":3146,"date":2940,"chapterOrder":3147,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","STL提高編程","1800",{"path":3149,"stem":3150,"title":3151,"date":2940,"chapterOrder":3152,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++類型轉換","1900",{"path":3154,"stem":3155,"title":1354,"date":2940,"chapterOrder":3156,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","2000-0100",{"path":3158,"stem":3159,"title":34,"date":2940,"chapterOrder":3160,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","2000-0200",{"path":3162,"stem":3163,"title":3164,"date":2940,"chapterOrder":3165,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","using","2000-0300",{"path":3167,"stem":3168,"title":3169,"date":2940,"chapterOrder":3170,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0400-enum-class","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0400-enum-class","enum class","2000-0400",{"path":3172,"stem":3173,"title":3174,"date":2940,"chapterOrder":3175,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0500-fan-wei-for-xun-huan","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0500-范围for循环","範圍 for 循環","2000-0500",{"path":3177,"stem":3178,"title":3179,"date":2940,"chapterOrder":3180,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","結構化綁定","2000-0600",{"path":3182,"stem":3183,"title":3184,"date":2940,"chapterOrder":3185,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","constexpr","2000-0700",{"path":3187,"stem":3188,"title":3189,"date":2940,"chapterOrder":3190,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII","2000-0800",{"path":3192,"stem":3193,"title":3194,"date":2940,"chapterOrder":3195,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","智能指針","2000-0900",{"path":3197,"stem":3198,"title":3199,"date":2940,"chapterOrder":3200,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义","右值引用和移動語義","2000-1000",{"path":3202,"stem":3203,"title":3204,"date":2940,"chapterOrder":3205,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","Lambda 表達式","2000-1100",{"path":3207,"stem":3208,"title":3209,"date":2940,"chapterOrder":3210,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","std::function","2000-1200",{"path":3212,"stem":3213,"title":3214,"date":2940,"chapterOrder":3215,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","std::bind","2000-1300",{"path":2938,"stem":2954,"title":5,"date":2940,"chapterOrder":2939,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},{"path":3218,"stem":3219,"title":3220,"date":2940,"chapterOrder":3221,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1500-std-variant","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1500-std-variant","std::variant","2000-1500",{"path":3223,"stem":3224,"title":3225,"date":2940,"chapterOrder":3226,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1600-std-span","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1600-std-span","std::span","2000-1600",{"path":3228,"stem":3229,"title":3230,"date":2940,"chapterOrder":3231,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1700-std-format-print","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1700-std-format-print","std::format \u002F std::print","2000-1700",{"path":3233,"stem":3234,"title":3235,"date":2940,"chapterOrder":3236,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1800-std-chrono","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1800-std-chrono","std::chrono","2000-1800",{"path":3238,"stem":3239,"title":3240,"date":2940,"chapterOrder":3241,"chapterDepth":133,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0100-std-thread","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0100-std-thread","std::thread 與 join","2000-1900-0100",{"path":3243,"stem":3244,"title":3245,"date":2940,"chapterOrder":3246,"chapterDepth":133,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-mutex-lock-guard","mutex 與 lock_guard","2000-1900-0200",{"path":3248,"stem":3249,"title":3250,"date":2940,"chapterOrder":3251,"chapterDepth":133,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0300-std-atomic","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0300-std-atomic","std::atomic","2000-1900-0300",{"path":3253,"stem":3254,"title":3255,"date":2940,"chapterOrder":3256,"chapterDepth":133,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0400-condition-variable","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0400-condition-variable","condition_variable","2000-1900-0400",{"path":3258,"stem":3259,"title":3260,"date":2940,"chapterOrder":3261,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bian-cheng","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发编程","併發編程","2000-1900",{"path":3263,"stem":3264,"title":3265,"date":2940,"chapterOrder":3266,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2000-std-filesystem","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2000-std-filesystem","std::filesystem","2000-2000",{"path":3268,"stem":3269,"title":3270,"date":2940,"chapterOrder":3271,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","modules 簡介","2000-2100",{"path":3273,"stem":3274,"title":3275,"date":2940,"chapterOrder":3276,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","現代C++","2000",{"path":3278,"stem":3279,"title":3280,"date":2940,"chapterOrder":3281,"chapterDepth":133,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0100-ding-shi-qi-yu-yi-bu-io","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0100-定时器与异步IO","定時器與異步 IO","2100-0100-0100",{"path":3283,"stem":3284,"title":3285,"date":2940,"chapterOrder":3286,"chapterDepth":133,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0200-boost-asio-ji-chu","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0200-Boost.Asio基础","Boost.Asio 基礎","2100-0100-0200",{"path":3288,"stem":3289,"title":3290,"date":2940,"chapterOrder":3291,"chapterDepth":133,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0300-chuan-kou-tong-xin","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0300-串口通信","串口通信","2100-0100-0300",{"path":3293,"stem":3294,"title":3295,"date":2940,"chapterOrder":3296,"chapterDepth":133,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0400-tcp-tong-xin","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0400-TCP通信","TCP 通信","2100-0100-0400",{"path":3298,"stem":3299,"title":3300,"date":2940,"chapterOrder":3301,"chapterDepth":133,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0500-udp-tong-xin","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0500-UDP通信","UDP 通信","2100-0100-0500",{"path":3303,"stem":3304,"title":3305,"date":2940,"chapterOrder":3306,"chapterDepth":133,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0600-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0600-机器人工程写法与ROS2集成","機器人工程寫法與 ROS2 集成","2100-0100-0600",{"path":3308,"stem":3309,"title":3310,"date":2940,"chapterOrder":3311,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","Boost.Asio異步IO庫","2100-0100",{"path":3313,"stem":3314,"title":3315,"date":2940,"chapterOrder":3316,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0200-eigen-xian-xing-dai-shu-ku","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0200-Eigen线性代数库","Eigen線性代數庫","2100-0200",{"path":3318,"stem":3319,"title":3320,"date":2940,"chapterOrder":3321,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0300-opencv-ji-suan-ji-shi-jue-ku","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0300-OpenCV计算机视觉库","OpenCV計算機視覺庫","2100-0300",{"path":3323,"stem":3324,"title":3325,"date":2940,"chapterOrder":3326,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0400-pcl-dian-yun-ku","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0400-PCL点云库","PCL點雲庫","2100-0400",{"path":3328,"stem":3329,"title":3330,"date":2940,"chapterOrder":3331,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0500-sophus-li-qun-li-dai-shu-ku","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0500-Sophus李群李代数库","Sophus 李群李代數庫","2100-0500",{"path":3333,"stem":3334,"title":3335,"date":2940,"chapterOrder":3336,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","常用庫學習","2100",{"path":3338,"stem":3339,"title":3340,"date":2940,"chapterOrder":3341,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0100-cmakepresets-yu-gou-jian-an-zhuang","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0100-CMakePresets与构建安装","CMakePresets與構建安裝","2200-0100",{"path":3343,"stem":3344,"title":3345,"date":2940,"chapterOrder":3346,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项","頂層CMake與公共編譯選項","2200-0200",{"path":3348,"stem":3349,"title":3350,"date":2940,"chapterOrder":3351,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0300-src-yu-lib-mo-kuai-cmake-xiang-jie","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0300-src与lib模块CMake详解","src與lib模塊CMake詳解","2200-0300",{"path":3353,"stem":3354,"title":3355,"date":2940,"chapterOrder":3356,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法","第三方庫依賴寫法","2200-0400",{"path":3358,"stem":3359,"title":3360,"date":2940,"chapterOrder":3361,"chapterDepth":89,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0500-mu-ban-kuo-zhan-yu-chang-jian-wen-ti","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0500-模板扩展与常见问题","模板擴展與常見問題","2200-0500",{"path":3363,"stem":3364,"title":3365,"date":2940,"chapterOrder":3366,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":2947},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake工程模板","2200",{"path":2943,"stem":3368,"title":3369,"date":2940,"chapterOrder":2948,"chapterDepth":2962,"docKey":2942,"docRoot":2943,"docTitle":2944,"isWikiDoc":187,"isWikiIndex":187},"_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++教程",{"variants":3371},[3372,3375,3378,3381,3382],{"path":3373,"localeSlug":3374,"i18nKey":2946},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","en-us",{"path":3376,"localeSlug":3377,"i18nKey":2946},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","zh-hant",{"path":3379,"localeSlug":3380,"i18nKey":2946},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","zh-hk",{"path":2938,"localeSlug":2950,"i18nKey":2946},{"path":3383,"localeSlug":3384,"i18nKey":2946},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","zh-cn",[3373,2953,3376,2953,3379,2953,2938,2953,3383,2953],1788531327116]