[{"data":1,"prerenderedAt":3246},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional":3,"wiki-doc-items-2023-10-05-cplusplus-jiao-xue":2861},{"id":4,"title":5,"body":6,"chapterDepth":89,"chapterOrder":2849,"date":2850,"description":82,"docKey":2851,"docRoot":2852,"docTitle":2853,"extension":2854,"isWikiDoc":187,"isWikiIndex":2855,"meta":2856,"navigation":187,"path":2857,"seo":2858,"stem":2859,"wikiDepth":89,"__hash__":2860},"wiki\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-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;                    \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},[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;  \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,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},"  \u002F\u002F 可能没有昵称\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},"              \u002F\u002F 成绩可能尚未录入\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},"  \u002F\u002F 没有昵称和成绩\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;"," \u002F ",[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\u002Fcatch"," 包装 + 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},"打开文件失败，需要知道权限\u002F路径\u002F格式错误",[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\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,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},"\u002F\u002F 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},"    \u002F\u002F 程序从 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;  \u002F\u002F ❌ 未定义行为！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},"  \u002F\u002F ❌ 未定义行为！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;  \u002F\u002F ❌ 编译错误！应该用 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},"  \u002F\u002F ❌ 编译错误！应该用 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();  \u002F\u002F ❌ 抛出 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},"  \u002F\u002F ❌ 抛出 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\u002Fnullptr 更安全。",[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},"2000-1400","2023-10-05","2023-10-05-cplusplus-jiao-xue","\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md",false,{},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional",{"title":5,"description":82},"wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional","RTGpflA-54AB_-kBunyxIWDv6pVMxX0SDwHb1xP9_60",[2862,2868,2873,2878,2883,2888,2893,2898,2903,2908,2913,2918,2923,2928,2933,2938,2943,2948,2953,2958,2963,2968,2973,2978,2983,2988,2993,2998,3003,3008,3013,3018,3023,3028,3032,3036,3041,3046,3051,3056,3061,3066,3071,3076,3081,3086,3091,3092,3097,3102,3107,3112,3117,3122,3127,3132,3137,3142,3147,3152,3157,3162,3167,3172,3177,3182,3187,3192,3197,3202,3207,3212,3217,3222,3227,3232,3237,3242],{"path":2863,"stem":2864,"title":2865,"date":2850,"chapterOrder":2866,"chapterDepth":2867,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F0100-C++开发环境搭建与测试","C++开发环境搭建与测试","0100",0,{"path":2869,"stem":2870,"title":2871,"date":2850,"chapterOrder":2872,"chapterDepth":2867,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++基础初识","0200",{"path":2874,"stem":2875,"title":2876,"date":2850,"chapterOrder":2877,"chapterDepth":2867,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0300-shu-ju-lei-xing-yu-shu-ju-cun-fang","wiki\u002F2023-10-05-Cplusplus教学\u002F0300-数据类型与数据存放","数据类型与数据存放","0300",{"path":2879,"stem":2880,"title":2881,"date":2850,"chapterOrder":2882,"chapterDepth":2867,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","wiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","输入输出","0400",{"path":2884,"stem":2885,"title":2886,"date":2850,"chapterOrder":2887,"chapterDepth":2867,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","wiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","运算符","0500",{"path":2889,"stem":2890,"title":2891,"date":2850,"chapterOrder":2892,"chapterDepth":2867,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","wiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","程序流程结构","0600",{"path":2894,"stem":2895,"title":2896,"date":2850,"chapterOrder":2897,"chapterDepth":2867,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","wiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","数组","0700",{"path":2899,"stem":2900,"title":2901,"date":2850,"chapterOrder":2902,"chapterDepth":2867,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","函数与头文件","0800",{"path":2904,"stem":2905,"title":2906,"date":2850,"chapterOrder":2907,"chapterDepth":2867,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","指针","0900",{"path":2909,"stem":2910,"title":2911,"date":2850,"chapterOrder":2912,"chapterDepth":2867,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","wiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","结构体与共用体","1000",{"path":2914,"stem":2915,"title":2916,"date":2850,"chapterOrder":2917,"chapterDepth":2867,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1100-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1100-内存分区与生命周期","内存分区与生命周期","1100",{"path":2919,"stem":2920,"title":2921,"date":2850,"chapterOrder":2922,"chapterDepth":2867,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","wiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","引用","1200",{"path":2924,"stem":2925,"title":2926,"date":2850,"chapterOrder":2927,"chapterDepth":2867,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao-yu-ming-ming-kong-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高与命名空间","函数提高与命名空间","1300",{"path":2929,"stem":2930,"title":2931,"date":2850,"chapterOrder":2932,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","封装","1400-0100",{"path":2934,"stem":2935,"title":2936,"date":2850,"chapterOrder":2937,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0200-dui-xiang-chu-shi-hua-he-qing-li","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0200-对象初始化和清理","对象初始化和清理","1400-0200",{"path":2939,"stem":2940,"title":2941,"date":2850,"chapterOrder":2942,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0300-dui-xiang-mo-xing-yu-this-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0300-对象模型与this指针","对象模型与this指针","1400-0300",{"path":2944,"stem":2945,"title":2946,"date":2850,"chapterOrder":2947,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0400-you-yuan-yu-yun-suan-fu-zhong-zai","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0400-友元与运算符重载","友元与运算符重载","1400-0400",{"path":2949,"stem":2950,"title":2951,"date":2850,"chapterOrder":2952,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","继承","1400-0500",{"path":2954,"stem":2955,"title":2956,"date":2850,"chapterOrder":2957,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","多态","1400-0600",{"path":2959,"stem":2960,"title":2961,"date":2850,"chapterOrder":2962,"chapterDepth":2867,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","类和对象","1400",{"path":2964,"stem":2965,"title":2966,"date":2850,"chapterOrder":2967,"chapterDepth":2867,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","wiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","文件操作","1500",{"path":2969,"stem":2970,"title":2971,"date":2850,"chapterOrder":2972,"chapterDepth":2867,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","wiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","异常处理","1600",{"path":2974,"stem":2975,"title":2976,"date":2850,"chapterOrder":2977,"chapterDepth":2867,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","模板","1700",{"path":2979,"stem":2980,"title":2981,"date":2850,"chapterOrder":2982,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","STL初识","1800-0100",{"path":2984,"stem":2985,"title":2986,"date":2850,"chapterOrder":2987,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0200-std-array","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0200-std-array","std::array","1800-0200",{"path":2989,"stem":2990,"title":2991,"date":2850,"chapterOrder":2992,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string容器","1800-0300",{"path":2994,"stem":2995,"title":2996,"date":2850,"chapterOrder":2997,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-yu-deque-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector与deque容器","vector与deque容器","1800-0400",{"path":2999,"stem":3000,"title":3001,"date":2850,"chapterOrder":3002,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-stack-queue-list-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-stack-queue-list容器","stack \u002F queue \u002F list 容器","1800-0500",{"path":3004,"stem":3005,"title":3006,"date":2850,"chapterOrder":3007,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-set-map-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-set-map容器","set \u002F map 容器","1800-0600",{"path":3009,"stem":3010,"title":3011,"date":2850,"chapterOrder":3012,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-han-shu-dui-xiang-yu-wei-ci","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-函数对象与谓词","函数对象与谓词","1800-0700",{"path":3014,"stem":3015,"title":3016,"date":2850,"chapterOrder":3017,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-chang-yong-suan-fa","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-常用算法","常用算法","1800-0800",{"path":3019,"stem":3020,"title":3021,"date":2850,"chapterOrder":3022,"chapterDepth":2867,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","STL提高编程","1800",{"path":3024,"stem":3025,"title":3026,"date":2850,"chapterOrder":3027,"chapterDepth":2867,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","wiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++类型转换","1900",{"path":3029,"stem":3030,"title":1354,"date":2850,"chapterOrder":3031,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","2000-0100",{"path":3033,"stem":3034,"title":34,"date":2850,"chapterOrder":3035,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","2000-0200",{"path":3037,"stem":3038,"title":3039,"date":2850,"chapterOrder":3040,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","using","2000-0300",{"path":3042,"stem":3043,"title":3044,"date":2850,"chapterOrder":3045,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0400-enum-class","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0400-enum-class","enum class","2000-0400",{"path":3047,"stem":3048,"title":3049,"date":2850,"chapterOrder":3050,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0500-fan-wei-for-xun-huan","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0500-范围for循环","范围 for 循环","2000-0500",{"path":3052,"stem":3053,"title":3054,"date":2850,"chapterOrder":3055,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","结构化绑定","2000-0600",{"path":3057,"stem":3058,"title":3059,"date":2850,"chapterOrder":3060,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","constexpr","2000-0700",{"path":3062,"stem":3063,"title":3064,"date":2850,"chapterOrder":3065,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII","2000-0800",{"path":3067,"stem":3068,"title":3069,"date":2850,"chapterOrder":3070,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","智能指针","2000-0900",{"path":3072,"stem":3073,"title":3074,"date":2850,"chapterOrder":3075,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义","右值引用和移动语义","2000-1000",{"path":3077,"stem":3078,"title":3079,"date":2850,"chapterOrder":3080,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","Lambda 表达式","2000-1100",{"path":3082,"stem":3083,"title":3084,"date":2850,"chapterOrder":3085,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","std::function","2000-1200",{"path":3087,"stem":3088,"title":3089,"date":2850,"chapterOrder":3090,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","std::bind","2000-1300",{"path":2857,"stem":2859,"title":5,"date":2850,"chapterOrder":2849,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},{"path":3093,"stem":3094,"title":3095,"date":2850,"chapterOrder":3096,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1500-std-variant","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1500-std-variant","std::variant","2000-1500",{"path":3098,"stem":3099,"title":3100,"date":2850,"chapterOrder":3101,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1600-std-span","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1600-std-span","std::span","2000-1600",{"path":3103,"stem":3104,"title":3105,"date":2850,"chapterOrder":3106,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1700-std-format-print","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1700-std-format-print","std::format \u002F std::print","2000-1700",{"path":3108,"stem":3109,"title":3110,"date":2850,"chapterOrder":3111,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1800-std-chrono","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1800-std-chrono","std::chrono","2000-1800",{"path":3113,"stem":3114,"title":3115,"date":2850,"chapterOrder":3116,"chapterDepth":133,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0100-std-thread","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0100-std-thread","std::thread 与 join","2000-1900-0100",{"path":3118,"stem":3119,"title":3120,"date":2850,"chapterOrder":3121,"chapterDepth":133,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-mutex-lock-guard","mutex 与 lock_guard","2000-1900-0200",{"path":3123,"stem":3124,"title":3125,"date":2850,"chapterOrder":3126,"chapterDepth":133,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0300-std-atomic","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0300-std-atomic","std::atomic","2000-1900-0300",{"path":3128,"stem":3129,"title":3130,"date":2850,"chapterOrder":3131,"chapterDepth":133,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0400-condition-variable","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0400-condition-variable","condition_variable","2000-1900-0400",{"path":3133,"stem":3134,"title":3135,"date":2850,"chapterOrder":3136,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发编程","并发编程","2000-1900",{"path":3138,"stem":3139,"title":3140,"date":2850,"chapterOrder":3141,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2000-std-filesystem","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-2000-std-filesystem","std::filesystem","2000-2000",{"path":3143,"stem":3144,"title":3145,"date":2850,"chapterOrder":3146,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","modules 简介","2000-2100",{"path":3148,"stem":3149,"title":3150,"date":2850,"chapterOrder":3151,"chapterDepth":2867,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","现代C++","2000",{"path":3153,"stem":3154,"title":3155,"date":2850,"chapterOrder":3156,"chapterDepth":133,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0100-ding-shi-qi-yu-yi-bu-io","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0100-定时器与异步IO","定时器与异步 IO","2100-0100-0100",{"path":3158,"stem":3159,"title":3160,"date":2850,"chapterOrder":3161,"chapterDepth":133,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0200-boost-asio-ji-chu","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0200-Boost.Asio基础","Boost.Asio 基础","2100-0100-0200",{"path":3163,"stem":3164,"title":3165,"date":2850,"chapterOrder":3166,"chapterDepth":133,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0300-chuan-kou-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0300-串口通信","串口通信","2100-0100-0300",{"path":3168,"stem":3169,"title":3170,"date":2850,"chapterOrder":3171,"chapterDepth":133,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0400-tcp-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0400-TCP通信","TCP 通信","2100-0100-0400",{"path":3173,"stem":3174,"title":3175,"date":2850,"chapterOrder":3176,"chapterDepth":133,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0500-udp-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0500-UDP通信","UDP 通信","2100-0100-0500",{"path":3178,"stem":3179,"title":3180,"date":2850,"chapterOrder":3181,"chapterDepth":133,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0600-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0600-机器人工程写法与ROS2集成","机器人工程写法与 ROS2 集成","2100-0100-0600",{"path":3183,"stem":3184,"title":3185,"date":2850,"chapterOrder":3186,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","Boost.Asio异步IO库","2100-0100",{"path":3188,"stem":3189,"title":3190,"date":2850,"chapterOrder":3191,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0200-eigen-xian-xing-dai-shu-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0200-Eigen线性代数库","Eigen线性代数库","2100-0200",{"path":3193,"stem":3194,"title":3195,"date":2850,"chapterOrder":3196,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0300-opencv-ji-suan-ji-shi-jue-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0300-OpenCV计算机视觉库","OpenCV计算机视觉库","2100-0300",{"path":3198,"stem":3199,"title":3200,"date":2850,"chapterOrder":3201,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0400-pcl-dian-yun-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0400-PCL点云库","PCL点云库","2100-0400",{"path":3203,"stem":3204,"title":3205,"date":2850,"chapterOrder":3206,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0500-sophus-li-qun-li-dai-shu-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0500-Sophus李群李代数库","Sophus 李群李代数库","2100-0500",{"path":3208,"stem":3209,"title":3210,"date":2850,"chapterOrder":3211,"chapterDepth":2867,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","常用库学习","2100",{"path":3213,"stem":3214,"title":3215,"date":2850,"chapterOrder":3216,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0100-cmakepresets-yu-gou-jian-an-zhuang","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0100-CMakePresets与构建安装","CMakePresets与构建安装","2200-0100",{"path":3218,"stem":3219,"title":3220,"date":2850,"chapterOrder":3221,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项","顶层CMake与公共编译选项","2200-0200",{"path":3223,"stem":3224,"title":3225,"date":2850,"chapterOrder":3226,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0300-src-yu-lib-mo-kuai-cmake-xiang-jie","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0300-src与lib模块CMake详解","src与lib模块CMake详解","2200-0300",{"path":3228,"stem":3229,"title":3230,"date":2850,"chapterOrder":3231,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法","第三方库依赖写法","2200-0400",{"path":3233,"stem":3234,"title":3235,"date":2850,"chapterOrder":3236,"chapterDepth":89,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0500-mu-ban-kuo-zhan-yu-chang-jian-wen-ti","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0500-模板扩展与常见问题","模板扩展与常见问题","2200-0500",{"path":3238,"stem":3239,"title":3240,"date":2850,"chapterOrder":3241,"chapterDepth":2867,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":2855},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake工程模板","2200",{"path":2852,"stem":3243,"title":3244,"date":2850,"chapterOrder":3245,"chapterDepth":2867,"docKey":2851,"docRoot":2852,"docTitle":2853,"isWikiDoc":187,"isWikiIndex":187},"wiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++教程",null,1784505234658]