[{"data":1,"prerenderedAt":3294},["ShallowReactive",2],{"wiki-page-/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-14-std-optional":3,"wiki-doc-items-/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-14-std-optional":2867,"language-switcher-data-/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-14-std-optional":3278,"wiki-i18n-paths-/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-14-std-optional":3293},{"id":4,"title":5,"body":6,"canonicalPath":2849,"chapter":2850,"chapterSort":2851,"date":2852,"description":82,"docI18nKey":2853,"docKey":2854,"docRoot":2855,"docTitle":2856,"extension":2857,"i18nKey":2858,"isBlogPost":2859,"isWikiDoc":187,"isWikiIndex":2859,"layout":2860,"legacyPath":2861,"locale":2862,"localeSlug":2863,"meta":2864,"navigation":187,"path":2849,"seo":2865,"sourcePath":2861,"sourceStem":2858,"stem":2858,"wikiDepth":89,"__hash__":2866},"content/wiki/2023-10-05-Cplusplus教学/ch18-14-std-optional.md","std::optional",{"type":7,"value":8,"toc":2828},"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,1446,1823,1827,1833,1835,1838,1841,1943,1947,1952,2015,2019,2562,2566,2572,2581,2584,2591,2622,2632,2644,2670,2676,2685,2717,2724,2727,2793,2796,2824],[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;                    // 默认空\nstd::optional\u003CT> opt = value;            // 有值\nstd::optional\u003CT> opt = std::nullopt;     // 显式空\n\n// 检查是否有值\nif (opt.has_value()) { ... }\nif (opt) { ... }                         // 隐式转 bool\n\n// 获取值\nT val = opt.value();                     // 若无值抛异常\nT val = *opt;                            // 若无值是未定义行为\nT val = opt.value_or(default);           // 若无值返回默认值\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","                    // 默认空\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},"            // 有值\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},"     // 显式空\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},"// 检查是否有值\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},"                         // 隐式转 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},"// 获取值\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},"                     // 若无值抛异常\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},"                            // 若无值是未定义行为\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},"           // 若无值返回默认值\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// 在 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;  // 找到了\n        }\n    }\n    return std::nullopt;  // 没找到\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    // 使用 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},"// 在 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},"  // 找到了\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},"  // 没找到\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},"    // 使用 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// 字符串转整数，失败返回 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())  // 整个字符串都被转换了\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\");  // 带小数点\n    auto r3 = to_int(\"hello\"); // 不是数字\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    // 用 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},"// 字符串转整数，失败返回 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},"  // 整个字符串都被转换了\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},"  // 带小数点\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}," // 不是数字\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},"    // 用 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},[384,1443,1445],{"id":1444},"示例-3在示例-2-基础上用-optional-作为结构体成员可能没有的字段","示例 3：在示例 2 基础上，用 optional 作为结构体成员（\"可能没有\"的字段）",[77,1447,1449],{"className":79,"code":1448,"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;  // 可能没有昵称\n    std::optional\u003Cint> score;              // 成绩可能尚未录入\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};  // 没有昵称和成绩\n\n    print_person(p1);\n    print_person(p2);\n\n    return 0;\n}\n",[28,1450,1451,1457,1463,1469,1473,1481,1485,1492,1500,1520,1535,1539,1543,1565,1569,1595,1621,1625,1660,1696,1700,1717,1721,1725,1733,1737,1761,1788,1792,1800,1807,1811,1819],{"__ignoreMap":82},[86,1452,1453,1455],{"class":88,"line":89},[86,1454,93],{"class":92},[86,1456,399],{"class":96},[86,1458,1459,1461],{"class":88,"line":133},[86,1460,93],{"class":92},[86,1462,97],{"class":96},[86,1464,1465,1467],{"class":88,"line":158},[86,1466,93],{"class":92},[86,1468,412],{"class":96},[86,1470,1471],{"class":88,"line":184},[86,1472,188],{"emptyLinePlaceholder":187},[86,1474,1475,1478],{"class":88,"line":191},[86,1476,1477],{"class":92},"struct",[86,1479,1480],{"class":110}," Person\n",[86,1482,1483],{"class":88,"line":197},[86,1484,506],{"class":114},[86,1486,1487,1489],{"class":88,"line":212},[86,1488,641],{"class":110},[86,1490,1491],{"class":114},"::string name;\n",[86,1493,1494,1497],{"class":88,"line":223},[86,1495,1496],{"class":92},"    int",[86,1498,1499],{"class":114}," age;\n",[86,1501,1502,1504,1506,1508,1510,1512,1514,1517],{"class":88,"line":228},[86,1503,641],{"class":110},[86,1505,115],{"class":114},[86,1507,118],{"class":92},[86,1509,111],{"class":110},[86,1511,651],{"class":114},[86,1513,123],{"class":92},[86,1515,1516],{"class":114}," nickname;",[86,1518,1519],{"class":129},"  // 可能没有昵称\n",[86,1521,1522,1524,1526,1529,1532],{"class":88,"line":234},[86,1523,641],{"class":110},[86,1525,115],{"class":114},[86,1527,1528],{"class":92},"\u003Cint>",[86,1530,1531],{"class":114}," score;",[86,1533,1534],{"class":129},"              // 成绩可能尚未录入\n",[86,1536,1537],{"class":88,"line":254},[86,1538,678],{"class":114},[86,1540,1541],{"class":88,"line":270},[86,1542,188],{"emptyLinePlaceholder":187},[86,1544,1545,1548,1551,1553,1555,1558,1560,1563],{"class":88,"line":567},[86,1546,1547],{"class":92},"void",[86,1549,1550],{"class":110}," print_person",[86,1552,282],{"class":114},[86,1554,454],{"class":92},[86,1556,1557],{"class":110}," Person",[86,1559,475],{"class":92},[86,1561,1562],{"class":478}," p",[86,1564,501],{"class":114},[86,1566,1567],{"class":88,"line":573},[86,1568,506],{"class":114},[86,1570,1571,1573,1575,1577,1580,1582,1585,1587,1589,1591,1593],{"class":88,"line":585},[86,1572,641],{"class":110},[86,1574,728],{"class":114},[86,1576,731],{"class":92},[86,1578,1579],{"class":96}," \"Name: \"",[86,1581,737],{"class":92},[86,1583,1584],{"class":114}," p.name ",[86,1586,731],{"class":92},[86,1588,747],{"class":96},[86,1590,750],{"class":524},[86,1592,753],{"class":96},[86,1594,756],{"class":114},[86,1596,1597,1599,1601,1603,1606,1608,1611,1613,1615,1617,1619],{"class":88,"line":591},[86,1598,641],{"class":110},[86,1600,728],{"class":114},[86,1602,731],{"class":92},[86,1604,1605],{"class":96}," \"Age: \"",[86,1607,737],{"class":92},[86,1609,1610],{"class":114}," p.age ",[86,1612,731],{"class":92},[86,1614,747],{"class":96},[86,1616,750],{"class":524},[86,1618,753],{"class":96},[86,1620,756],{"class":114},[86,1622,1623],{"class":88,"line":597},[86,1624,188],{"emptyLinePlaceholder":187},[86,1626,1627,1629,1631,1633,1636,1638,1641,1643,1645,1648,1650,1652,1654,1656,1658],{"class":88,"line":610},[86,1628,641],{"class":110},[86,1630,728],{"class":114},[86,1632,731],{"class":92},[86,1634,1635],{"class":96}," \"Nickname: \"",[86,1637,737],{"class":92},[86,1639,1640],{"class":114}," p.nickname.",[86,1642,279],{"class":110},[86,1644,282],{"class":114},[86,1646,1647],{"class":96},"\"(none)\"",[86,1649,864],{"class":114},[86,1651,731],{"class":92},[86,1653,747],{"class":96},[86,1655,750],{"class":524},[86,1657,753],{"class":96},[86,1659,756],{"class":114},[86,1661,1662,1664,1666,1668,1671,1673,1676,1678,1680,1682,1684,1686,1688,1690,1692,1694],{"class":88,"line":616},[86,1663,641],{"class":110},[86,1665,728],{"class":114},[86,1667,731],{"class":92},[86,1669,1670],{"class":96}," \"Score: \"",[86,1672,737],{"class":92},[86,1674,1675],{"class":114}," p.score.",[86,1677,279],{"class":110},[86,1679,282],{"class":114},[86,1681,1233],{"class":92},[86,1683,1236],{"class":524},[86,1685,864],{"class":114},[86,1687,731],{"class":92},[86,1689,747],{"class":96},[86,1691,750],{"class":524},[86,1693,753],{"class":96},[86,1695,756],{"class":114},[86,1697,1698],{"class":88,"line":621},[86,1699,188],{"emptyLinePlaceholder":187},[86,1701,1702,1704,1706,1708,1711,1713,1715],{"class":88,"line":633},[86,1703,641],{"class":110},[86,1705,728],{"class":114},[86,1707,731],{"class":92},[86,1709,1710],{"class":96}," \"---",[86,1712,750],{"class":524},[86,1714,753],{"class":96},[86,1716,756],{"class":114},[86,1718,1719],{"class":88,"line":638},[86,1720,613],{"class":114},[86,1722,1723],{"class":88,"line":681},[86,1724,188],{"emptyLinePlaceholder":187},[86,1726,1727,1729,1731],{"class":88,"line":686},[86,1728,624],{"class":92},[86,1730,627],{"class":110},[86,1732,630],{"class":114},[86,1734,1735],{"class":88,"line":708},[86,1736,506],{"class":114},[86,1738,1739,1742,1744,1746,1749,1751,1754,1756,1759],{"class":88,"line":717},[86,1740,1741],{"class":114},"    Person p1{",[86,1743,664],{"class":96},[86,1745,667],{"class":114},[86,1747,1748],{"class":524},"20",[86,1750,667],{"class":114},[86,1752,1753],{"class":96},"\"Ali\"",[86,1755,667],{"class":114},[86,1757,1758],{"class":524},"95",[86,1760,678],{"class":114},[86,1762,1763,1766,1768,1770,1773,1775,1777,1780,1782,1785],{"class":88,"line":722},[86,1764,1765],{"class":114},"    Person p2{",[86,1767,670],{"class":96},[86,1769,667],{"class":114},[86,1771,1772],{"class":524},"22",[86,1774,667],{"class":114},[86,1776,111],{"class":110},[86,1778,1779],{"class":114},"::nullopt, ",[86,1781,111],{"class":110},[86,1783,1784],{"class":114},"::nullopt};",[86,1786,1787],{"class":129},"  // 没有昵称和成绩\n",[86,1789,1790],{"class":88,"line":759},[86,1791,188],{"emptyLinePlaceholder":187},[86,1793,1794,1797],{"class":88,"line":764},[86,1795,1796],{"class":110},"    print_person",[86,1798,1799],{"class":114},"(p1);\n",[86,1801,1802,1804],{"class":88,"line":769},[86,1803,1796],{"class":110},[86,1805,1806],{"class":114},"(p2);\n",[86,1808,1809],{"class":88,"line":788},[86,1810,188],{"emptyLinePlaceholder":187},[86,1812,1813,1815,1817],{"class":88,"line":801},[86,1814,600],{"class":92},[86,1816,525],{"class":524},[86,1818,756],{"class":114},[86,1820,1821],{"class":88,"line":806},[86,1822,613],{"class":114},[14,1824,1825,935],{},[932,1826,934],{},[77,1828,1831],{"className":1829,"code":1830,"language":941},[939],"Name: Alice\nAge: 20\nNickname: Ali\nScore: 95\n---\nName: Bob\nAge: 22\nNickname: (none)\nScore: -1\n---\n",[28,1832,1830],{"__ignoreMap":82},[10,1834,934],{"id":934},[14,1836,1837],{},"见上方每个示例的\"运行结果\"。",[10,1839,1840],{"id":1840},"示例中的关键语法解释",[296,1842,1843,1862],{},[299,1844,1845],{},[302,1846,1847,1850,1853,1856,1859],{},[305,1848,1849],{"align":307},"示例",[305,1851,1852],{"align":307},"讲了什么",[305,1854,1855],{"align":307},"新出现的语法",[305,1857,1858],{"align":307},"为什么这样写",[305,1860,1861],{"align":307},"注意事项",[313,1863,1864,1899,1923],{},[302,1865,1866,1869,1872,1890,1893],{},[318,1867,1868],{"align":307},"示例 1",[318,1870,1871],{"align":307},"optional 返回查找结果",[318,1873,1874,1877,1878,1881,1882,1881,1885,1881,1887],{"align":307},[28,1875,1876],{},"return i;"," / ",[28,1879,1880],{},"return std::nullopt;","、",[28,1883,1884],{},"if(opt)",[28,1886,346],{},[28,1888,1889],{},"value_or()",[318,1891,1892],{"align":307},"optional 让\"没有值\"成为正常返回，语义清晰",[318,1894,1895,1896,1898],{"align":307},"解引用 ",[28,1897,346],{}," 前要确保有值",[302,1900,1901,1904,1907,1913,1916],{},[318,1902,1903],{"align":307},"示例 2",[318,1905,1906],{"align":307},"optional 表示转换失败",[318,1908,1909,1912],{"align":307},[28,1910,1911],{},"try/catch"," 包装 + optional",[318,1914,1915],{"align":307},"把异常转换成空 optional，调用者更易处理",[318,1917,1918,1919,1922],{"align":307},"也可以用 ",[28,1920,1921],{},"std::from_chars","（C++17）更高效",[302,1924,1925,1928,1931,1937,1940],{},[318,1926,1927],{"align":307},"示例 3",[318,1929,1930],{"align":307},"optional 作为成员变量",[318,1932,1933,1936],{"align":307},[28,1934,1935],{},"std::optional\u003Cstd::string>"," 成员",[318,1938,1939],{"align":307},"\"可选字段\"用 optional 比用 magic value（如 -1）更清晰",[318,1941,1942],{"align":307},"optional 本身占用额外空间（T 的大小 + bool + padding）",[10,1944,1946],{"id":1945},"optional-适合可能没有不适合错误详情很多","optional 适合\"可能没有\"，不适合\"错误详情很多\"",[14,1948,1949,1951],{},[28,1950,438],{}," 表达的是：这个值可能存在，也可能不存在。它不负责说明“为什么失败”。",[296,1953,1954,1964],{},[299,1955,1956],{},[302,1957,1958,1961],{},[305,1959,1960],{"align":307},"场景",[305,1962,1963],{"align":307},"推荐",[313,1965,1966,1976,1985,1995,2007],{},[302,1967,1968,1971],{},[318,1969,1970],{"align":307},"查找名字，可能找不到",[318,1972,1973],{"align":307},[28,1974,1975],{},"std::optional\u003Csize_t>",[302,1977,1978,1981],{},[318,1979,1980],{"align":307},"配置项可能没填",[318,1982,1983],{"align":307},[28,1984,1935],{},[302,1986,1987,1990],{},[318,1988,1989],{"align":307},"字符串转数字，只关心成不成功",[318,1991,1992],{"align":307},[28,1993,1994],{},"std::optional\u003Cint>",[302,1996,1997,2000],{},[318,1998,1999],{"align":307},"打开文件失败，需要知道权限/路径/格式错误",[318,2001,2002,2003,2006],{"align":307},"错误码、异常、或 ",[28,2004,2005],{},"expected"," 类工具",[302,2008,2009,2012],{},[318,2010,2011],{"align":307},"网络请求失败，需要错误类型和错误消息",[318,2013,2014],{"align":307},"错误对象，不要只用 optional",[384,2016,2018],{"id":2017},"示例-4optional-和错误信息的区别","示例 4：optional 和错误信息的区别",[77,2020,2022],{"className":79,"code":2021,"language":81,"meta":82,"style":82},"#include \u003Ciostream>\n#include \u003Coptional>\n#include \u003Cstring>\n\n// 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    // 程序从 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,2023,2024,2030,2036,2042,2046,2051,2085,2089,2093,2097,2115,2140,2144,2151,2155,2159,2165,2173,2177,2181,2188,2192,2200,2207,2214,2218,2222,2246,2250,2254,2258,2274,2295,2299,2320,2324,2342,2346,2353,2357,2376,2380,2385,2390,2399,2404,2410,2430,2471,2476,2494,2506,2511,2538,2543,2548,2557],{"__ignoreMap":82},[86,2025,2026,2028],{"class":88,"line":89},[86,2027,93],{"class":92},[86,2029,399],{"class":96},[86,2031,2032,2034],{"class":88,"line":133},[86,2033,93],{"class":92},[86,2035,97],{"class":96},[86,2037,2038,2040],{"class":88,"line":158},[86,2039,93],{"class":92},[86,2041,412],{"class":96},[86,2043,2044],{"class":88,"line":184},[86,2045,188],{"emptyLinePlaceholder":187},[86,2047,2048],{"class":88,"line":191},[86,2049,2050],{"class":129},"// optional 表示“可能有值，也可能没有值”的结果。\n",[86,2052,2053,2055,2057,2059,2061,2063,2065,2068,2070,2072,2074,2076,2078,2080,2083],{"class":88,"line":197},[86,2054,111],{"class":110},[86,2056,435],{"class":114},[86,2058,438],{"class":110},[86,2060,118],{"class":114},[86,2062,624],{"class":92},[86,2064,446],{"class":114},[86,2066,2067],{"class":110},"parse_port_simple",[86,2069,282],{"class":114},[86,2071,454],{"class":92},[86,2073,175],{"class":110},[86,2075,435],{"class":114},[86,2077,470],{"class":110},[86,2079,475],{"class":92},[86,2081,2082],{"class":478}," text",[86,2084,501],{"class":114},[86,2086,2087],{"class":88,"line":212},[86,2088,506],{"class":114},[86,2090,2091],{"class":88,"line":223},[86,2092,1022],{"class":92},[86,2094,2095],{"class":88,"line":228},[86,2096,550],{"class":114},[86,2098,2099,2101,2104,2106,2108,2110,2112],{"class":88,"line":234},[86,2100,1039],{"class":92},[86,2102,2103],{"class":114}," port ",[86,2105,149],{"class":92},[86,2107,175],{"class":110},[86,2109,435],{"class":114},[86,2111,1051],{"class":110},[86,2113,2114],{"class":114},"(text);\n",[86,2116,2117,2119,2122,2125,2127,2130,2132,2135,2138],{"class":88,"line":254},[86,2118,555],{"class":92},[86,2120,2121],{"class":114}," (port ",[86,2123,2124],{"class":92},">=",[86,2126,525],{"class":524},[86,2128,2129],{"class":92}," &&",[86,2131,2103],{"class":114},[86,2133,2134],{"class":92},"\u003C=",[86,2136,2137],{"class":524}," 65535",[86,2139,501],{"class":114},[86,2141,2142],{"class":88,"line":270},[86,2143,570],{"class":114},[86,2145,2146,2148],{"class":88,"line":567},[86,2147,576],{"class":92},[86,2149,2150],{"class":114}," port;\n",[86,2152,2153],{"class":88,"line":573},[86,2154,588],{"class":114},[86,2156,2157],{"class":88,"line":585},[86,2158,594],{"class":114},[86,2160,2161,2163],{"class":88,"line":591},[86,2162,1103],{"class":92},[86,2164,1106],{"class":114},[86,2166,2167,2169,2171],{"class":88,"line":597},[86,2168,600],{"class":92},[86,2170,175],{"class":110},[86,2172,1115],{"class":114},[86,2174,2175],{"class":88,"line":610},[86,2176,613],{"class":114},[86,2178,2179],{"class":88,"line":616},[86,2180,188],{"emptyLinePlaceholder":187},[86,2182,2183,2185],{"class":88,"line":621},[86,2184,1477],{"class":92},[86,2186,2187],{"class":110}," ParseResult\n",[86,2189,2190],{"class":88,"line":633},[86,2191,506],{"class":114},[86,2193,2194,2197],{"class":88,"line":638},[86,2195,2196],{"class":92},"    bool",[86,2198,2199],{"class":114}," ok;\n",[86,2201,2202,2204],{"class":88,"line":681},[86,2203,1496],{"class":92},[86,2205,2206],{"class":114}," value;\n",[86,2208,2209,2211],{"class":88,"line":686},[86,2210,641],{"class":110},[86,2212,2213],{"class":114},"::string error;\n",[86,2215,2216],{"class":88,"line":708},[86,2217,678],{"class":114},[86,2219,2220],{"class":88,"line":717},[86,2221,188],{"emptyLinePlaceholder":187},[86,2223,2224,2227,2230,2232,2234,2236,2238,2240,2242,2244],{"class":88,"line":722},[86,2225,2226],{"class":110},"ParseResult",[86,2228,2229],{"class":110}," parse_port_with_error",[86,2231,282],{"class":114},[86,2233,454],{"class":92},[86,2235,175],{"class":110},[86,2237,435],{"class":114},[86,2239,470],{"class":110},[86,2241,475],{"class":92},[86,2243,2082],{"class":478},[86,2245,501],{"class":114},[86,2247,2248],{"class":88,"line":759},[86,2249,506],{"class":114},[86,2251,2252],{"class":88,"line":764},[86,2253,1022],{"class":92},[86,2255,2256],{"class":88,"line":769},[86,2257,550],{"class":114},[86,2259,2260,2262,2264,2266,2268,2270,2272],{"class":88,"line":788},[86,2261,1039],{"class":92},[86,2263,2103],{"class":114},[86,2265,149],{"class":92},[86,2267,175],{"class":110},[86,2269,435],{"class":114},[86,2271,1051],{"class":110},[86,2273,2114],{"class":114},[86,2275,2276,2278,2280,2282,2284,2287,2289,2291,2293],{"class":88,"line":801},[86,2277,555],{"class":92},[86,2279,2121],{"class":114},[86,2281,118],{"class":92},[86,2283,525],{"class":524},[86,2285,2286],{"class":92}," ||",[86,2288,2103],{"class":114},[86,2290,123],{"class":92},[86,2292,2137],{"class":524},[86,2294,501],{"class":114},[86,2296,2297],{"class":88,"line":806},[86,2298,570],{"class":114},[86,2300,2301,2303,2305,2308,2310,2313,2315,2318],{"class":88,"line":824},[86,2302,576],{"class":92},[86,2304,661],{"class":114},[86,2306,2307],{"class":524},"false",[86,2309,667],{"class":114},[86,2311,2312],{"class":524},"0",[86,2314,667],{"class":114},[86,2316,2317],{"class":96},"\"port out of range\"",[86,2319,678],{"class":114},[86,2321,2322],{"class":88,"line":829},[86,2323,588],{"class":114},[86,2325,2326,2329,2331,2334,2337,2340],{"class":88,"line":834},[86,2327,2328],{"class":92},"        return",[86,2330,661],{"class":114},[86,2332,2333],{"class":524},"true",[86,2335,2336],{"class":114},", port, ",[86,2338,2339],{"class":96},"\"\"",[86,2341,678],{"class":114},[86,2343,2344],{"class":88,"line":840},[86,2345,594],{"class":114},[86,2347,2348,2350],{"class":88,"line":877},[86,2349,1103],{"class":92},[86,2351,2352],{"class":114}," (...)\n",[86,2354,2355],{"class":88,"line":912},[86,2356,550],{"class":114},[86,2358,2359,2361,2363,2365,2367,2369,2371,2374],{"class":88,"line":917},[86,2360,2328],{"class":92},[86,2362,661],{"class":114},[86,2364,2307],{"class":524},[86,2366,667],{"class":114},[86,2368,2312],{"class":524},[86,2370,667],{"class":114},[86,2372,2373],{"class":96},"\"not a number\"",[86,2375,678],{"class":114},[86,2377,2378],{"class":88,"line":926},[86,2379,594],{"class":114},[86,2381,2383],{"class":88,"line":2382},42,[86,2384,613],{"class":114},[86,2386,2388],{"class":88,"line":2387},43,[86,2389,188],{"emptyLinePlaceholder":187},[86,2391,2393,2395,2397],{"class":88,"line":2392},44,[86,2394,624],{"class":92},[86,2396,627],{"class":110},[86,2398,630],{"class":114},[86,2400,2402],{"class":88,"line":2401},45,[86,2403,506],{"class":114},[86,2405,2407],{"class":88,"line":2406},46,[86,2408,2409],{"class":129},"    // 程序从 main 函数开始执行，下面的语句会按顺序运行。\n",[86,2411,2413,2415,2418,2420,2423,2425,2428],{"class":88,"line":2412},47,[86,2414,689],{"class":92},[86,2416,2417],{"class":114}," simple ",[86,2419,149],{"class":92},[86,2421,2422],{"class":110}," parse_port_simple",[86,2424,282],{"class":114},[86,2426,2427],{"class":96},"\"70000\"",[86,2429,705],{"class":114},[86,2431,2433,2435,2437,2439,2442,2444,2447,2450,2453,2456,2459,2461,2463,2465,2467,2469],{"class":88,"line":2432},48,[86,2434,641],{"class":110},[86,2436,728],{"class":114},[86,2438,731],{"class":92},[86,2440,2441],{"class":96}," \"simple ok? \"",[86,2443,737],{"class":92},[86,2445,2446],{"class":114}," (simple ",[86,2448,2449],{"class":92},"?",[86,2451,2452],{"class":96}," \"yes\"",[86,2454,2455],{"class":92}," :",[86,2457,2458],{"class":96}," \"no\"",[86,2460,864],{"class":114},[86,2462,731],{"class":92},[86,2464,747],{"class":96},[86,2466,750],{"class":524},[86,2468,753],{"class":96},[86,2470,756],{"class":114},[86,2472,2474],{"class":88,"line":2473},49,[86,2475,188],{"emptyLinePlaceholder":187},[86,2477,2479,2481,2484,2486,2488,2490,2492],{"class":88,"line":2478},50,[86,2480,689],{"class":92},[86,2482,2483],{"class":114}," detailed ",[86,2485,149],{"class":92},[86,2487,2229],{"class":110},[86,2489,282],{"class":114},[86,2491,2427],{"class":96},[86,2493,705],{"class":114},[86,2495,2497,2499,2501,2503],{"class":88,"line":2496},51,[86,2498,711],{"class":92},[86,2500,514],{"class":114},[86,2502,795],{"class":92},[86,2504,2505],{"class":114},"detailed.ok)\n",[86,2507,2509],{"class":88,"line":2508},52,[86,2510,550],{"class":114},[86,2512,2514,2516,2518,2520,2523,2525,2528,2530,2532,2534,2536],{"class":88,"line":2513},53,[86,2515,725],{"class":110},[86,2517,728],{"class":114},[86,2519,731],{"class":92},[86,2521,2522],{"class":96}," \"error: \"",[86,2524,737],{"class":92},[86,2526,2527],{"class":114}," detailed.error ",[86,2529,731],{"class":92},[86,2531,747],{"class":96},[86,2533,750],{"class":524},[86,2535,753],{"class":96},[86,2537,756],{"class":114},[86,2539,2541],{"class":88,"line":2540},54,[86,2542,594],{"class":114},[86,2544,2546],{"class":88,"line":2545},55,[86,2547,188],{"emptyLinePlaceholder":187},[86,2549,2551,2553,2555],{"class":88,"line":2550},56,[86,2552,600],{"class":92},[86,2554,525],{"class":524},[86,2556,756],{"class":114},[86,2558,2560],{"class":88,"line":2559},57,[86,2561,613],{"class":114},[14,2563,2564,935],{},[932,2565,934],{},[77,2567,2570],{"className":2568,"code":2569,"language":941},[939],"simple ok? no\nerror: port out of range\n",[28,2571,2569],{"__ignoreMap":82},[14,2573,2574,2575,2577,2578,2580],{},"如果调用者只关心“有没有值”，",[28,2576,438],{}," 很合适；如果调用者需要知道失败原因，单独的 ",[28,2579,438],{}," 就不够了。",[10,2582,2583],{"id":2583},"常见错误",[14,2585,2586],{},[932,2587,2588,2589],{},"错误 1：不检查直接 ",[28,2590,346],{},[77,2592,2594],{"className":79,"code":2593,"language":81,"meta":82,"style":82},"std::optional\u003Cint> opt;\nstd::cout \u003C\u003C *opt;  // ❌ 未定义行为！opt 为空\n",[28,2595,2596,2607],{"__ignoreMap":82},[86,2597,2598,2600,2602,2604],{"class":88,"line":89},[86,2599,111],{"class":110},[86,2601,115],{"class":114},[86,2603,1528],{"class":92},[86,2605,2606],{"class":114}," opt;\n",[86,2608,2609,2611,2613,2615,2617,2619],{"class":88,"line":133},[86,2610,111],{"class":110},[86,2612,728],{"class":114},[86,2614,731],{"class":92},[86,2616,261],{"class":92},[86,2618,264],{"class":114},[86,2620,2621],{"class":129},"  // ❌ 未定义行为！opt 为空\n",[14,2623,2624,2625,2628,2629,2631],{},"正确做法：先 ",[28,2626,2627],{},"if (opt)"," 检查，或用 ",[28,2630,356],{},"。",[14,2633,2634],{},[932,2635,2636,2637,2640,2641,2643],{},"错误 2：把 ",[28,2638,2639],{},"std::nullopt"," 和 ",[28,2642,34],{}," 混淆",[77,2645,2647],{"className":79,"code":2646,"language":81,"meta":82,"style":82},"std::optional\u003Cint> opt = nullptr;  // ❌ 编译错误！应该用 std::nullopt\n",[28,2648,2649],{"__ignoreMap":82},[86,2650,2651,2653,2655,2657,2659,2661,2664,2667],{"class":88,"line":89},[86,2652,111],{"class":110},[86,2654,115],{"class":114},[86,2656,1528],{"class":92},[86,2658,146],{"class":114},[86,2660,149],{"class":92},[86,2662,2663],{"class":524}," nullptr",[86,2665,2666],{"class":114},";",[86,2668,2669],{"class":129},"  // ❌ 编译错误！应该用 std::nullopt\n",[14,2671,2672,2673],{},"正确做法：",[28,2674,2675],{},"opt = std::nullopt;",[14,2677,2678],{},[932,2679,2680,2681,2684],{},"错误 3：忘记 ",[28,2682,2683],{},"value()"," 会在无值时抛异常",[77,2686,2688],{"className":79,"code":2687,"language":81,"meta":82,"style":82},"std::optional\u003Cint> opt;\nstd::cout \u003C\u003C opt.value();  // ❌ 抛出 std::bad_optional_access\n",[28,2689,2690,2700],{"__ignoreMap":82},[86,2691,2692,2694,2696,2698],{"class":88,"line":89},[86,2693,111],{"class":110},[86,2695,115],{"class":114},[86,2697,1528],{"class":92},[86,2699,2606],{"class":114},[86,2701,2702,2704,2706,2708,2710,2712,2714],{"class":88,"line":133},[86,2703,111],{"class":110},[86,2705,728],{"class":114},[86,2707,731],{"class":92},[86,2709,242],{"class":114},[86,2711,245],{"class":110},[86,2713,248],{"class":114},[86,2715,2716],{"class":129},"  // ❌ 抛出 std::bad_optional_access\n",[14,2718,2719,2720,2723],{},"正确做法：用 ",[28,2721,2722],{},"value_or(default)"," 或先检查。",[10,2725,2726],{"id":2726},"使用建议",[2728,2729,2730,2738,2744,2757,2769,2787],"ol",{},[24,2731,2732,2737],{},[932,2733,2734,2735],{},"函数可能\"没有结果\"时返回 ",[28,2736,52],{},"：比返回 -1/nullptr 更安全。",[24,2739,2740,2743],{},[932,2741,2742],{},"结构体中\"可选字段\"用 optional","：比 magic number 语义更清晰。",[24,2745,2746,935,2754,2756],{},[932,2747,2748,2749,2751,2752],{},"默认用 ",[28,2750,1889],{}," 而不是 ",[28,2753,346],{},[28,2755,1889],{}," 更安全。",[24,2758,2759,2764,2765,2768],{},[932,2760,2761,2763],{},[28,2762,5],{}," 有额外空间开销","：等于 ",[28,2766,2767],{},"sizeof(T) + sizeof(bool) + padding","，小对象影响不大。",[24,2770,2771,935,2777,667,2780,667,2783,2786],{},[932,2772,2773,2774,2776],{},"C++23 引入了 ",[28,2775,5],{}," 的 monadic 操作",[28,2778,2779],{},".and_then()",[28,2781,2782],{},".transform()",[28,2784,2785],{},".or_else()"," 链式调用更优雅。",[24,2788,2789,2792],{},[932,2790,2791],{},"需要错误详情时别只用 optional","：optional 只表达有没有值，不表达为什么没有。",[10,2794,2795],{"id":2795},"小结",[21,2797,2798,2806,2809,2821],{},[24,2799,2800,2802,2803,2805],{},[28,2801,52],{}," 要么包含一个 ",[28,2804,64],{},"，要么为空。",[24,2807,2808],{},"解决了函数\"可能没结果\"的语义问题，替代 magic value。",[24,2810,2811,2812,31,2815,2817,2818,2820],{},"用 ",[28,2813,2814],{},"has_value()",[28,2816,1884],{}," 检查，用 ",[28,2819,2722],{}," 安全获取值。",[24,2822,2823],{},"可用于函数返回值、结构体成员、函数参数（但参数不推荐用 optional）。",[2825,2826,2827],"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":2829},[2830,2831,2832,2833,2834,2835,2836,2841,2842,2843,2846,2847,2848],{"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":2837},[2838,2839,2840],{"id":386,"depth":158,"text":387},{"id":946,"depth":158,"text":947},{"id":1444,"depth":158,"text":1445},{"id":934,"depth":133,"text":934},{"id":1840,"depth":133,"text":1840},{"id":1945,"depth":133,"text":1946,"children":2844},[2845],{"id":2017,"depth":158,"text":2018},{"id":2583,"depth":133,"text":2583},{"id":2726,"depth":133,"text":2726},{"id":2795,"depth":133,"text":2795},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-14-std-optional","18.14",18140000,"2023-10-05","wiki/2023-10-05-cplusplus-jiao-xue","zh-cn:2023-10-05-cplusplus-jiao-xue","/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md","wiki/2023-10-05-Cplusplus教学/ch18-14-std-optional",false,null,"/wiki/2023-10-05-cplusplus-jiao-xue/ch18-14-std-optional","zh-CN","zh-cn",{},{"title":5,"description":82},"HssuDXMadfr9wZygqbKWIQrC07tpt_oTD3UpcSHSGIo",[2868,2873,2879,2885,2891,2897,2903,2909,2915,2921,2927,2933,2939,2945,2951,2957,2963,2969,2975,2981,2987,2993,2999,3005,3010,3016,3022,3028,3034,3035,3041,3047,3053,3059,3065,3071,3077,3083,3089,3094,3100,3106,3112,3118,3124,3130,3136,3142,3148,3154,3160,3166,3172,3178,3184,3190,3196,3202,3208,3214,3220,3226,3232,3238,3244,3250,3256,3262,3268,3274],{"path":2869,"stem":2870,"title":2871,"date":2852,"chapter":1236,"chapterSort":2872,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch1-c-ji-chu-chu-shi","wiki/2023-10-05-Cplusplus教学/ch1-C++基础初识","C++基础初识",1000000,{"path":2874,"stem":2875,"title":2876,"date":2852,"chapter":2877,"chapterSort":2878,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch10-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","wiki/2023-10-05-Cplusplus教学/ch10-内存分区与生命周期","内存分区与生命周期","10",10000000,{"path":2880,"stem":2881,"title":2882,"date":2852,"chapter":2883,"chapterSort":2884,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch11-yin-yong","wiki/2023-10-05-Cplusplus教学/ch11-引用","引用","11",11000000,{"path":2886,"stem":2887,"title":2888,"date":2852,"chapter":2889,"chapterSort":2890,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch12-han-shu-ti-gao-yu-ming-ming-kong-jian","wiki/2023-10-05-Cplusplus教学/ch12-函数提高与命名空间","函数提高与命名空间","12",12000000,{"path":2892,"stem":2893,"title":2894,"date":2852,"chapter":2895,"chapterSort":2896,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-1-feng-zhuang","wiki/2023-10-05-Cplusplus教学/ch13-1-封装","封装","13.1",13010000,{"path":2898,"stem":2899,"title":2900,"date":2852,"chapter":2901,"chapterSort":2902,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-2-dui-xiang-chu-shi-hua-he-qing-li","wiki/2023-10-05-Cplusplus教学/ch13-2-对象初始化和清理","对象初始化和清理","13.2",13020000,{"path":2904,"stem":2905,"title":2906,"date":2852,"chapter":2907,"chapterSort":2908,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-3-dui-xiang-mo-xing-yu-this-zhi-zhen","wiki/2023-10-05-Cplusplus教学/ch13-3-对象模型与this指针","对象模型与this指针","13.3",13030000,{"path":2910,"stem":2911,"title":2912,"date":2852,"chapter":2913,"chapterSort":2914,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-4-you-yuan-yu-yun-suan-fu-zhong-zai","wiki/2023-10-05-Cplusplus教学/ch13-4-友元与运算符重载","友元与运算符重载","13.4",13040000,{"path":2916,"stem":2917,"title":2918,"date":2852,"chapter":2919,"chapterSort":2920,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-5-ji-cheng","wiki/2023-10-05-Cplusplus教学/ch13-5-继承","继承","13.5",13050000,{"path":2922,"stem":2923,"title":2924,"date":2852,"chapter":2925,"chapterSort":2926,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-6-duo-tai","wiki/2023-10-05-Cplusplus教学/ch13-6-多态","多态","13.6",13060000,{"path":2928,"stem":2929,"title":2930,"date":2852,"chapter":2931,"chapterSort":2932,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-lei-he-dui-xiang","wiki/2023-10-05-Cplusplus教学/ch13-类和对象","类和对象","13",13000000,{"path":2934,"stem":2935,"title":2936,"date":2852,"chapter":2937,"chapterSort":2938,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch14-wen-jian-cao-zuo","wiki/2023-10-05-Cplusplus教学/ch14-文件操作","文件操作","14",14000000,{"path":2940,"stem":2941,"title":2942,"date":2852,"chapter":2943,"chapterSort":2944,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch15-mu-ban","wiki/2023-10-05-Cplusplus教学/ch15-模板","模板","15",15000000,{"path":2946,"stem":2947,"title":2948,"date":2852,"chapter":2949,"chapterSort":2950,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-1-stl-chu-shi","wiki/2023-10-05-Cplusplus教学/ch16-1-STL初识","STL初识","16.1",16010000,{"path":2952,"stem":2953,"title":2954,"date":2852,"chapter":2955,"chapterSort":2956,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-2-std-array","wiki/2023-10-05-Cplusplus教学/ch16-2-std-array","std::array","16.2",16020000,{"path":2958,"stem":2959,"title":2960,"date":2852,"chapter":2961,"chapterSort":2962,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-3-string-rong-qi","wiki/2023-10-05-Cplusplus教学/ch16-3-string容器","string容器","16.3",16030000,{"path":2964,"stem":2965,"title":2966,"date":2852,"chapter":2967,"chapterSort":2968,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-4-vector-yu-deque-rong-qi","wiki/2023-10-05-Cplusplus教学/ch16-4-vector与deque容器","vector与deque容器","16.4",16040000,{"path":2970,"stem":2971,"title":2972,"date":2852,"chapter":2973,"chapterSort":2974,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-5-stack-queue-list-rong-qi","wiki/2023-10-05-Cplusplus教学/ch16-5-stack-queue-list容器","stack / queue / list 容器","16.5",16050000,{"path":2976,"stem":2977,"title":2978,"date":2852,"chapter":2979,"chapterSort":2980,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-6-set-map-rong-qi","wiki/2023-10-05-Cplusplus教学/ch16-6-set-map容器","set / map 容器","16.6",16060000,{"path":2982,"stem":2983,"title":2984,"date":2852,"chapter":2985,"chapterSort":2986,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-7-han-shu-dui-xiang-yu-wei-ci","wiki/2023-10-05-Cplusplus教学/ch16-7-函数对象与谓词","函数对象与谓词","16.7",16070000,{"path":2988,"stem":2989,"title":2990,"date":2852,"chapter":2991,"chapterSort":2992,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-8-chang-yong-suan-fa","wiki/2023-10-05-Cplusplus教学/ch16-8-常用算法","常用算法","16.8",16080000,{"path":2994,"stem":2995,"title":2996,"date":2852,"chapter":2997,"chapterSort":2998,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-stl-ti-gao-bian-cheng","wiki/2023-10-05-Cplusplus教学/ch16-STL提高编程","STL提高编程","16",16000000,{"path":3000,"stem":3001,"title":3002,"date":2852,"chapter":3003,"chapterSort":3004,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch17-c-lei-xing-zhuan-huan","wiki/2023-10-05-Cplusplus教学/ch17-C++类型转换","C++类型转换","17",17000000,{"path":3006,"stem":3007,"title":1354,"date":2852,"chapter":3008,"chapterSort":3009,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-1-auto","wiki/2023-10-05-Cplusplus教学/ch18-1-auto","18.1",18010000,{"path":3011,"stem":3012,"title":3013,"date":2852,"chapter":3014,"chapterSort":3015,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-10-you-zhi-yin-yong-he-yi-dong-yu-yi","wiki/2023-10-05-Cplusplus教学/ch18-10-右值引用和移动语义","右值引用和移动语义","18.10",18100000,{"path":3017,"stem":3018,"title":3019,"date":2852,"chapter":3020,"chapterSort":3021,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-11-lambda-biao-da-shi","wiki/2023-10-05-Cplusplus教学/ch18-11-Lambda表达式","Lambda 表达式","18.11",18110000,{"path":3023,"stem":3024,"title":3025,"date":2852,"chapter":3026,"chapterSort":3027,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-12-std-function","wiki/2023-10-05-Cplusplus教学/ch18-12-std-function","std::function","18.12",18120000,{"path":3029,"stem":3030,"title":3031,"date":2852,"chapter":3032,"chapterSort":3033,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-13-std-bind","wiki/2023-10-05-Cplusplus教学/ch18-13-std-bind","std::bind","18.13",18130000,{"path":2849,"stem":2858,"title":5,"date":2852,"chapter":2850,"chapterSort":2851,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},{"path":3036,"stem":3037,"title":3038,"date":2852,"chapter":3039,"chapterSort":3040,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-15-std-variant","wiki/2023-10-05-Cplusplus教学/ch18-15-std-variant","std::variant","18.15",18150000,{"path":3042,"stem":3043,"title":3044,"date":2852,"chapter":3045,"chapterSort":3046,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-16-std-span","wiki/2023-10-05-Cplusplus教学/ch18-16-std-span","std::span","18.16",18160000,{"path":3048,"stem":3049,"title":3050,"date":2852,"chapter":3051,"chapterSort":3052,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-17-std-format-print","wiki/2023-10-05-Cplusplus教学/ch18-17-std-format-print","std::format / std::print","18.17",18170000,{"path":3054,"stem":3055,"title":3056,"date":2852,"chapter":3057,"chapterSort":3058,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-18-std-chrono","wiki/2023-10-05-Cplusplus教学/ch18-18-std-chrono","std::chrono","18.18",18180000,{"path":3060,"stem":3061,"title":3062,"date":2852,"chapter":3063,"chapterSort":3064,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-1-std-thread","wiki/2023-10-05-Cplusplus教学/ch18-19-1-std-thread","std::thread 与 join","18.19.1",18190100,{"path":3066,"stem":3067,"title":3068,"date":2852,"chapter":3069,"chapterSort":3070,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-2-mutex-lock-guard","wiki/2023-10-05-Cplusplus教学/ch18-19-2-mutex-lock-guard","mutex 与 lock_guard","18.19.2",18190200,{"path":3072,"stem":3073,"title":3074,"date":2852,"chapter":3075,"chapterSort":3076,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-3-std-atomic","wiki/2023-10-05-Cplusplus教学/ch18-19-3-std-atomic","std::atomic","18.19.3",18190300,{"path":3078,"stem":3079,"title":3080,"date":2852,"chapter":3081,"chapterSort":3082,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-4-condition-variable","wiki/2023-10-05-Cplusplus教学/ch18-19-4-condition-variable","condition_variable","18.19.4",18190400,{"path":3084,"stem":3085,"title":3086,"date":2852,"chapter":3087,"chapterSort":3088,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-bing-fa-bian-cheng","wiki/2023-10-05-Cplusplus教学/ch18-19-并发编程","并发编程","18.19",18190000,{"path":3090,"stem":3091,"title":34,"date":2852,"chapter":3092,"chapterSort":3093,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-2-nullptr","wiki/2023-10-05-Cplusplus教学/ch18-2-nullptr","18.2",18020000,{"path":3095,"stem":3096,"title":3097,"date":2852,"chapter":3098,"chapterSort":3099,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-20-std-filesystem","wiki/2023-10-05-Cplusplus教学/ch18-20-std-filesystem","std::filesystem","18.20",18200000,{"path":3101,"stem":3102,"title":3103,"date":2852,"chapter":3104,"chapterSort":3105,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-21-modules-jian-jie","wiki/2023-10-05-Cplusplus教学/ch18-21-modules简介","modules 简介","18.21",18210000,{"path":3107,"stem":3108,"title":3109,"date":2852,"chapter":3110,"chapterSort":3111,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-3-using","wiki/2023-10-05-Cplusplus教学/ch18-3-using","using","18.3",18030000,{"path":3113,"stem":3114,"title":3115,"date":2852,"chapter":3116,"chapterSort":3117,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-4-enum-class","wiki/2023-10-05-Cplusplus教学/ch18-4-enum-class","enum class","18.4",18040000,{"path":3119,"stem":3120,"title":3121,"date":2852,"chapter":3122,"chapterSort":3123,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-5-fan-wei-for-xun-huan","wiki/2023-10-05-Cplusplus教学/ch18-5-范围for循环","范围 for 循环","18.5",18050000,{"path":3125,"stem":3126,"title":3127,"date":2852,"chapter":3128,"chapterSort":3129,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-6-jie-gou-hua-bang-ding","wiki/2023-10-05-Cplusplus教学/ch18-6-结构化绑定","结构化绑定","18.6",18060000,{"path":3131,"stem":3132,"title":3133,"date":2852,"chapter":3134,"chapterSort":3135,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-7-constexpr","wiki/2023-10-05-Cplusplus教学/ch18-7-constexpr","constexpr","18.7",18070000,{"path":3137,"stem":3138,"title":3139,"date":2852,"chapter":3140,"chapterSort":3141,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-8-raii","wiki/2023-10-05-Cplusplus教学/ch18-8-RAII","RAII","18.8",18080000,{"path":3143,"stem":3144,"title":3145,"date":2852,"chapter":3146,"chapterSort":3147,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-9-zhi-neng-zhi-zhen","wiki/2023-10-05-Cplusplus教学/ch18-9-智能指针","智能指针","18.9",18090000,{"path":3149,"stem":3150,"title":3151,"date":2852,"chapter":3152,"chapterSort":3153,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-xian-dai-c","wiki/2023-10-05-Cplusplus教学/ch18-现代C++","现代C++","18",18000000,{"path":3155,"stem":3156,"title":3157,"date":2852,"chapter":3158,"chapterSort":3159,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-1-ding-shi-qi-yu-yi-bu-io","wiki/2023-10-05-Cplusplus教学/ch19-1-1-定时器与异步IO","定时器与异步 IO","19.1.1",19010100,{"path":3161,"stem":3162,"title":3163,"date":2852,"chapter":3164,"chapterSort":3165,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-2-boost-asio-ji-chu","wiki/2023-10-05-Cplusplus教学/ch19-1-2-Boost.Asio基础","Boost.Asio 基础","19.1.2",19010200,{"path":3167,"stem":3168,"title":3169,"date":2852,"chapter":3170,"chapterSort":3171,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-3-chuan-kou-tong-xin","wiki/2023-10-05-Cplusplus教学/ch19-1-3-串口通信","串口通信","19.1.3",19010300,{"path":3173,"stem":3174,"title":3175,"date":2852,"chapter":3176,"chapterSort":3177,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-4-tcp-tong-xin","wiki/2023-10-05-Cplusplus教学/ch19-1-4-TCP通信","TCP 通信","19.1.4",19010400,{"path":3179,"stem":3180,"title":3181,"date":2852,"chapter":3182,"chapterSort":3183,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-5-udp-tong-xin","wiki/2023-10-05-Cplusplus教学/ch19-1-5-UDP通信","UDP 通信","19.1.5",19010500,{"path":3185,"stem":3186,"title":3187,"date":2852,"chapter":3188,"chapterSort":3189,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-6-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","wiki/2023-10-05-Cplusplus教学/ch19-1-6-机器人工程写法与ROS2集成","机器人工程写法与 ROS2 集成","19.1.6",19010600,{"path":3191,"stem":3192,"title":3193,"date":2852,"chapter":3194,"chapterSort":3195,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-boost-asio-yi-bu-io-ku","wiki/2023-10-05-Cplusplus教学/ch19-1-Boost.Asio异步IO库","Boost.Asio异步IO库","19.1",19010000,{"path":3197,"stem":3198,"title":3199,"date":2852,"chapter":3200,"chapterSort":3201,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-2-eigen-xian-xing-dai-shu-ku","wiki/2023-10-05-Cplusplus教学/ch19-2-Eigen线性代数库","Eigen线性代数库","19.2",19020000,{"path":3203,"stem":3204,"title":3205,"date":2852,"chapter":3206,"chapterSort":3207,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-3-opencv-ji-suan-ji-shi-jue-ku","wiki/2023-10-05-Cplusplus教学/ch19-3-OpenCV计算机视觉库","OpenCV计算机视觉库","19.3",19030000,{"path":3209,"stem":3210,"title":3211,"date":2852,"chapter":3212,"chapterSort":3213,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-4-pcl-dian-yun-ku","wiki/2023-10-05-Cplusplus教学/ch19-4-PCL点云库","PCL点云库","19.4",19040000,{"path":3215,"stem":3216,"title":3217,"date":2852,"chapter":3218,"chapterSort":3219,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-5-sophus-li-qun-li-dai-shu-ku","wiki/2023-10-05-Cplusplus教学/ch19-5-Sophus李群李代数库","Sophus 李群李代数库","19.5",19050000,{"path":3221,"stem":3222,"title":3223,"date":2852,"chapter":3224,"chapterSort":3225,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-chang-yong-ku","wiki/2023-10-05-Cplusplus教学/ch19-常用库","常用库学习","19",19000000,{"path":3227,"stem":3228,"title":3229,"date":2852,"chapter":3230,"chapterSort":3231,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch2-shu-ju-lei-xing-yu-shu-ju-cun-fang","wiki/2023-10-05-Cplusplus教学/ch2-数据类型与数据存放","数据类型与数据存放","2",2000000,{"path":3233,"stem":3234,"title":3235,"date":2852,"chapter":3236,"chapterSort":3237,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch3-shu-ru-shu-chu","wiki/2023-10-05-Cplusplus教学/ch3-输入输出","输入输出","3",3000000,{"path":3239,"stem":3240,"title":3241,"date":2852,"chapter":3242,"chapterSort":3243,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch4-yun-suan-fu","wiki/2023-10-05-Cplusplus教学/ch4-运算符","运算符","4",4000000,{"path":3245,"stem":3246,"title":3247,"date":2852,"chapter":3248,"chapterSort":3249,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch5-cheng-xu-liu-cheng-jie-gou","wiki/2023-10-05-Cplusplus教学/ch5-程序流程结构","程序流程结构","5",5000000,{"path":3251,"stem":3252,"title":3253,"date":2852,"chapter":3254,"chapterSort":3255,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch6-shu-zu","wiki/2023-10-05-Cplusplus教学/ch6-数组","数组","6",6000000,{"path":3257,"stem":3258,"title":3259,"date":2852,"chapter":3260,"chapterSort":3261,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch7-han-shu-yu-tou-wen-jian","wiki/2023-10-05-Cplusplus教学/ch7-函数与头文件","函数与头文件","7",7000000,{"path":3263,"stem":3264,"title":3265,"date":2852,"chapter":3266,"chapterSort":3267,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch8-zhi-zhen","wiki/2023-10-05-Cplusplus教学/ch8-指针","指针","8",8000000,{"path":3269,"stem":3270,"title":3271,"date":2852,"chapter":3272,"chapterSort":3273,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":2859},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch9-jie-gou-ti-yu-gong-yong-ti","wiki/2023-10-05-Cplusplus教学/ch9-结构体与共用体","结构体与共用体","9",9000000,{"path":2855,"stem":3275,"title":3276,"date":2852,"chapter":2860,"chapterSort":3277,"docKey":2854,"docRoot":2855,"docTitle":2856,"isWikiDoc":187,"isWikiIndex":187},"wiki/2023-10-05-Cplusplus教学/index","C/C++教程",0,{"variants":3279},[3280,3283,3286,3289,3292],{"path":3281,"localeSlug":3282,"i18nKey":2858},"/en-us/wiki/2023-10-05-cplusplus-jiao-xue/ch18-14-std-optional","en-us",{"path":3284,"localeSlug":3285,"i18nKey":2858},"/zh-hant/wiki/2023-10-05-cplusplus-jiao-xue/ch18-14-std-optional","zh-hant",{"path":3287,"localeSlug":3288,"i18nKey":2858},"/zh-hk/wiki/2023-10-05-cplusplus-jiao-xue/ch18-14-std-optional","zh-hk",{"path":3290,"localeSlug":3291,"i18nKey":2858},"/zh-tw/wiki/2023-10-05-cplusplus-jiao-xue/ch18-14-std-optional","zh-tw",{"path":2849,"localeSlug":2863,"i18nKey":2858},[3281,2861,3284,2861,3287,2861,3290,2861,2849,2861],1780663036693]