[{"data":1,"prerenderedAt":7131},["ShallowReactive",2],{"wiki-page-\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma":3,"wiki-doc-items-\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma":6711,"language-switcher-data-\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma":7115,"wiki-i18n-paths-\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma":7130},{"id":4,"title":5,"body":6,"canonicalPath":6692,"chapterDepth":6693,"chapterOrder":6694,"date":6695,"description":106,"docI18nKey":6696,"docKey":6697,"docRoot":6698,"docTitle":6699,"extension":6700,"i18nKey":6701,"isBlogPost":6702,"isWikiDoc":200,"isWikiIndex":6702,"layout":6703,"legacyPath":6703,"locale":6704,"localeSlug":6705,"meta":6706,"navigation":200,"path":6692,"seo":6707,"sourcePath":6708,"sourceStem":6701,"stem":6709,"wikiDepth":113,"__hash__":6710},"content\u002F_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码.md","異常處理",{"type":7,"value":8,"toc":6669},"minimark",[9,12,16,20,42,45,52,55,73,78,95,100,162,167,449,454,462,472,475,479,484,488,500,503,507,706,710,716,729,731,735,740,749,753,894,898,904,917,919,923,932,936,1256,1260,1266,1274,1276,1279,1286,1290,1315,1319,1445,1449,1455,1461,1466,1471,1553,1555,1558,1561,1564,1596,1599,1611,1615,1620,1624,1844,1848,1854,1860,1862,1865,1870,1874,2087,2091,2097,2100,2102,2105,2110,2120,2124,2305,2309,2315,2324,2328,2363,2365,2369,2375,2378,2424,2428,2582,2586,2592,2600,2602,2606,2609,2614,2730,2743,2748,2915,2919,2925,2930,2933,2935,2938,2941,2944,2948,3159,3163,3169,3187,3189,3192,3195,3198,3209,3212,3216,3441,3445,3451,3465,3467,3470,3473,3476,3481,3485,3805,3809,3815,3822,3826,3829,3831,3834,3837,3840,3844,4101,4105,4111,4116,4121,4124,4138,4141,4143,4146,4149,4152,4157,4206,4211,4214,4291,4295,4298,4300,4304,4307,4310,4316,4319,4339,4342,4345,4349,4538,4542,4548,4557,4561,4565,4758,4762,4767,4773,4776,4965,4969,4974,4983,4987,4990,4993,5021,5027,5029,5032,5035,5038,5041,5043,5059,5063,5278,5282,5288,5295,5298,5301,5303,5317,5321,5470,5474,5480,5484,5492,5494,5498,5501,5504,5507,5523,5527,5763,5767,5773,5777,5780,5783,5813,5816,5917,5921,5927,5931,5934,5936,5940,5946,5950,5975,5979,6073,6077,6083,6087,6093,6126,6129,6142,6144,6147,6150,6153,6196,6199,6235,6238,6241,6243,6246,6252,6254,6329,6332,6370,6372,6375,6378,6380,6383,6385,6403,6405,6419,6421,6425,6429,6564,6569,6575,6582,6584,6587,6590,6635,6638,6665],[10,11,5],"h2",{"id":5},[13,14,15],"h3",{"id":15},"異常處理概述",[17,18,19],"p",{},"在 C++ 中，程序運行過程中可能會出現各種錯誤，例如：",[21,22,23,27,30,33,36,39],"ul",{},[24,25,26],"li",{},"文件打開失敗",[24,28,29],{},"串口打開失敗",[24,31,32],{},"參數不合法",[24,34,35],{},"數組越界",[24,37,38],{},"內存申請失敗",[24,40,41],{},"配置文件格式錯誤",[17,43,44],{},"如果每個函數都只靠返回值判斷錯誤，代碼會變得比較複雜。",[17,46,47,48,51],{},"C++ 提供了 ",[49,50,5],"strong",{}," 機制，用來把“正常邏輯”和“錯誤處理邏輯”分開。",[17,53,54],{},"異常處理主要使用三個關鍵字：",[21,56,57,63,68],{},[24,58,59],{},[60,61,62],"code",{},"try",[24,64,65],{},[60,66,67],{},"catch",[24,69,70],{},[60,71,72],{},"throw",[17,74,75],{},[49,76,77],{},"作用：",[21,79,80,85,90],{},[24,81,82,84],{},[60,83,62],{},"：放置可能出現異常的代碼",[24,86,87,89],{},[60,88,72],{},"：拋出異常",[24,91,92,94],{},[60,93,67],{},"：捕獲異常並處理",[17,96,97],{},[49,98,99],{},"語法：",[101,102,107],"pre",{"className":103,"code":104,"language":105,"meta":106,"style":106},"language-cpp shiki shiki-themes github-light github-dark","try\n{\n    \u002F\u002F 可能出现异常的代码\n}\ncatch (异常类型 变量名)\n{\n    \u002F\u002F 异常处理代码\n}\n","cpp","",[60,108,109,118,125,132,138,146,151,157],{"__ignoreMap":106},[110,111,114],"span",{"class":112,"line":113},"line",1,[110,115,117],{"class":116},"szBVR","try\n",[110,119,121],{"class":112,"line":120},2,[110,122,124],{"class":123},"sVt8B","{\n",[110,126,128],{"class":112,"line":127},3,[110,129,131],{"class":130},"sJ8bj","    \u002F\u002F 可能出现异常的代码\n",[110,133,135],{"class":112,"line":134},4,[110,136,137],{"class":123},"}\n",[110,139,141,143],{"class":112,"line":140},5,[110,142,67],{"class":116},[110,144,145],{"class":123}," (异常类型 变量名)\n",[110,147,149],{"class":112,"line":148},6,[110,150,124],{"class":123},[110,152,154],{"class":112,"line":153},7,[110,155,156],{"class":130},"    \u002F\u002F 异常处理代码\n",[110,158,160],{"class":112,"line":159},8,[110,161,137],{"class":123},[17,163,164],{},[49,165,166],{},"示例：",[101,168,170],{"className":103,"code":169,"language":105,"meta":106,"style":106},"#include \u003Ciostream>\nusing namespace std;\n\nint divide(int a, int b)\n{\n    if (b == 0)\n    {\n        throw \"除数不能为0\";\n    }\n\n    return a \u002F b;\n}\n\nint main()\n{\n    try\n    {\n        int ret = divide(10, 0);\n        cout \u003C\u003C \"ret = \" \u003C\u003C ret \u003C\u003C endl;\n    }\n    catch (const char* msg)\n    {\n        cout \u003C\u003C \"捕获到异常：\" \u003C\u003C msg \u003C\u003C endl;\n    }\n\n    return 0;\n}\n",[60,171,172,181,196,202,230,234,251,256,266,272,277,292,297,302,313,318,324,329,356,378,383,401,406,425,430,435,444],{"__ignoreMap":106},[110,173,174,177],{"class":112,"line":113},[110,175,176],{"class":116},"#include",[110,178,180],{"class":179},"sZZnC"," \u003Ciostream>\n",[110,182,183,186,189,193],{"class":112,"line":120},[110,184,185],{"class":116},"using",[110,187,188],{"class":116}," namespace",[110,190,192],{"class":191},"sScJk"," std",[110,194,195],{"class":123},";\n",[110,197,198],{"class":112,"line":127},[110,199,201],{"emptyLinePlaceholder":200},true,"\n",[110,203,204,207,210,213,215,219,222,224,227],{"class":112,"line":134},[110,205,206],{"class":116},"int",[110,208,209],{"class":191}," divide",[110,211,212],{"class":123},"(",[110,214,206],{"class":116},[110,216,218],{"class":217},"s4XuR"," a",[110,220,221],{"class":123},", ",[110,223,206],{"class":116},[110,225,226],{"class":217}," b",[110,228,229],{"class":123},")\n",[110,231,232],{"class":112,"line":140},[110,233,124],{"class":123},[110,235,236,239,242,245,249],{"class":112,"line":148},[110,237,238],{"class":116},"    if",[110,240,241],{"class":123}," (b ",[110,243,244],{"class":116},"==",[110,246,248],{"class":247},"sj4cs"," 0",[110,250,229],{"class":123},[110,252,253],{"class":112,"line":153},[110,254,255],{"class":123},"    {\n",[110,257,258,261,264],{"class":112,"line":159},[110,259,260],{"class":116},"        throw",[110,262,263],{"class":179}," \"除数不能为0\"",[110,265,195],{"class":123},[110,267,269],{"class":112,"line":268},9,[110,270,271],{"class":123},"    }\n",[110,273,275],{"class":112,"line":274},10,[110,276,201],{"emptyLinePlaceholder":200},[110,278,280,283,286,289],{"class":112,"line":279},11,[110,281,282],{"class":116},"    return",[110,284,285],{"class":123}," a ",[110,287,288],{"class":116},"\u002F",[110,290,291],{"class":123}," b;\n",[110,293,295],{"class":112,"line":294},12,[110,296,137],{"class":123},[110,298,300],{"class":112,"line":299},13,[110,301,201],{"emptyLinePlaceholder":200},[110,303,305,307,310],{"class":112,"line":304},14,[110,306,206],{"class":116},[110,308,309],{"class":191}," main",[110,311,312],{"class":123},"()\n",[110,314,316],{"class":112,"line":315},15,[110,317,124],{"class":123},[110,319,321],{"class":112,"line":320},16,[110,322,323],{"class":116},"    try\n",[110,325,327],{"class":112,"line":326},17,[110,328,255],{"class":123},[110,330,332,335,338,341,343,345,348,350,353],{"class":112,"line":331},18,[110,333,334],{"class":116},"        int",[110,336,337],{"class":123}," ret ",[110,339,340],{"class":116},"=",[110,342,209],{"class":191},[110,344,212],{"class":123},[110,346,347],{"class":247},"10",[110,349,221],{"class":123},[110,351,352],{"class":247},"0",[110,354,355],{"class":123},");\n",[110,357,359,362,365,368,371,373,375],{"class":112,"line":358},19,[110,360,361],{"class":123},"        cout ",[110,363,364],{"class":116},"\u003C\u003C",[110,366,367],{"class":179}," \"ret = \"",[110,369,370],{"class":116}," \u003C\u003C",[110,372,337],{"class":123},[110,374,364],{"class":116},[110,376,377],{"class":123}," endl;\n",[110,379,381],{"class":112,"line":380},20,[110,382,271],{"class":123},[110,384,386,389,392,395,398],{"class":112,"line":385},21,[110,387,388],{"class":116},"    catch",[110,390,391],{"class":123}," (",[110,393,394],{"class":116},"const",[110,396,397],{"class":116}," char*",[110,399,400],{"class":123}," msg)\n",[110,402,404],{"class":112,"line":403},22,[110,405,255],{"class":123},[110,407,409,411,413,416,418,421,423],{"class":112,"line":408},23,[110,410,361],{"class":123},[110,412,364],{"class":116},[110,414,415],{"class":179}," \"捕获到异常：\"",[110,417,370],{"class":116},[110,419,420],{"class":123}," msg ",[110,422,364],{"class":116},[110,424,377],{"class":123},[110,426,428],{"class":112,"line":427},24,[110,429,271],{"class":123},[110,431,433],{"class":112,"line":432},25,[110,434,201],{"emptyLinePlaceholder":200},[110,436,438,440,442],{"class":112,"line":437},26,[110,439,282],{"class":116},[110,441,248],{"class":247},[110,443,195],{"class":123},[110,445,447],{"class":112,"line":446},27,[110,448,137],{"class":123},[17,450,451],{},[49,452,453],{},"運行結果：",[101,455,460],{"className":456,"code":458,"language":459,"meta":106},[457],"language-text","捕获到异常：除数不能为0\n","text",[60,461,458],{"__ignoreMap":106},[17,463,464,465,468,469,471],{},"程序運行後，",[60,466,467],{},"divide(10, 0)"," 會拋出異常，後面的正常返回不會繼續執行，程序會跳轉到 ",[60,470,67],{}," 中處理異常。",[473,474],"hr",{},[13,476,478],{"id":477},"throw-拋出異常","throw 拋出異常",[17,480,481,483],{},[60,482,72],{}," 用來主動拋出異常。",[17,485,486],{},[49,487,99],{},[101,489,491],{"className":103,"code":490,"language":105,"meta":106,"style":106},"throw 异常对象;\n",[60,492,493],{"__ignoreMap":106},[110,494,495,497],{"class":112,"line":113},[110,496,72],{"class":116},[110,498,499],{"class":123}," 异常对象;\n",[17,501,502],{},"異常對象可以是普通類型，也可以是標準庫異常對象。",[17,504,505],{},[49,506,166],{},[101,508,510],{"className":103,"code":509,"language":105,"meta":106,"style":106},"#include \u003Ciostream>\nusing namespace std;\n\nvoid checkAge(int age)\n{\n    if (age \u003C 0)\n    {\n        throw \"年龄不能小于0\";\n    }\n\n    cout \u003C\u003C \"年龄为：\" \u003C\u003C age \u003C\u003C endl;\n}\n\nint main()\n{\n    try\n    {\n        checkAge(-10);\n    }\n    catch (const char* msg)\n    {\n        cout \u003C\u003C \"错误信息：\" \u003C\u003C msg \u003C\u003C endl;\n    }\n\n    return 0;\n}\n",[60,511,512,518,528,532,549,553,567,571,580,584,588,607,611,615,623,627,631,635,649,653,665,669,686,690,694,702],{"__ignoreMap":106},[110,513,514,516],{"class":112,"line":113},[110,515,176],{"class":116},[110,517,180],{"class":179},[110,519,520,522,524,526],{"class":112,"line":120},[110,521,185],{"class":116},[110,523,188],{"class":116},[110,525,192],{"class":191},[110,527,195],{"class":123},[110,529,530],{"class":112,"line":127},[110,531,201],{"emptyLinePlaceholder":200},[110,533,534,537,540,542,544,547],{"class":112,"line":134},[110,535,536],{"class":116},"void",[110,538,539],{"class":191}," checkAge",[110,541,212],{"class":123},[110,543,206],{"class":116},[110,545,546],{"class":217}," age",[110,548,229],{"class":123},[110,550,551],{"class":112,"line":140},[110,552,124],{"class":123},[110,554,555,557,560,563,565],{"class":112,"line":148},[110,556,238],{"class":116},[110,558,559],{"class":123}," (age ",[110,561,562],{"class":116},"\u003C",[110,564,248],{"class":247},[110,566,229],{"class":123},[110,568,569],{"class":112,"line":153},[110,570,255],{"class":123},[110,572,573,575,578],{"class":112,"line":159},[110,574,260],{"class":116},[110,576,577],{"class":179}," \"年龄不能小于0\"",[110,579,195],{"class":123},[110,581,582],{"class":112,"line":268},[110,583,271],{"class":123},[110,585,586],{"class":112,"line":274},[110,587,201],{"emptyLinePlaceholder":200},[110,589,590,593,595,598,600,603,605],{"class":112,"line":279},[110,591,592],{"class":123},"    cout ",[110,594,364],{"class":116},[110,596,597],{"class":179}," \"年龄为：\"",[110,599,370],{"class":116},[110,601,602],{"class":123}," age ",[110,604,364],{"class":116},[110,606,377],{"class":123},[110,608,609],{"class":112,"line":294},[110,610,137],{"class":123},[110,612,613],{"class":112,"line":299},[110,614,201],{"emptyLinePlaceholder":200},[110,616,617,619,621],{"class":112,"line":304},[110,618,206],{"class":116},[110,620,309],{"class":191},[110,622,312],{"class":123},[110,624,625],{"class":112,"line":315},[110,626,124],{"class":123},[110,628,629],{"class":112,"line":320},[110,630,323],{"class":116},[110,632,633],{"class":112,"line":326},[110,634,255],{"class":123},[110,636,637,640,642,645,647],{"class":112,"line":331},[110,638,639],{"class":191},"        checkAge",[110,641,212],{"class":123},[110,643,644],{"class":116},"-",[110,646,347],{"class":247},[110,648,355],{"class":123},[110,650,651],{"class":112,"line":358},[110,652,271],{"class":123},[110,654,655,657,659,661,663],{"class":112,"line":380},[110,656,388],{"class":116},[110,658,391],{"class":123},[110,660,394],{"class":116},[110,662,397],{"class":116},[110,664,400],{"class":123},[110,666,667],{"class":112,"line":385},[110,668,255],{"class":123},[110,670,671,673,675,678,680,682,684],{"class":112,"line":403},[110,672,361],{"class":123},[110,674,364],{"class":116},[110,676,677],{"class":179}," \"错误信息：\"",[110,679,370],{"class":116},[110,681,420],{"class":123},[110,683,364],{"class":116},[110,685,377],{"class":123},[110,687,688],{"class":112,"line":408},[110,689,271],{"class":123},[110,691,692],{"class":112,"line":427},[110,693,201],{"emptyLinePlaceholder":200},[110,695,696,698,700],{"class":112,"line":432},[110,697,282],{"class":116},[110,699,248],{"class":247},[110,701,195],{"class":123},[110,703,704],{"class":112,"line":437},[110,705,137],{"class":123},[17,707,708],{},[49,709,453],{},[101,711,714],{"className":712,"code":713,"language":459,"meta":106},[457],"错误信息：年龄不能小于0\n",[60,715,713],{"__ignoreMap":106},[17,717,718,719,722,723,725,726,728],{},"當 ",[60,720,721],{},"age \u003C 0"," 時，函數會通過 ",[60,724,72],{}," 拋出異常，程序跳轉到 ",[60,727,67],{}," 中執行。",[473,730],{},[13,732,734],{"id":733},"catch-捕獲異常","catch 捕獲異常",[17,736,737,739],{},[60,738,67],{}," 用來捕獲異常。",[17,741,742,743,745,746,748],{},"如果拋出的異常類型和 ",[60,744,67],{}," 中的類型一致，就會進入對應的 ",[60,747,67],{}," 代碼塊。",[17,750,751],{},[49,752,166],{},[101,754,756],{"className":103,"code":755,"language":105,"meta":106,"style":106},"#include \u003Ciostream>\nusing namespace std;\n\nvoid test()\n{\n    throw 10;\n}\n\nint main()\n{\n    try\n    {\n        test();\n    }\n    catch (int e)\n    {\n        cout \u003C\u003C \"捕获到 int 类型异常：\" \u003C\u003C e \u003C\u003C endl;\n    }\n\n    return 0;\n}\n",[60,757,758,764,774,778,787,791,801,805,809,817,821,825,829,837,841,852,856,874,878,882,890],{"__ignoreMap":106},[110,759,760,762],{"class":112,"line":113},[110,761,176],{"class":116},[110,763,180],{"class":179},[110,765,766,768,770,772],{"class":112,"line":120},[110,767,185],{"class":116},[110,769,188],{"class":116},[110,771,192],{"class":191},[110,773,195],{"class":123},[110,775,776],{"class":112,"line":127},[110,777,201],{"emptyLinePlaceholder":200},[110,779,780,782,785],{"class":112,"line":134},[110,781,536],{"class":116},[110,783,784],{"class":191}," test",[110,786,312],{"class":123},[110,788,789],{"class":112,"line":140},[110,790,124],{"class":123},[110,792,793,796,799],{"class":112,"line":148},[110,794,795],{"class":116},"    throw",[110,797,798],{"class":247}," 10",[110,800,195],{"class":123},[110,802,803],{"class":112,"line":153},[110,804,137],{"class":123},[110,806,807],{"class":112,"line":159},[110,808,201],{"emptyLinePlaceholder":200},[110,810,811,813,815],{"class":112,"line":268},[110,812,206],{"class":116},[110,814,309],{"class":191},[110,816,312],{"class":123},[110,818,819],{"class":112,"line":274},[110,820,124],{"class":123},[110,822,823],{"class":112,"line":279},[110,824,323],{"class":116},[110,826,827],{"class":112,"line":294},[110,828,255],{"class":123},[110,830,831,834],{"class":112,"line":299},[110,832,833],{"class":191},"        test",[110,835,836],{"class":123},"();\n",[110,838,839],{"class":112,"line":304},[110,840,271],{"class":123},[110,842,843,845,847,849],{"class":112,"line":315},[110,844,388],{"class":116},[110,846,391],{"class":123},[110,848,206],{"class":116},[110,850,851],{"class":123}," e)\n",[110,853,854],{"class":112,"line":320},[110,855,255],{"class":123},[110,857,858,860,862,865,867,870,872],{"class":112,"line":326},[110,859,361],{"class":123},[110,861,364],{"class":116},[110,863,864],{"class":179}," \"捕获到 int 类型异常：\"",[110,866,370],{"class":116},[110,868,869],{"class":123}," e ",[110,871,364],{"class":116},[110,873,377],{"class":123},[110,875,876],{"class":112,"line":331},[110,877,271],{"class":123},[110,879,880],{"class":112,"line":358},[110,881,201],{"emptyLinePlaceholder":200},[110,883,884,886,888],{"class":112,"line":380},[110,885,282],{"class":116},[110,887,248],{"class":247},[110,889,195],{"class":123},[110,891,892],{"class":112,"line":385},[110,893,137],{"class":123},[17,895,896],{},[49,897,453],{},[101,899,902],{"className":900,"code":901,"language":459,"meta":106},[457],"捕获到 int 类型异常：10\n",[60,903,901],{"__ignoreMap":106},[17,905,906,909,910,912,913,916],{},[60,907,908],{},"throw 10;"," 拋出的是 ",[60,911,206],{}," 類型異常，所以會被 ",[60,914,915],{},"catch (int e)"," 捕獲。",[473,918],{},[13,920,922],{"id":921},"多個-catch-捕獲不同類型異常","多個 catch 捕獲不同類型異常",[17,924,925,926,928,929,931],{},"一個 ",[60,927,62],{}," 後面可以跟多個 ",[60,930,67],{},"，用於處理不同類型的異常。",[17,933,934],{},[49,935,166],{},[101,937,939],{"className":103,"code":938,"language":105,"meta":106,"style":106},"#include \u003Ciostream>\nusing namespace std;\n\nvoid test(int type)\n{\n    if (type == 1)\n    {\n        throw 10;\n    }\n    else if (type == 2)\n    {\n        throw 3.14;\n    }\n    else if (type == 3)\n    {\n        throw \"字符串异常\";\n    }\n}\n\nint main()\n{\n    try\n    {\n        test(3);\n    }\n    catch (int e)\n    {\n        cout \u003C\u003C \"捕获到 int 异常：\" \u003C\u003C e \u003C\u003C endl;\n    }\n    catch (double e)\n    {\n        cout \u003C\u003C \"捕获到 double 异常：\" \u003C\u003C e \u003C\u003C endl;\n    }\n    catch (const char* e)\n    {\n        cout \u003C\u003C \"捕获到字符串异常：\" \u003C\u003C e \u003C\u003C endl;\n    }\n\n    return 0;\n}\n",[60,940,941,947,957,961,976,980,994,998,1006,1010,1027,1031,1040,1044,1059,1063,1072,1076,1080,1084,1092,1096,1100,1104,1115,1119,1129,1133,1151,1156,1168,1173,1191,1196,1209,1214,1232,1237,1242,1251],{"__ignoreMap":106},[110,942,943,945],{"class":112,"line":113},[110,944,176],{"class":116},[110,946,180],{"class":179},[110,948,949,951,953,955],{"class":112,"line":120},[110,950,185],{"class":116},[110,952,188],{"class":116},[110,954,192],{"class":191},[110,956,195],{"class":123},[110,958,959],{"class":112,"line":127},[110,960,201],{"emptyLinePlaceholder":200},[110,962,963,965,967,969,971,974],{"class":112,"line":134},[110,964,536],{"class":116},[110,966,784],{"class":191},[110,968,212],{"class":123},[110,970,206],{"class":116},[110,972,973],{"class":217}," type",[110,975,229],{"class":123},[110,977,978],{"class":112,"line":140},[110,979,124],{"class":123},[110,981,982,984,987,989,992],{"class":112,"line":148},[110,983,238],{"class":116},[110,985,986],{"class":123}," (type ",[110,988,244],{"class":116},[110,990,991],{"class":247}," 1",[110,993,229],{"class":123},[110,995,996],{"class":112,"line":153},[110,997,255],{"class":123},[110,999,1000,1002,1004],{"class":112,"line":159},[110,1001,260],{"class":116},[110,1003,798],{"class":247},[110,1005,195],{"class":123},[110,1007,1008],{"class":112,"line":268},[110,1009,271],{"class":123},[110,1011,1012,1015,1018,1020,1022,1025],{"class":112,"line":274},[110,1013,1014],{"class":116},"    else",[110,1016,1017],{"class":116}," if",[110,1019,986],{"class":123},[110,1021,244],{"class":116},[110,1023,1024],{"class":247}," 2",[110,1026,229],{"class":123},[110,1028,1029],{"class":112,"line":279},[110,1030,255],{"class":123},[110,1032,1033,1035,1038],{"class":112,"line":294},[110,1034,260],{"class":116},[110,1036,1037],{"class":247}," 3.14",[110,1039,195],{"class":123},[110,1041,1042],{"class":112,"line":299},[110,1043,271],{"class":123},[110,1045,1046,1048,1050,1052,1054,1057],{"class":112,"line":304},[110,1047,1014],{"class":116},[110,1049,1017],{"class":116},[110,1051,986],{"class":123},[110,1053,244],{"class":116},[110,1055,1056],{"class":247}," 3",[110,1058,229],{"class":123},[110,1060,1061],{"class":112,"line":315},[110,1062,255],{"class":123},[110,1064,1065,1067,1070],{"class":112,"line":320},[110,1066,260],{"class":116},[110,1068,1069],{"class":179}," \"字符串异常\"",[110,1071,195],{"class":123},[110,1073,1074],{"class":112,"line":326},[110,1075,271],{"class":123},[110,1077,1078],{"class":112,"line":331},[110,1079,137],{"class":123},[110,1081,1082],{"class":112,"line":358},[110,1083,201],{"emptyLinePlaceholder":200},[110,1085,1086,1088,1090],{"class":112,"line":380},[110,1087,206],{"class":116},[110,1089,309],{"class":191},[110,1091,312],{"class":123},[110,1093,1094],{"class":112,"line":385},[110,1095,124],{"class":123},[110,1097,1098],{"class":112,"line":403},[110,1099,323],{"class":116},[110,1101,1102],{"class":112,"line":408},[110,1103,255],{"class":123},[110,1105,1106,1108,1110,1113],{"class":112,"line":427},[110,1107,833],{"class":191},[110,1109,212],{"class":123},[110,1111,1112],{"class":247},"3",[110,1114,355],{"class":123},[110,1116,1117],{"class":112,"line":432},[110,1118,271],{"class":123},[110,1120,1121,1123,1125,1127],{"class":112,"line":437},[110,1122,388],{"class":116},[110,1124,391],{"class":123},[110,1126,206],{"class":116},[110,1128,851],{"class":123},[110,1130,1131],{"class":112,"line":446},[110,1132,255],{"class":123},[110,1134,1136,1138,1140,1143,1145,1147,1149],{"class":112,"line":1135},28,[110,1137,361],{"class":123},[110,1139,364],{"class":116},[110,1141,1142],{"class":179}," \"捕获到 int 异常：\"",[110,1144,370],{"class":116},[110,1146,869],{"class":123},[110,1148,364],{"class":116},[110,1150,377],{"class":123},[110,1152,1154],{"class":112,"line":1153},29,[110,1155,271],{"class":123},[110,1157,1159,1161,1163,1166],{"class":112,"line":1158},30,[110,1160,388],{"class":116},[110,1162,391],{"class":123},[110,1164,1165],{"class":116},"double",[110,1167,851],{"class":123},[110,1169,1171],{"class":112,"line":1170},31,[110,1172,255],{"class":123},[110,1174,1176,1178,1180,1183,1185,1187,1189],{"class":112,"line":1175},32,[110,1177,361],{"class":123},[110,1179,364],{"class":116},[110,1181,1182],{"class":179}," \"捕获到 double 异常：\"",[110,1184,370],{"class":116},[110,1186,869],{"class":123},[110,1188,364],{"class":116},[110,1190,377],{"class":123},[110,1192,1194],{"class":112,"line":1193},33,[110,1195,271],{"class":123},[110,1197,1199,1201,1203,1205,1207],{"class":112,"line":1198},34,[110,1200,388],{"class":116},[110,1202,391],{"class":123},[110,1204,394],{"class":116},[110,1206,397],{"class":116},[110,1208,851],{"class":123},[110,1210,1212],{"class":112,"line":1211},35,[110,1213,255],{"class":123},[110,1215,1217,1219,1221,1224,1226,1228,1230],{"class":112,"line":1216},36,[110,1218,361],{"class":123},[110,1220,364],{"class":116},[110,1222,1223],{"class":179}," \"捕获到字符串异常：\"",[110,1225,370],{"class":116},[110,1227,869],{"class":123},[110,1229,364],{"class":116},[110,1231,377],{"class":123},[110,1233,1235],{"class":112,"line":1234},37,[110,1236,271],{"class":123},[110,1238,1240],{"class":112,"line":1239},38,[110,1241,201],{"emptyLinePlaceholder":200},[110,1243,1245,1247,1249],{"class":112,"line":1244},39,[110,1246,282],{"class":116},[110,1248,248],{"class":247},[110,1250,195],{"class":123},[110,1252,1254],{"class":112,"line":1253},40,[110,1255,137],{"class":123},[17,1257,1258],{},[49,1259,453],{},[101,1261,1264],{"className":1262,"code":1263,"language":459,"meta":106},[457],"捕获到字符串异常：字符串异常\n",[60,1265,1263],{"__ignoreMap":106},[17,1267,1268,1269,1271,1272,748],{},"根據 ",[60,1270,72],{}," 拋出的類型不同，會進入不同的 ",[60,1273,67],{},[473,1275],{},[13,1277,1278],{"id":1278},"捕獲所有異常",[17,1280,1281,1282,1285],{},"如果不關心異常的具體類型，可以使用 ",[60,1283,1284],{},"catch (...)"," 捕獲所有異常。",[17,1287,1288],{},[49,1289,99],{},[101,1291,1293],{"className":103,"code":1292,"language":105,"meta":106,"style":106},"catch (...)\n{\n    \u002F\u002F 捕获所有异常\n}\n",[60,1294,1295,1302,1306,1311],{"__ignoreMap":106},[110,1296,1297,1299],{"class":112,"line":113},[110,1298,67],{"class":116},[110,1300,1301],{"class":123}," (...)\n",[110,1303,1304],{"class":112,"line":120},[110,1305,124],{"class":123},[110,1307,1308],{"class":112,"line":127},[110,1309,1310],{"class":130},"    \u002F\u002F 捕获所有异常\n",[110,1312,1313],{"class":112,"line":134},[110,1314,137],{"class":123},[17,1316,1317],{},[49,1318,166],{},[101,1320,1322],{"className":103,"code":1321,"language":105,"meta":106,"style":106},"#include \u003Ciostream>\nusing namespace std;\n\nvoid test()\n{\n    throw 3.14;\n}\n\nint main()\n{\n    try\n    {\n        test();\n    }\n    catch (...)\n    {\n        cout \u003C\u003C \"捕获到未知类型异常\" \u003C\u003C endl;\n    }\n\n    return 0;\n}\n",[60,1323,1324,1330,1340,1344,1352,1356,1364,1368,1372,1380,1384,1388,1392,1398,1402,1408,1412,1425,1429,1433,1441],{"__ignoreMap":106},[110,1325,1326,1328],{"class":112,"line":113},[110,1327,176],{"class":116},[110,1329,180],{"class":179},[110,1331,1332,1334,1336,1338],{"class":112,"line":120},[110,1333,185],{"class":116},[110,1335,188],{"class":116},[110,1337,192],{"class":191},[110,1339,195],{"class":123},[110,1341,1342],{"class":112,"line":127},[110,1343,201],{"emptyLinePlaceholder":200},[110,1345,1346,1348,1350],{"class":112,"line":134},[110,1347,536],{"class":116},[110,1349,784],{"class":191},[110,1351,312],{"class":123},[110,1353,1354],{"class":112,"line":140},[110,1355,124],{"class":123},[110,1357,1358,1360,1362],{"class":112,"line":148},[110,1359,795],{"class":116},[110,1361,1037],{"class":247},[110,1363,195],{"class":123},[110,1365,1366],{"class":112,"line":153},[110,1367,137],{"class":123},[110,1369,1370],{"class":112,"line":159},[110,1371,201],{"emptyLinePlaceholder":200},[110,1373,1374,1376,1378],{"class":112,"line":268},[110,1375,206],{"class":116},[110,1377,309],{"class":191},[110,1379,312],{"class":123},[110,1381,1382],{"class":112,"line":274},[110,1383,124],{"class":123},[110,1385,1386],{"class":112,"line":279},[110,1387,323],{"class":116},[110,1389,1390],{"class":112,"line":294},[110,1391,255],{"class":123},[110,1393,1394,1396],{"class":112,"line":299},[110,1395,833],{"class":191},[110,1397,836],{"class":123},[110,1399,1400],{"class":112,"line":304},[110,1401,271],{"class":123},[110,1403,1404,1406],{"class":112,"line":315},[110,1405,388],{"class":116},[110,1407,1301],{"class":123},[110,1409,1410],{"class":112,"line":320},[110,1411,255],{"class":123},[110,1413,1414,1416,1418,1421,1423],{"class":112,"line":326},[110,1415,361],{"class":123},[110,1417,364],{"class":116},[110,1419,1420],{"class":179}," \"捕获到未知类型异常\"",[110,1422,370],{"class":116},[110,1424,377],{"class":123},[110,1426,1427],{"class":112,"line":331},[110,1428,271],{"class":123},[110,1430,1431],{"class":112,"line":358},[110,1432,201],{"emptyLinePlaceholder":200},[110,1434,1435,1437,1439],{"class":112,"line":380},[110,1436,282],{"class":116},[110,1438,248],{"class":247},[110,1440,195],{"class":123},[110,1442,1443],{"class":112,"line":385},[110,1444,137],{"class":123},[17,1446,1447],{},[49,1448,453],{},[101,1450,1453],{"className":1451,"code":1452,"language":459,"meta":106},[457],"捕获到未知类型异常\n",[60,1454,1452],{"__ignoreMap":106},[17,1456,1457,1458,1460],{},"無論拋出的異常是什麼類型，",[60,1459,1284],{}," 都可以捕獲。",[17,1462,1463],{},[49,1464,1465],{},"注意：",[17,1467,1468,1470],{},[60,1469,1284],{}," 一般放在最後。",[101,1472,1474],{"className":103,"code":1473,"language":105,"meta":106,"style":106},"try\n{\n    test();\n}\ncatch (int e)\n{\n    cout \u003C\u003C \"int异常\" \u003C\u003C endl;\n}\ncatch (...)\n{\n    cout \u003C\u003C \"其他异常\" \u003C\u003C endl;\n}\n",[60,1475,1476,1480,1484,1491,1495,1505,1509,1522,1526,1532,1536,1549],{"__ignoreMap":106},[110,1477,1478],{"class":112,"line":113},[110,1479,117],{"class":116},[110,1481,1482],{"class":112,"line":120},[110,1483,124],{"class":123},[110,1485,1486,1489],{"class":112,"line":127},[110,1487,1488],{"class":191},"    test",[110,1490,836],{"class":123},[110,1492,1493],{"class":112,"line":134},[110,1494,137],{"class":123},[110,1496,1497,1499,1501,1503],{"class":112,"line":140},[110,1498,67],{"class":116},[110,1500,391],{"class":123},[110,1502,206],{"class":116},[110,1504,851],{"class":123},[110,1506,1507],{"class":112,"line":148},[110,1508,124],{"class":123},[110,1510,1511,1513,1515,1518,1520],{"class":112,"line":153},[110,1512,592],{"class":123},[110,1514,364],{"class":116},[110,1516,1517],{"class":179}," \"int异常\"",[110,1519,370],{"class":116},[110,1521,377],{"class":123},[110,1523,1524],{"class":112,"line":159},[110,1525,137],{"class":123},[110,1527,1528,1530],{"class":112,"line":268},[110,1529,67],{"class":116},[110,1531,1301],{"class":123},[110,1533,1534],{"class":112,"line":274},[110,1535,124],{"class":123},[110,1537,1538,1540,1542,1545,1547],{"class":112,"line":279},[110,1539,592],{"class":123},[110,1541,364],{"class":116},[110,1543,1544],{"class":179}," \"其他异常\"",[110,1546,370],{"class":116},[110,1548,377],{"class":123},[110,1550,1551],{"class":112,"line":294},[110,1552,137],{"class":123},[473,1554],{},[13,1556,1557],{"id":1557},"標準異常類",[17,1559,1560],{},"在實際 C++ 工程中，不推薦隨便拋出字符串，更多時候會使用標準庫提供的異常類。",[17,1562,1563],{},"常用異常類：",[21,1565,1566,1571,1576,1581,1586,1591],{},[24,1567,1568],{},[60,1569,1570],{},"std::exception",[24,1572,1573],{},[60,1574,1575],{},"std::runtime_error",[24,1577,1578],{},[60,1579,1580],{},"std::logic_error",[24,1582,1583],{},[60,1584,1585],{},"std::invalid_argument",[24,1587,1588],{},[60,1589,1590],{},"std::out_of_range",[24,1592,1593],{},[60,1594,1595],{},"std::bad_alloc",[17,1597,1598],{},"使用標準異常類需要包含頭文件：",[101,1600,1602],{"className":103,"code":1601,"language":105,"meta":106,"style":106},"#include \u003Cstdexcept>\n",[60,1603,1604],{"__ignoreMap":106},[110,1605,1606,1608],{"class":112,"line":113},[110,1607,176],{"class":116},[110,1609,1610],{"class":179}," \u003Cstdexcept>\n",[1612,1613,1614],"h4",{"id":1614},"runtime_error",[17,1616,1617,1619],{},[60,1618,1614],{}," 表示運行時錯誤，例如文件打開失敗、串口打開失敗、網絡連接失敗等。",[17,1621,1622],{},[49,1623,166],{},[101,1625,1627],{"className":103,"code":1626,"language":105,"meta":106,"style":106},"#include \u003Ciostream>\n#include \u003Cstdexcept>\nusing namespace std;\n\nvoid openSerialPort(const string& device)\n{\n    if (device.empty())\n    {\n        throw runtime_error(\"串口设备名不能为空\");\n    }\n\n    cout \u003C\u003C \"打开串口：\" \u003C\u003C device \u003C\u003C endl;\n}\n\nint main()\n{\n    try\n    {\n        openSerialPort(\"\");\n    }\n    catch (const runtime_error& e)\n    {\n        cout \u003C\u003C \"运行时错误：\" \u003C\u003C e.what() \u003C\u003C endl;\n    }\n\n    return 0;\n}\n",[60,1628,1629,1635,1641,1651,1655,1677,1681,1694,1698,1712,1716,1720,1738,1742,1746,1754,1758,1762,1766,1778,1782,1796,1800,1824,1828,1832,1840],{"__ignoreMap":106},[110,1630,1631,1633],{"class":112,"line":113},[110,1632,176],{"class":116},[110,1634,180],{"class":179},[110,1636,1637,1639],{"class":112,"line":120},[110,1638,176],{"class":116},[110,1640,1610],{"class":179},[110,1642,1643,1645,1647,1649],{"class":112,"line":127},[110,1644,185],{"class":116},[110,1646,188],{"class":116},[110,1648,192],{"class":191},[110,1650,195],{"class":123},[110,1652,1653],{"class":112,"line":134},[110,1654,201],{"emptyLinePlaceholder":200},[110,1656,1657,1659,1662,1664,1666,1669,1672,1675],{"class":112,"line":140},[110,1658,536],{"class":116},[110,1660,1661],{"class":191}," openSerialPort",[110,1663,212],{"class":123},[110,1665,394],{"class":116},[110,1667,1668],{"class":191}," string",[110,1670,1671],{"class":116},"&",[110,1673,1674],{"class":217}," device",[110,1676,229],{"class":123},[110,1678,1679],{"class":112,"line":148},[110,1680,124],{"class":123},[110,1682,1683,1685,1688,1691],{"class":112,"line":153},[110,1684,238],{"class":116},[110,1686,1687],{"class":123}," (device.",[110,1689,1690],{"class":191},"empty",[110,1692,1693],{"class":123},"())\n",[110,1695,1696],{"class":112,"line":159},[110,1697,255],{"class":123},[110,1699,1700,1702,1705,1707,1710],{"class":112,"line":268},[110,1701,260],{"class":116},[110,1703,1704],{"class":191}," runtime_error",[110,1706,212],{"class":123},[110,1708,1709],{"class":179},"\"串口设备名不能为空\"",[110,1711,355],{"class":123},[110,1713,1714],{"class":112,"line":274},[110,1715,271],{"class":123},[110,1717,1718],{"class":112,"line":279},[110,1719,201],{"emptyLinePlaceholder":200},[110,1721,1722,1724,1726,1729,1731,1734,1736],{"class":112,"line":294},[110,1723,592],{"class":123},[110,1725,364],{"class":116},[110,1727,1728],{"class":179}," \"打开串口：\"",[110,1730,370],{"class":116},[110,1732,1733],{"class":123}," device ",[110,1735,364],{"class":116},[110,1737,377],{"class":123},[110,1739,1740],{"class":112,"line":299},[110,1741,137],{"class":123},[110,1743,1744],{"class":112,"line":304},[110,1745,201],{"emptyLinePlaceholder":200},[110,1747,1748,1750,1752],{"class":112,"line":315},[110,1749,206],{"class":116},[110,1751,309],{"class":191},[110,1753,312],{"class":123},[110,1755,1756],{"class":112,"line":320},[110,1757,124],{"class":123},[110,1759,1760],{"class":112,"line":326},[110,1761,323],{"class":116},[110,1763,1764],{"class":112,"line":331},[110,1765,255],{"class":123},[110,1767,1768,1771,1773,1776],{"class":112,"line":358},[110,1769,1770],{"class":191},"        openSerialPort",[110,1772,212],{"class":123},[110,1774,1775],{"class":179},"\"\"",[110,1777,355],{"class":123},[110,1779,1780],{"class":112,"line":380},[110,1781,271],{"class":123},[110,1783,1784,1786,1788,1790,1792,1794],{"class":112,"line":385},[110,1785,388],{"class":116},[110,1787,391],{"class":123},[110,1789,394],{"class":116},[110,1791,1704],{"class":123},[110,1793,1671],{"class":116},[110,1795,851],{"class":123},[110,1797,1798],{"class":112,"line":403},[110,1799,255],{"class":123},[110,1801,1802,1804,1806,1809,1811,1814,1817,1820,1822],{"class":112,"line":408},[110,1803,361],{"class":123},[110,1805,364],{"class":116},[110,1807,1808],{"class":179}," \"运行时错误：\"",[110,1810,370],{"class":116},[110,1812,1813],{"class":123}," e.",[110,1815,1816],{"class":191},"what",[110,1818,1819],{"class":123},"() ",[110,1821,364],{"class":116},[110,1823,377],{"class":123},[110,1825,1826],{"class":112,"line":427},[110,1827,271],{"class":123},[110,1829,1830],{"class":112,"line":432},[110,1831,201],{"emptyLinePlaceholder":200},[110,1833,1834,1836,1838],{"class":112,"line":437},[110,1835,282],{"class":116},[110,1837,248],{"class":247},[110,1839,195],{"class":123},[110,1841,1842],{"class":112,"line":446},[110,1843,137],{"class":123},[17,1845,1846],{},[49,1847,453],{},[101,1849,1852],{"className":1850,"code":1851,"language":459,"meta":106},[457],"运行时错误：串口设备名不能为空\n",[60,1853,1851],{"__ignoreMap":106},[17,1855,1856,1859],{},[60,1857,1858],{},"e.what()"," 可以獲取異常中的錯誤信息。",[473,1861],{},[1612,1863,1864],{"id":1864},"invalid_argument",[17,1866,1867,1869],{},[60,1868,1864],{}," 表示參數不合法。",[17,1871,1872],{},[49,1873,166],{},[101,1875,1877],{"className":103,"code":1876,"language":105,"meta":106,"style":106},"#include \u003Ciostream>\n#include \u003Cstdexcept>\nusing namespace std;\n\nvoid setSpeed(double speed)\n{\n    if (speed \u003C 0)\n    {\n        throw invalid_argument(\"速度不能为负数\");\n    }\n\n    cout \u003C\u003C \"设置速度：\" \u003C\u003C speed \u003C\u003C endl;\n}\n\nint main()\n{\n    try\n    {\n        setSpeed(-1.5);\n    }\n    catch (const invalid_argument& e)\n    {\n        cout \u003C\u003C \"参数错误：\" \u003C\u003C e.what() \u003C\u003C endl;\n    }\n\n    return 0;\n}\n",[60,1878,1879,1885,1891,1901,1905,1921,1925,1938,1942,1956,1960,1964,1982,1986,1990,1998,2002,2006,2010,2024,2028,2042,2046,2067,2071,2075,2083],{"__ignoreMap":106},[110,1880,1881,1883],{"class":112,"line":113},[110,1882,176],{"class":116},[110,1884,180],{"class":179},[110,1886,1887,1889],{"class":112,"line":120},[110,1888,176],{"class":116},[110,1890,1610],{"class":179},[110,1892,1893,1895,1897,1899],{"class":112,"line":127},[110,1894,185],{"class":116},[110,1896,188],{"class":116},[110,1898,192],{"class":191},[110,1900,195],{"class":123},[110,1902,1903],{"class":112,"line":134},[110,1904,201],{"emptyLinePlaceholder":200},[110,1906,1907,1909,1912,1914,1916,1919],{"class":112,"line":140},[110,1908,536],{"class":116},[110,1910,1911],{"class":191}," setSpeed",[110,1913,212],{"class":123},[110,1915,1165],{"class":116},[110,1917,1918],{"class":217}," speed",[110,1920,229],{"class":123},[110,1922,1923],{"class":112,"line":148},[110,1924,124],{"class":123},[110,1926,1927,1929,1932,1934,1936],{"class":112,"line":153},[110,1928,238],{"class":116},[110,1930,1931],{"class":123}," (speed ",[110,1933,562],{"class":116},[110,1935,248],{"class":247},[110,1937,229],{"class":123},[110,1939,1940],{"class":112,"line":159},[110,1941,255],{"class":123},[110,1943,1944,1946,1949,1951,1954],{"class":112,"line":268},[110,1945,260],{"class":116},[110,1947,1948],{"class":191}," invalid_argument",[110,1950,212],{"class":123},[110,1952,1953],{"class":179},"\"速度不能为负数\"",[110,1955,355],{"class":123},[110,1957,1958],{"class":112,"line":274},[110,1959,271],{"class":123},[110,1961,1962],{"class":112,"line":279},[110,1963,201],{"emptyLinePlaceholder":200},[110,1965,1966,1968,1970,1973,1975,1978,1980],{"class":112,"line":294},[110,1967,592],{"class":123},[110,1969,364],{"class":116},[110,1971,1972],{"class":179}," \"设置速度：\"",[110,1974,370],{"class":116},[110,1976,1977],{"class":123}," speed ",[110,1979,364],{"class":116},[110,1981,377],{"class":123},[110,1983,1984],{"class":112,"line":299},[110,1985,137],{"class":123},[110,1987,1988],{"class":112,"line":304},[110,1989,201],{"emptyLinePlaceholder":200},[110,1991,1992,1994,1996],{"class":112,"line":315},[110,1993,206],{"class":116},[110,1995,309],{"class":191},[110,1997,312],{"class":123},[110,1999,2000],{"class":112,"line":320},[110,2001,124],{"class":123},[110,2003,2004],{"class":112,"line":326},[110,2005,323],{"class":116},[110,2007,2008],{"class":112,"line":331},[110,2009,255],{"class":123},[110,2011,2012,2015,2017,2019,2022],{"class":112,"line":358},[110,2013,2014],{"class":191},"        setSpeed",[110,2016,212],{"class":123},[110,2018,644],{"class":116},[110,2020,2021],{"class":247},"1.5",[110,2023,355],{"class":123},[110,2025,2026],{"class":112,"line":380},[110,2027,271],{"class":123},[110,2029,2030,2032,2034,2036,2038,2040],{"class":112,"line":385},[110,2031,388],{"class":116},[110,2033,391],{"class":123},[110,2035,394],{"class":116},[110,2037,1948],{"class":123},[110,2039,1671],{"class":116},[110,2041,851],{"class":123},[110,2043,2044],{"class":112,"line":403},[110,2045,255],{"class":123},[110,2047,2048,2050,2052,2055,2057,2059,2061,2063,2065],{"class":112,"line":408},[110,2049,361],{"class":123},[110,2051,364],{"class":116},[110,2053,2054],{"class":179}," \"参数错误：\"",[110,2056,370],{"class":116},[110,2058,1813],{"class":123},[110,2060,1816],{"class":191},[110,2062,1819],{"class":123},[110,2064,364],{"class":116},[110,2066,377],{"class":123},[110,2068,2069],{"class":112,"line":427},[110,2070,271],{"class":123},[110,2072,2073],{"class":112,"line":432},[110,2074,201],{"emptyLinePlaceholder":200},[110,2076,2077,2079,2081],{"class":112,"line":437},[110,2078,282],{"class":116},[110,2080,248],{"class":247},[110,2082,195],{"class":123},[110,2084,2085],{"class":112,"line":446},[110,2086,137],{"class":123},[17,2088,2089],{},[49,2090,453],{},[101,2092,2095],{"className":2093,"code":2094,"language":459,"meta":106},[457],"参数错误：速度不能为负数\n",[60,2096,2094],{"__ignoreMap":106},[17,2098,2099],{},"當傳入的速度小於 0 時，會拋出參數錯誤異常。",[473,2101],{},[1612,2103,2104],{"id":2104},"out_of_range",[17,2106,2107,2109],{},[60,2108,2104],{}," 表示訪問越界。",[17,2111,2112,2115,2116,2119],{},[60,2113,2114],{},"vector"," 的 ",[60,2117,2118],{},"at()"," 函數在越界時會拋出異常。",[17,2121,2122],{},[49,2123,166],{},[101,2125,2127],{"className":103,"code":2126,"language":105,"meta":106,"style":106},"#include \u003Ciostream>\n#include \u003Cvector>\n#include \u003Cstdexcept>\nusing namespace std;\n\nint main()\n{\n    vector\u003Cint> nums = {10, 20, 30};\n\n    try\n    {\n        cout \u003C\u003C nums.at(5) \u003C\u003C endl;\n    }\n    catch (const out_of_range& e)\n    {\n        cout \u003C\u003C \"访问越界：\" \u003C\u003C e.what() \u003C\u003C endl;\n    }\n\n    return 0;\n}\n",[60,2128,2129,2135,2142,2148,2158,2162,2170,2174,2205,2209,2213,2217,2241,2245,2260,2264,2285,2289,2293,2301],{"__ignoreMap":106},[110,2130,2131,2133],{"class":112,"line":113},[110,2132,176],{"class":116},[110,2134,180],{"class":179},[110,2136,2137,2139],{"class":112,"line":120},[110,2138,176],{"class":116},[110,2140,2141],{"class":179}," \u003Cvector>\n",[110,2143,2144,2146],{"class":112,"line":127},[110,2145,176],{"class":116},[110,2147,1610],{"class":179},[110,2149,2150,2152,2154,2156],{"class":112,"line":134},[110,2151,185],{"class":116},[110,2153,188],{"class":116},[110,2155,192],{"class":191},[110,2157,195],{"class":123},[110,2159,2160],{"class":112,"line":140},[110,2161,201],{"emptyLinePlaceholder":200},[110,2163,2164,2166,2168],{"class":112,"line":148},[110,2165,206],{"class":116},[110,2167,309],{"class":191},[110,2169,312],{"class":123},[110,2171,2172],{"class":112,"line":153},[110,2173,124],{"class":123},[110,2175,2176,2179,2182,2185,2187,2190,2192,2194,2197,2199,2202],{"class":112,"line":159},[110,2177,2178],{"class":123},"    vector",[110,2180,2181],{"class":116},"\u003Cint>",[110,2183,2184],{"class":123}," nums ",[110,2186,340],{"class":116},[110,2188,2189],{"class":123}," {",[110,2191,347],{"class":247},[110,2193,221],{"class":123},[110,2195,2196],{"class":247},"20",[110,2198,221],{"class":123},[110,2200,2201],{"class":247},"30",[110,2203,2204],{"class":123},"};\n",[110,2206,2207],{"class":112,"line":268},[110,2208,201],{"emptyLinePlaceholder":200},[110,2210,2211],{"class":112,"line":274},[110,2212,323],{"class":116},[110,2214,2215],{"class":112,"line":279},[110,2216,255],{"class":123},[110,2218,2219,2221,2223,2226,2229,2231,2234,2237,2239],{"class":112,"line":294},[110,2220,361],{"class":123},[110,2222,364],{"class":116},[110,2224,2225],{"class":123}," nums.",[110,2227,2228],{"class":191},"at",[110,2230,212],{"class":123},[110,2232,2233],{"class":247},"5",[110,2235,2236],{"class":123},") ",[110,2238,364],{"class":116},[110,2240,377],{"class":123},[110,2242,2243],{"class":112,"line":299},[110,2244,271],{"class":123},[110,2246,2247,2249,2251,2253,2256,2258],{"class":112,"line":304},[110,2248,388],{"class":116},[110,2250,391],{"class":123},[110,2252,394],{"class":116},[110,2254,2255],{"class":123}," out_of_range",[110,2257,1671],{"class":116},[110,2259,851],{"class":123},[110,2261,2262],{"class":112,"line":315},[110,2263,255],{"class":123},[110,2265,2266,2268,2270,2273,2275,2277,2279,2281,2283],{"class":112,"line":320},[110,2267,361],{"class":123},[110,2269,364],{"class":116},[110,2271,2272],{"class":179}," \"访问越界：\"",[110,2274,370],{"class":116},[110,2276,1813],{"class":123},[110,2278,1816],{"class":191},[110,2280,1819],{"class":123},[110,2282,364],{"class":116},[110,2284,377],{"class":123},[110,2286,2287],{"class":112,"line":326},[110,2288,271],{"class":123},[110,2290,2291],{"class":112,"line":331},[110,2292,201],{"emptyLinePlaceholder":200},[110,2294,2295,2297,2299],{"class":112,"line":358},[110,2296,282],{"class":116},[110,2298,248],{"class":247},[110,2300,195],{"class":123},[110,2302,2303],{"class":112,"line":380},[110,2304,137],{"class":123},[17,2306,2307],{},[49,2308,453],{},[101,2310,2313],{"className":2311,"code":2312,"language":459,"meta":106},[457],"访问越界：vector::_M_range_check: __n (which is 5) >= this->size() (which is 3)\n",[60,2314,2312],{"__ignoreMap":106},[17,2316,2317,2320,2321,2323],{},[60,2318,2319],{},"nums.at(5)"," 超出了 vector 的範圍，所以會拋出 ",[60,2322,2104],{}," 異常。",[17,2325,2326],{},[49,2327,1465],{},[101,2329,2331],{"className":103,"code":2330,"language":105,"meta":106,"style":106},"nums[5];     \u002F\u002F 越界时不一定抛异常，可能直接产生未定义行为\nnums.at(5); \u002F\u002F 越界时会抛出 out_of_range 异常\n",[60,2332,2333,2346],{"__ignoreMap":106},[110,2334,2335,2338,2340,2343],{"class":112,"line":113},[110,2336,2337],{"class":123},"nums[",[110,2339,2233],{"class":247},[110,2341,2342],{"class":123},"];",[110,2344,2345],{"class":130},"     \u002F\u002F 越界时不一定抛异常，可能直接产生未定义行为\n",[110,2347,2348,2351,2353,2355,2357,2360],{"class":112,"line":120},[110,2349,2350],{"class":123},"nums.",[110,2352,2228],{"class":191},[110,2354,212],{"class":123},[110,2356,2233],{"class":247},[110,2358,2359],{"class":123},");",[110,2361,2362],{"class":130}," \u002F\u002F 越界时会抛出 out_of_range 异常\n",[473,2364],{},[13,2366,2368],{"id":2367},"捕獲-stdexception","捕獲 std::exception",[17,2370,2371,2372,2374],{},"很多標準異常類都繼承自 ",[60,2373,1570],{},"。",[17,2376,2377],{},"因此實際工程中，經常使用下面這種寫法：",[101,2379,2381],{"className":103,"code":2380,"language":105,"meta":106,"style":106},"catch (const std::exception& e)\n{\n    cout \u003C\u003C e.what() \u003C\u003C endl;\n}\n",[60,2382,2383,2400,2404,2420],{"__ignoreMap":106},[110,2384,2385,2387,2389,2391,2393,2396,2398],{"class":112,"line":113},[110,2386,67],{"class":116},[110,2388,391],{"class":123},[110,2390,394],{"class":116},[110,2392,192],{"class":191},[110,2394,2395],{"class":123},"::exception",[110,2397,1671],{"class":116},[110,2399,851],{"class":123},[110,2401,2402],{"class":112,"line":120},[110,2403,124],{"class":123},[110,2405,2406,2408,2410,2412,2414,2416,2418],{"class":112,"line":127},[110,2407,592],{"class":123},[110,2409,364],{"class":116},[110,2411,1813],{"class":123},[110,2413,1816],{"class":191},[110,2415,1819],{"class":123},[110,2417,364],{"class":116},[110,2419,377],{"class":123},[110,2421,2422],{"class":112,"line":134},[110,2423,137],{"class":123},[17,2425,2426],{},[49,2427,166],{},[101,2429,2431],{"className":103,"code":2430,"language":105,"meta":106,"style":106},"#include \u003Ciostream>\n#include \u003Cstdexcept>\nusing namespace std;\n\nvoid test()\n{\n    throw runtime_error(\"程序运行出现错误\");\n}\n\nint main()\n{\n    try\n    {\n        test();\n    }\n    catch (const exception& e)\n    {\n        cout \u003C\u003C \"捕获到标准异常：\" \u003C\u003C e.what() \u003C\u003C endl;\n    }\n\n    return 0;\n}\n",[60,2432,2433,2439,2445,2455,2459,2467,2471,2484,2488,2492,2500,2504,2508,2512,2518,2522,2537,2541,2562,2566,2570,2578],{"__ignoreMap":106},[110,2434,2435,2437],{"class":112,"line":113},[110,2436,176],{"class":116},[110,2438,180],{"class":179},[110,2440,2441,2443],{"class":112,"line":120},[110,2442,176],{"class":116},[110,2444,1610],{"class":179},[110,2446,2447,2449,2451,2453],{"class":112,"line":127},[110,2448,185],{"class":116},[110,2450,188],{"class":116},[110,2452,192],{"class":191},[110,2454,195],{"class":123},[110,2456,2457],{"class":112,"line":134},[110,2458,201],{"emptyLinePlaceholder":200},[110,2460,2461,2463,2465],{"class":112,"line":140},[110,2462,536],{"class":116},[110,2464,784],{"class":191},[110,2466,312],{"class":123},[110,2468,2469],{"class":112,"line":148},[110,2470,124],{"class":123},[110,2472,2473,2475,2477,2479,2482],{"class":112,"line":153},[110,2474,795],{"class":116},[110,2476,1704],{"class":191},[110,2478,212],{"class":123},[110,2480,2481],{"class":179},"\"程序运行出现错误\"",[110,2483,355],{"class":123},[110,2485,2486],{"class":112,"line":159},[110,2487,137],{"class":123},[110,2489,2490],{"class":112,"line":268},[110,2491,201],{"emptyLinePlaceholder":200},[110,2493,2494,2496,2498],{"class":112,"line":274},[110,2495,206],{"class":116},[110,2497,309],{"class":191},[110,2499,312],{"class":123},[110,2501,2502],{"class":112,"line":279},[110,2503,124],{"class":123},[110,2505,2506],{"class":112,"line":294},[110,2507,323],{"class":116},[110,2509,2510],{"class":112,"line":299},[110,2511,255],{"class":123},[110,2513,2514,2516],{"class":112,"line":304},[110,2515,833],{"class":191},[110,2517,836],{"class":123},[110,2519,2520],{"class":112,"line":315},[110,2521,271],{"class":123},[110,2523,2524,2526,2528,2530,2533,2535],{"class":112,"line":320},[110,2525,388],{"class":116},[110,2527,391],{"class":123},[110,2529,394],{"class":116},[110,2531,2532],{"class":123}," exception",[110,2534,1671],{"class":116},[110,2536,851],{"class":123},[110,2538,2539],{"class":112,"line":326},[110,2540,255],{"class":123},[110,2542,2543,2545,2547,2550,2552,2554,2556,2558,2560],{"class":112,"line":331},[110,2544,361],{"class":123},[110,2546,364],{"class":116},[110,2548,2549],{"class":179}," \"捕获到标准异常：\"",[110,2551,370],{"class":116},[110,2553,1813],{"class":123},[110,2555,1816],{"class":191},[110,2557,1819],{"class":123},[110,2559,364],{"class":116},[110,2561,377],{"class":123},[110,2563,2564],{"class":112,"line":358},[110,2565,271],{"class":123},[110,2567,2568],{"class":112,"line":380},[110,2569,201],{"emptyLinePlaceholder":200},[110,2571,2572,2574,2576],{"class":112,"line":385},[110,2573,282],{"class":116},[110,2575,248],{"class":247},[110,2577,195],{"class":123},[110,2579,2580],{"class":112,"line":403},[110,2581,137],{"class":123},[17,2583,2584],{},[49,2585,453],{},[101,2587,2590],{"className":2588,"code":2589,"language":459,"meta":106},[457],"捕获到标准异常：程序运行出现错误\n",[60,2591,2589],{"__ignoreMap":106},[17,2593,2594,2596,2597,916],{},[60,2595,1614],{}," 屬於標準異常類型，可以被 ",[60,2598,2599],{},"const exception&",[473,2601],{},[13,2603,2605],{"id":2604},"catch-捕獲順序","catch 捕獲順序",[17,2607,2608],{},"如果同時捕獲父類異常和子類異常，應該先捕獲子類，再捕獲父類。",[17,2610,2611],{},[49,2612,2613],{},"錯誤寫法：",[101,2615,2617],{"className":103,"code":2616,"language":105,"meta":106,"style":106},"try\n{\n    throw runtime_error(\"运行时错误\");\n}\ncatch (const exception& e)\n{\n    cout \u003C\u003C \"exception：\" \u003C\u003C e.what() \u003C\u003C endl;\n}\ncatch (const runtime_error& e)\n{\n    cout \u003C\u003C \"runtime_error：\" \u003C\u003C e.what() \u003C\u003C endl;\n}\n",[60,2618,2619,2623,2627,2640,2644,2658,2662,2683,2687,2701,2705,2726],{"__ignoreMap":106},[110,2620,2621],{"class":112,"line":113},[110,2622,117],{"class":116},[110,2624,2625],{"class":112,"line":120},[110,2626,124],{"class":123},[110,2628,2629,2631,2633,2635,2638],{"class":112,"line":127},[110,2630,795],{"class":116},[110,2632,1704],{"class":191},[110,2634,212],{"class":123},[110,2636,2637],{"class":179},"\"运行时错误\"",[110,2639,355],{"class":123},[110,2641,2642],{"class":112,"line":134},[110,2643,137],{"class":123},[110,2645,2646,2648,2650,2652,2654,2656],{"class":112,"line":140},[110,2647,67],{"class":116},[110,2649,391],{"class":123},[110,2651,394],{"class":116},[110,2653,2532],{"class":123},[110,2655,1671],{"class":116},[110,2657,851],{"class":123},[110,2659,2660],{"class":112,"line":148},[110,2661,124],{"class":123},[110,2663,2664,2666,2668,2671,2673,2675,2677,2679,2681],{"class":112,"line":153},[110,2665,592],{"class":123},[110,2667,364],{"class":116},[110,2669,2670],{"class":179}," \"exception：\"",[110,2672,370],{"class":116},[110,2674,1813],{"class":123},[110,2676,1816],{"class":191},[110,2678,1819],{"class":123},[110,2680,364],{"class":116},[110,2682,377],{"class":123},[110,2684,2685],{"class":112,"line":159},[110,2686,137],{"class":123},[110,2688,2689,2691,2693,2695,2697,2699],{"class":112,"line":268},[110,2690,67],{"class":116},[110,2692,391],{"class":123},[110,2694,394],{"class":116},[110,2696,1704],{"class":123},[110,2698,1671],{"class":116},[110,2700,851],{"class":123},[110,2702,2703],{"class":112,"line":274},[110,2704,124],{"class":123},[110,2706,2707,2709,2711,2714,2716,2718,2720,2722,2724],{"class":112,"line":279},[110,2708,592],{"class":123},[110,2710,364],{"class":116},[110,2712,2713],{"class":179}," \"runtime_error：\"",[110,2715,370],{"class":116},[110,2717,1813],{"class":123},[110,2719,1816],{"class":191},[110,2721,1819],{"class":123},[110,2723,364],{"class":116},[110,2725,377],{"class":123},[110,2727,2728],{"class":112,"line":294},[110,2729,137],{"class":123},[17,2731,2732,2733,2735,2736,2739,2740,2742],{},"上面的寫法中，",[60,2734,1614],{}," 會先被 ",[60,2737,2738],{},"exception"," 捕獲，後面的 ",[60,2741,1614],{}," 分支就沒有意義了。",[17,2744,2745],{},[49,2746,2747],{},"推薦寫法：",[101,2749,2751],{"className":103,"code":2750,"language":105,"meta":106,"style":106},"#include \u003Ciostream>\n#include \u003Cstdexcept>\nusing namespace std;\n\nint main()\n{\n    try\n    {\n        throw runtime_error(\"运行时错误\");\n    }\n    catch (const runtime_error& e)\n    {\n        cout \u003C\u003C \"runtime_error：\" \u003C\u003C e.what() \u003C\u003C endl;\n    }\n    catch (const exception& e)\n    {\n        cout \u003C\u003C \"exception：\" \u003C\u003C e.what() \u003C\u003C endl;\n    }\n\n    return 0;\n}\n",[60,2752,2753,2759,2765,2775,2779,2787,2791,2795,2799,2811,2815,2829,2833,2853,2857,2871,2875,2895,2899,2903,2911],{"__ignoreMap":106},[110,2754,2755,2757],{"class":112,"line":113},[110,2756,176],{"class":116},[110,2758,180],{"class":179},[110,2760,2761,2763],{"class":112,"line":120},[110,2762,176],{"class":116},[110,2764,1610],{"class":179},[110,2766,2767,2769,2771,2773],{"class":112,"line":127},[110,2768,185],{"class":116},[110,2770,188],{"class":116},[110,2772,192],{"class":191},[110,2774,195],{"class":123},[110,2776,2777],{"class":112,"line":134},[110,2778,201],{"emptyLinePlaceholder":200},[110,2780,2781,2783,2785],{"class":112,"line":140},[110,2782,206],{"class":116},[110,2784,309],{"class":191},[110,2786,312],{"class":123},[110,2788,2789],{"class":112,"line":148},[110,2790,124],{"class":123},[110,2792,2793],{"class":112,"line":153},[110,2794,323],{"class":116},[110,2796,2797],{"class":112,"line":159},[110,2798,255],{"class":123},[110,2800,2801,2803,2805,2807,2809],{"class":112,"line":268},[110,2802,260],{"class":116},[110,2804,1704],{"class":191},[110,2806,212],{"class":123},[110,2808,2637],{"class":179},[110,2810,355],{"class":123},[110,2812,2813],{"class":112,"line":274},[110,2814,271],{"class":123},[110,2816,2817,2819,2821,2823,2825,2827],{"class":112,"line":279},[110,2818,388],{"class":116},[110,2820,391],{"class":123},[110,2822,394],{"class":116},[110,2824,1704],{"class":123},[110,2826,1671],{"class":116},[110,2828,851],{"class":123},[110,2830,2831],{"class":112,"line":294},[110,2832,255],{"class":123},[110,2834,2835,2837,2839,2841,2843,2845,2847,2849,2851],{"class":112,"line":299},[110,2836,361],{"class":123},[110,2838,364],{"class":116},[110,2840,2713],{"class":179},[110,2842,370],{"class":116},[110,2844,1813],{"class":123},[110,2846,1816],{"class":191},[110,2848,1819],{"class":123},[110,2850,364],{"class":116},[110,2852,377],{"class":123},[110,2854,2855],{"class":112,"line":304},[110,2856,271],{"class":123},[110,2858,2859,2861,2863,2865,2867,2869],{"class":112,"line":315},[110,2860,388],{"class":116},[110,2862,391],{"class":123},[110,2864,394],{"class":116},[110,2866,2532],{"class":123},[110,2868,1671],{"class":116},[110,2870,851],{"class":123},[110,2872,2873],{"class":112,"line":320},[110,2874,255],{"class":123},[110,2876,2877,2879,2881,2883,2885,2887,2889,2891,2893],{"class":112,"line":326},[110,2878,361],{"class":123},[110,2880,364],{"class":116},[110,2882,2670],{"class":179},[110,2884,370],{"class":116},[110,2886,1813],{"class":123},[110,2888,1816],{"class":191},[110,2890,1819],{"class":123},[110,2892,364],{"class":116},[110,2894,377],{"class":123},[110,2896,2897],{"class":112,"line":331},[110,2898,271],{"class":123},[110,2900,2901],{"class":112,"line":358},[110,2902,201],{"emptyLinePlaceholder":200},[110,2904,2905,2907,2909],{"class":112,"line":380},[110,2906,282],{"class":116},[110,2908,248],{"class":247},[110,2910,195],{"class":123},[110,2912,2913],{"class":112,"line":385},[110,2914,137],{"class":123},[17,2916,2917],{},[49,2918,453],{},[101,2920,2923],{"className":2921,"code":2922,"language":459,"meta":106},[457],"runtime_error：运行时错误\n",[60,2924,2922],{"__ignoreMap":106},[17,2926,2927],{},[49,2928,2929],{},"總結：",[17,2931,2932],{},"子類異常寫在前面，父類異常寫在後面。",[473,2934],{},[13,2936,2937],{"id":2937},"異常在函數之間傳遞",[17,2939,2940],{},"異常可以跨函數傳遞。",[17,2942,2943],{},"如果當前函數沒有處理異常，異常會繼續向調用它的上層函數傳遞。",[17,2945,2946],{},[49,2947,166],{},[101,2949,2951],{"className":103,"code":2950,"language":105,"meta":106,"style":106},"#include \u003Ciostream>\n#include \u003Cstdexcept>\nusing namespace std;\n\nvoid func3()\n{\n    throw runtime_error(\"func3 中出现错误\");\n}\n\nvoid func2()\n{\n    func3();\n}\n\nvoid func1()\n{\n    func2();\n}\n\nint main()\n{\n    try\n    {\n        func1();\n    }\n    catch (const exception& e)\n    {\n        cout \u003C\u003C \"main 中捕获异常：\" \u003C\u003C e.what() \u003C\u003C endl;\n    }\n\n    return 0;\n}\n",[60,2952,2953,2959,2965,2975,2979,2988,2992,3005,3009,3013,3022,3026,3033,3037,3041,3050,3054,3061,3065,3069,3077,3081,3085,3089,3096,3100,3114,3118,3139,3143,3147,3155],{"__ignoreMap":106},[110,2954,2955,2957],{"class":112,"line":113},[110,2956,176],{"class":116},[110,2958,180],{"class":179},[110,2960,2961,2963],{"class":112,"line":120},[110,2962,176],{"class":116},[110,2964,1610],{"class":179},[110,2966,2967,2969,2971,2973],{"class":112,"line":127},[110,2968,185],{"class":116},[110,2970,188],{"class":116},[110,2972,192],{"class":191},[110,2974,195],{"class":123},[110,2976,2977],{"class":112,"line":134},[110,2978,201],{"emptyLinePlaceholder":200},[110,2980,2981,2983,2986],{"class":112,"line":140},[110,2982,536],{"class":116},[110,2984,2985],{"class":191}," func3",[110,2987,312],{"class":123},[110,2989,2990],{"class":112,"line":148},[110,2991,124],{"class":123},[110,2993,2994,2996,2998,3000,3003],{"class":112,"line":153},[110,2995,795],{"class":116},[110,2997,1704],{"class":191},[110,2999,212],{"class":123},[110,3001,3002],{"class":179},"\"func3 中出现错误\"",[110,3004,355],{"class":123},[110,3006,3007],{"class":112,"line":159},[110,3008,137],{"class":123},[110,3010,3011],{"class":112,"line":268},[110,3012,201],{"emptyLinePlaceholder":200},[110,3014,3015,3017,3020],{"class":112,"line":274},[110,3016,536],{"class":116},[110,3018,3019],{"class":191}," func2",[110,3021,312],{"class":123},[110,3023,3024],{"class":112,"line":279},[110,3025,124],{"class":123},[110,3027,3028,3031],{"class":112,"line":294},[110,3029,3030],{"class":191},"    func3",[110,3032,836],{"class":123},[110,3034,3035],{"class":112,"line":299},[110,3036,137],{"class":123},[110,3038,3039],{"class":112,"line":304},[110,3040,201],{"emptyLinePlaceholder":200},[110,3042,3043,3045,3048],{"class":112,"line":315},[110,3044,536],{"class":116},[110,3046,3047],{"class":191}," func1",[110,3049,312],{"class":123},[110,3051,3052],{"class":112,"line":320},[110,3053,124],{"class":123},[110,3055,3056,3059],{"class":112,"line":326},[110,3057,3058],{"class":191},"    func2",[110,3060,836],{"class":123},[110,3062,3063],{"class":112,"line":331},[110,3064,137],{"class":123},[110,3066,3067],{"class":112,"line":358},[110,3068,201],{"emptyLinePlaceholder":200},[110,3070,3071,3073,3075],{"class":112,"line":380},[110,3072,206],{"class":116},[110,3074,309],{"class":191},[110,3076,312],{"class":123},[110,3078,3079],{"class":112,"line":385},[110,3080,124],{"class":123},[110,3082,3083],{"class":112,"line":403},[110,3084,323],{"class":116},[110,3086,3087],{"class":112,"line":408},[110,3088,255],{"class":123},[110,3090,3091,3094],{"class":112,"line":427},[110,3092,3093],{"class":191},"        func1",[110,3095,836],{"class":123},[110,3097,3098],{"class":112,"line":432},[110,3099,271],{"class":123},[110,3101,3102,3104,3106,3108,3110,3112],{"class":112,"line":437},[110,3103,388],{"class":116},[110,3105,391],{"class":123},[110,3107,394],{"class":116},[110,3109,2532],{"class":123},[110,3111,1671],{"class":116},[110,3113,851],{"class":123},[110,3115,3116],{"class":112,"line":446},[110,3117,255],{"class":123},[110,3119,3120,3122,3124,3127,3129,3131,3133,3135,3137],{"class":112,"line":1135},[110,3121,361],{"class":123},[110,3123,364],{"class":116},[110,3125,3126],{"class":179}," \"main 中捕获异常：\"",[110,3128,370],{"class":116},[110,3130,1813],{"class":123},[110,3132,1816],{"class":191},[110,3134,1819],{"class":123},[110,3136,364],{"class":116},[110,3138,377],{"class":123},[110,3140,3141],{"class":112,"line":1153},[110,3142,271],{"class":123},[110,3144,3145],{"class":112,"line":1158},[110,3146,201],{"emptyLinePlaceholder":200},[110,3148,3149,3151,3153],{"class":112,"line":1170},[110,3150,282],{"class":116},[110,3152,248],{"class":247},[110,3154,195],{"class":123},[110,3156,3157],{"class":112,"line":1175},[110,3158,137],{"class":123},[17,3160,3161],{},[49,3162,453],{},[101,3164,3167],{"className":3165,"code":3166,"language":459,"meta":106},[457],"main 中捕获异常：func3 中出现错误\n",[60,3168,3166],{"__ignoreMap":106},[17,3170,3171,3174,3175,3178,3179,3182,3183,3186],{},[60,3172,3173],{},"func3()"," 拋出異常後，",[60,3176,3177],{},"func2()"," 和 ",[60,3180,3181],{},"func1()"," 都沒有處理，最後異常傳遞到 ",[60,3184,3185],{},"main()"," 中被捕獲。",[473,3188],{},[13,3190,3191],{"id":3191},"重新拋出異常",[17,3193,3194],{},"有時候當前函數捕獲異常後，只做一部分處理，然後繼續把異常交給上層處理。",[17,3196,3197],{},"可以使用：",[101,3199,3201],{"className":103,"code":3200,"language":105,"meta":106,"style":106},"throw;\n",[60,3202,3203],{"__ignoreMap":106},[110,3204,3205,3207],{"class":112,"line":113},[110,3206,72],{"class":116},[110,3208,195],{"class":123},[17,3210,3211],{},"重新拋出當前異常。",[17,3213,3214],{},[49,3215,166],{},[101,3217,3219],{"className":103,"code":3218,"language":105,"meta":106,"style":106},"#include \u003Ciostream>\n#include \u003Cstdexcept>\nusing namespace std;\n\nvoid readConfig()\n{\n    try\n    {\n        throw runtime_error(\"配置文件读取失败\");\n    }\n    catch (const exception& e)\n    {\n        cout \u003C\u003C \"readConfig 中记录错误：\" \u003C\u003C e.what() \u003C\u003C endl;\n\n        \u002F\u002F 重新抛出异常\n        throw;\n    }\n}\n\nint main()\n{\n    try\n    {\n        readConfig();\n    }\n    catch (const exception& e)\n    {\n        cout \u003C\u003C \"main 中最终处理：\" \u003C\u003C e.what() \u003C\u003C endl;\n    }\n\n    return 0;\n}\n",[60,3220,3221,3227,3233,3243,3247,3256,3260,3264,3268,3281,3285,3299,3303,3324,3328,3333,3339,3343,3347,3351,3359,3363,3367,3371,3378,3382,3396,3400,3421,3425,3429,3437],{"__ignoreMap":106},[110,3222,3223,3225],{"class":112,"line":113},[110,3224,176],{"class":116},[110,3226,180],{"class":179},[110,3228,3229,3231],{"class":112,"line":120},[110,3230,176],{"class":116},[110,3232,1610],{"class":179},[110,3234,3235,3237,3239,3241],{"class":112,"line":127},[110,3236,185],{"class":116},[110,3238,188],{"class":116},[110,3240,192],{"class":191},[110,3242,195],{"class":123},[110,3244,3245],{"class":112,"line":134},[110,3246,201],{"emptyLinePlaceholder":200},[110,3248,3249,3251,3254],{"class":112,"line":140},[110,3250,536],{"class":116},[110,3252,3253],{"class":191}," readConfig",[110,3255,312],{"class":123},[110,3257,3258],{"class":112,"line":148},[110,3259,124],{"class":123},[110,3261,3262],{"class":112,"line":153},[110,3263,323],{"class":116},[110,3265,3266],{"class":112,"line":159},[110,3267,255],{"class":123},[110,3269,3270,3272,3274,3276,3279],{"class":112,"line":268},[110,3271,260],{"class":116},[110,3273,1704],{"class":191},[110,3275,212],{"class":123},[110,3277,3278],{"class":179},"\"配置文件读取失败\"",[110,3280,355],{"class":123},[110,3282,3283],{"class":112,"line":274},[110,3284,271],{"class":123},[110,3286,3287,3289,3291,3293,3295,3297],{"class":112,"line":279},[110,3288,388],{"class":116},[110,3290,391],{"class":123},[110,3292,394],{"class":116},[110,3294,2532],{"class":123},[110,3296,1671],{"class":116},[110,3298,851],{"class":123},[110,3300,3301],{"class":112,"line":294},[110,3302,255],{"class":123},[110,3304,3305,3307,3309,3312,3314,3316,3318,3320,3322],{"class":112,"line":299},[110,3306,361],{"class":123},[110,3308,364],{"class":116},[110,3310,3311],{"class":179}," \"readConfig 中记录错误：\"",[110,3313,370],{"class":116},[110,3315,1813],{"class":123},[110,3317,1816],{"class":191},[110,3319,1819],{"class":123},[110,3321,364],{"class":116},[110,3323,377],{"class":123},[110,3325,3326],{"class":112,"line":304},[110,3327,201],{"emptyLinePlaceholder":200},[110,3329,3330],{"class":112,"line":315},[110,3331,3332],{"class":130},"        \u002F\u002F 重新抛出异常\n",[110,3334,3335,3337],{"class":112,"line":320},[110,3336,260],{"class":116},[110,3338,195],{"class":123},[110,3340,3341],{"class":112,"line":326},[110,3342,271],{"class":123},[110,3344,3345],{"class":112,"line":331},[110,3346,137],{"class":123},[110,3348,3349],{"class":112,"line":358},[110,3350,201],{"emptyLinePlaceholder":200},[110,3352,3353,3355,3357],{"class":112,"line":380},[110,3354,206],{"class":116},[110,3356,309],{"class":191},[110,3358,312],{"class":123},[110,3360,3361],{"class":112,"line":385},[110,3362,124],{"class":123},[110,3364,3365],{"class":112,"line":403},[110,3366,323],{"class":116},[110,3368,3369],{"class":112,"line":408},[110,3370,255],{"class":123},[110,3372,3373,3376],{"class":112,"line":427},[110,3374,3375],{"class":191},"        readConfig",[110,3377,836],{"class":123},[110,3379,3380],{"class":112,"line":432},[110,3381,271],{"class":123},[110,3383,3384,3386,3388,3390,3392,3394],{"class":112,"line":437},[110,3385,388],{"class":116},[110,3387,391],{"class":123},[110,3389,394],{"class":116},[110,3391,2532],{"class":123},[110,3393,1671],{"class":116},[110,3395,851],{"class":123},[110,3397,3398],{"class":112,"line":446},[110,3399,255],{"class":123},[110,3401,3402,3404,3406,3409,3411,3413,3415,3417,3419],{"class":112,"line":1135},[110,3403,361],{"class":123},[110,3405,364],{"class":116},[110,3407,3408],{"class":179}," \"main 中最终处理：\"",[110,3410,370],{"class":116},[110,3412,1813],{"class":123},[110,3414,1816],{"class":191},[110,3416,1819],{"class":123},[110,3418,364],{"class":116},[110,3420,377],{"class":123},[110,3422,3423],{"class":112,"line":1153},[110,3424,271],{"class":123},[110,3426,3427],{"class":112,"line":1158},[110,3428,201],{"emptyLinePlaceholder":200},[110,3430,3431,3433,3435],{"class":112,"line":1170},[110,3432,282],{"class":116},[110,3434,248],{"class":247},[110,3436,195],{"class":123},[110,3438,3439],{"class":112,"line":1175},[110,3440,137],{"class":123},[17,3442,3443],{},[49,3444,453],{},[101,3446,3449],{"className":3447,"code":3448,"language":459,"meta":106},[457],"readConfig 中记录错误：配置文件读取失败\nmain 中最终处理：配置文件读取失败\n",[60,3450,3448],{"__ignoreMap":106},[17,3452,3453,3454,3457,3458,3461,3462,3464],{},"異常先在 ",[60,3455,3456],{},"readConfig()"," 中被捕獲一次，然後通過 ",[60,3459,3460],{},"throw;"," 重新拋出，最後在 ",[60,3463,3185],{}," 中再次被捕獲。",[473,3466],{},[13,3468,3469],{"id":3469},"自定義異常類",[17,3471,3472],{},"標準異常類型已經能解決大多數問題。",[17,3474,3475],{},"如果希望區分更加具體的錯誤，也可以自定義異常類。",[17,3477,3478,3479,2374],{},"自定義異常類通常繼承自 ",[60,3480,1575],{},[17,3482,3483],{},[49,3484,166],{},[101,3486,3488],{"className":103,"code":3487,"language":105,"meta":106,"style":106},"#include \u003Ciostream>\n#include \u003Cstdexcept>\nusing namespace std;\n\nclass SerialException : public runtime_error\n{\npublic:\n    SerialException(const string& msg)\n        : runtime_error(msg)\n    {\n    }\n};\n\nvoid openSerial(const string& device)\n{\n    if (device.empty())\n    {\n        throw SerialException(\"串口设备名为空\");\n    }\n\n    cout \u003C\u003C \"打开串口：\" \u003C\u003C device \u003C\u003C endl;\n}\n\nint main()\n{\n    try\n    {\n        openSerial(\"\");\n    }\n    catch (const SerialException& e)\n    {\n        cout \u003C\u003C \"串口异常：\" \u003C\u003C e.what() \u003C\u003C endl;\n    }\n    catch (const exception& e)\n    {\n        cout \u003C\u003C \"其他异常：\" \u003C\u003C e.what() \u003C\u003C endl;\n    }\n\n    return 0;\n}\n",[60,3489,3490,3496,3502,3512,3516,3533,3537,3542,3560,3570,3574,3578,3582,3586,3605,3609,3619,3623,3636,3640,3644,3660,3664,3668,3676,3680,3684,3688,3699,3703,3717,3721,3742,3746,3760,3764,3785,3789,3793,3801],{"__ignoreMap":106},[110,3491,3492,3494],{"class":112,"line":113},[110,3493,176],{"class":116},[110,3495,180],{"class":179},[110,3497,3498,3500],{"class":112,"line":120},[110,3499,176],{"class":116},[110,3501,1610],{"class":179},[110,3503,3504,3506,3508,3510],{"class":112,"line":127},[110,3505,185],{"class":116},[110,3507,188],{"class":116},[110,3509,192],{"class":191},[110,3511,195],{"class":123},[110,3513,3514],{"class":112,"line":134},[110,3515,201],{"emptyLinePlaceholder":200},[110,3517,3518,3521,3524,3527,3530],{"class":112,"line":140},[110,3519,3520],{"class":116},"class",[110,3522,3523],{"class":191}," SerialException",[110,3525,3526],{"class":123}," : ",[110,3528,3529],{"class":116},"public",[110,3531,3532],{"class":191}," runtime_error\n",[110,3534,3535],{"class":112,"line":148},[110,3536,124],{"class":123},[110,3538,3539],{"class":112,"line":153},[110,3540,3541],{"class":116},"public:\n",[110,3543,3544,3547,3549,3551,3553,3555,3558],{"class":112,"line":159},[110,3545,3546],{"class":191},"    SerialException",[110,3548,212],{"class":123},[110,3550,394],{"class":116},[110,3552,1668],{"class":191},[110,3554,1671],{"class":116},[110,3556,3557],{"class":217}," msg",[110,3559,229],{"class":123},[110,3561,3562,3565,3567],{"class":112,"line":268},[110,3563,3564],{"class":123},"        : ",[110,3566,1614],{"class":191},[110,3568,3569],{"class":123},"(msg)\n",[110,3571,3572],{"class":112,"line":274},[110,3573,255],{"class":123},[110,3575,3576],{"class":112,"line":279},[110,3577,271],{"class":123},[110,3579,3580],{"class":112,"line":294},[110,3581,2204],{"class":123},[110,3583,3584],{"class":112,"line":299},[110,3585,201],{"emptyLinePlaceholder":200},[110,3587,3588,3590,3593,3595,3597,3599,3601,3603],{"class":112,"line":304},[110,3589,536],{"class":116},[110,3591,3592],{"class":191}," openSerial",[110,3594,212],{"class":123},[110,3596,394],{"class":116},[110,3598,1668],{"class":191},[110,3600,1671],{"class":116},[110,3602,1674],{"class":217},[110,3604,229],{"class":123},[110,3606,3607],{"class":112,"line":315},[110,3608,124],{"class":123},[110,3610,3611,3613,3615,3617],{"class":112,"line":320},[110,3612,238],{"class":116},[110,3614,1687],{"class":123},[110,3616,1690],{"class":191},[110,3618,1693],{"class":123},[110,3620,3621],{"class":112,"line":326},[110,3622,255],{"class":123},[110,3624,3625,3627,3629,3631,3634],{"class":112,"line":331},[110,3626,260],{"class":116},[110,3628,3523],{"class":191},[110,3630,212],{"class":123},[110,3632,3633],{"class":179},"\"串口设备名为空\"",[110,3635,355],{"class":123},[110,3637,3638],{"class":112,"line":358},[110,3639,271],{"class":123},[110,3641,3642],{"class":112,"line":380},[110,3643,201],{"emptyLinePlaceholder":200},[110,3645,3646,3648,3650,3652,3654,3656,3658],{"class":112,"line":385},[110,3647,592],{"class":123},[110,3649,364],{"class":116},[110,3651,1728],{"class":179},[110,3653,370],{"class":116},[110,3655,1733],{"class":123},[110,3657,364],{"class":116},[110,3659,377],{"class":123},[110,3661,3662],{"class":112,"line":403},[110,3663,137],{"class":123},[110,3665,3666],{"class":112,"line":408},[110,3667,201],{"emptyLinePlaceholder":200},[110,3669,3670,3672,3674],{"class":112,"line":427},[110,3671,206],{"class":116},[110,3673,309],{"class":191},[110,3675,312],{"class":123},[110,3677,3678],{"class":112,"line":432},[110,3679,124],{"class":123},[110,3681,3682],{"class":112,"line":437},[110,3683,323],{"class":116},[110,3685,3686],{"class":112,"line":446},[110,3687,255],{"class":123},[110,3689,3690,3693,3695,3697],{"class":112,"line":1135},[110,3691,3692],{"class":191},"        openSerial",[110,3694,212],{"class":123},[110,3696,1775],{"class":179},[110,3698,355],{"class":123},[110,3700,3701],{"class":112,"line":1153},[110,3702,271],{"class":123},[110,3704,3705,3707,3709,3711,3713,3715],{"class":112,"line":1158},[110,3706,388],{"class":116},[110,3708,391],{"class":123},[110,3710,394],{"class":116},[110,3712,3523],{"class":123},[110,3714,1671],{"class":116},[110,3716,851],{"class":123},[110,3718,3719],{"class":112,"line":1170},[110,3720,255],{"class":123},[110,3722,3723,3725,3727,3730,3732,3734,3736,3738,3740],{"class":112,"line":1175},[110,3724,361],{"class":123},[110,3726,364],{"class":116},[110,3728,3729],{"class":179}," \"串口异常：\"",[110,3731,370],{"class":116},[110,3733,1813],{"class":123},[110,3735,1816],{"class":191},[110,3737,1819],{"class":123},[110,3739,364],{"class":116},[110,3741,377],{"class":123},[110,3743,3744],{"class":112,"line":1193},[110,3745,271],{"class":123},[110,3747,3748,3750,3752,3754,3756,3758],{"class":112,"line":1198},[110,3749,388],{"class":116},[110,3751,391],{"class":123},[110,3753,394],{"class":116},[110,3755,2532],{"class":123},[110,3757,1671],{"class":116},[110,3759,851],{"class":123},[110,3761,3762],{"class":112,"line":1211},[110,3763,255],{"class":123},[110,3765,3766,3768,3770,3773,3775,3777,3779,3781,3783],{"class":112,"line":1216},[110,3767,361],{"class":123},[110,3769,364],{"class":116},[110,3771,3772],{"class":179}," \"其他异常：\"",[110,3774,370],{"class":116},[110,3776,1813],{"class":123},[110,3778,1816],{"class":191},[110,3780,1819],{"class":123},[110,3782,364],{"class":116},[110,3784,377],{"class":123},[110,3786,3787],{"class":112,"line":1234},[110,3788,271],{"class":123},[110,3790,3791],{"class":112,"line":1239},[110,3792,201],{"emptyLinePlaceholder":200},[110,3794,3795,3797,3799],{"class":112,"line":1244},[110,3796,282],{"class":116},[110,3798,248],{"class":247},[110,3800,195],{"class":123},[110,3802,3803],{"class":112,"line":1253},[110,3804,137],{"class":123},[17,3806,3807],{},[49,3808,453],{},[101,3810,3813],{"className":3811,"code":3812,"language":459,"meta":106},[457],"串口异常：串口设备名为空\n",[60,3814,3812],{"__ignoreMap":106},[17,3816,3817,3818,3821],{},"當串口設備名為空時，會拋出 ",[60,3819,3820],{},"SerialException"," 類型異常。",[17,3823,3824],{},[49,3825,1465],{},[17,3827,3828],{},"普通學習階段不需要大量自定義異常類，標準異常類已經夠用。",[473,3830],{},[13,3832,3833],{"id":3833},"異常與構造函數",[17,3835,3836],{},"構造函數沒有返回值。",[17,3838,3839],{},"如果對象初始化失敗，可以在構造函數中拋出異常。",[17,3841,3842],{},[49,3843,166],{},[101,3845,3847],{"className":103,"code":3846,"language":105,"meta":106,"style":106},"#include \u003Ciostream>\n#include \u003Cstdexcept>\nusing namespace std;\n\nclass SerialPort\n{\npublic:\n    SerialPort(const string& device)\n    {\n        if (device.empty())\n        {\n            throw runtime_error(\"串口初始化失败：设备名为空\");\n        }\n\n        m_Device = device;\n        cout \u003C\u003C \"串口初始化成功：\" \u003C\u003C m_Device \u003C\u003C endl;\n    }\n\nprivate:\n    string m_Device;\n};\n\nint main()\n{\n    try\n    {\n        SerialPort port(\"\");\n    }\n    catch (const exception& e)\n    {\n        cout \u003C\u003C \"创建对象失败：\" \u003C\u003C e.what() \u003C\u003C endl;\n    }\n\n    return 0;\n}\n",[60,3848,3849,3855,3861,3871,3875,3882,3886,3890,3907,3911,3922,3927,3941,3946,3950,3960,3978,3982,3986,3991,3996,4000,4004,4012,4016,4020,4024,4038,4042,4056,4060,4081,4085,4089,4097],{"__ignoreMap":106},[110,3850,3851,3853],{"class":112,"line":113},[110,3852,176],{"class":116},[110,3854,180],{"class":179},[110,3856,3857,3859],{"class":112,"line":120},[110,3858,176],{"class":116},[110,3860,1610],{"class":179},[110,3862,3863,3865,3867,3869],{"class":112,"line":127},[110,3864,185],{"class":116},[110,3866,188],{"class":116},[110,3868,192],{"class":191},[110,3870,195],{"class":123},[110,3872,3873],{"class":112,"line":134},[110,3874,201],{"emptyLinePlaceholder":200},[110,3876,3877,3879],{"class":112,"line":140},[110,3878,3520],{"class":116},[110,3880,3881],{"class":191}," SerialPort\n",[110,3883,3884],{"class":112,"line":148},[110,3885,124],{"class":123},[110,3887,3888],{"class":112,"line":153},[110,3889,3541],{"class":116},[110,3891,3892,3895,3897,3899,3901,3903,3905],{"class":112,"line":159},[110,3893,3894],{"class":191},"    SerialPort",[110,3896,212],{"class":123},[110,3898,394],{"class":116},[110,3900,1668],{"class":191},[110,3902,1671],{"class":116},[110,3904,1674],{"class":217},[110,3906,229],{"class":123},[110,3908,3909],{"class":112,"line":268},[110,3910,255],{"class":123},[110,3912,3913,3916,3918,3920],{"class":112,"line":274},[110,3914,3915],{"class":116},"        if",[110,3917,1687],{"class":123},[110,3919,1690],{"class":191},[110,3921,1693],{"class":123},[110,3923,3924],{"class":112,"line":279},[110,3925,3926],{"class":123},"        {\n",[110,3928,3929,3932,3934,3936,3939],{"class":112,"line":294},[110,3930,3931],{"class":116},"            throw",[110,3933,1704],{"class":191},[110,3935,212],{"class":123},[110,3937,3938],{"class":179},"\"串口初始化失败：设备名为空\"",[110,3940,355],{"class":123},[110,3942,3943],{"class":112,"line":299},[110,3944,3945],{"class":123},"        }\n",[110,3947,3948],{"class":112,"line":304},[110,3949,201],{"emptyLinePlaceholder":200},[110,3951,3952,3955,3957],{"class":112,"line":315},[110,3953,3954],{"class":123},"        m_Device ",[110,3956,340],{"class":116},[110,3958,3959],{"class":123}," device;\n",[110,3961,3962,3964,3966,3969,3971,3974,3976],{"class":112,"line":320},[110,3963,361],{"class":123},[110,3965,364],{"class":116},[110,3967,3968],{"class":179}," \"串口初始化成功：\"",[110,3970,370],{"class":116},[110,3972,3973],{"class":123}," m_Device ",[110,3975,364],{"class":116},[110,3977,377],{"class":123},[110,3979,3980],{"class":112,"line":326},[110,3981,271],{"class":123},[110,3983,3984],{"class":112,"line":331},[110,3985,201],{"emptyLinePlaceholder":200},[110,3987,3988],{"class":112,"line":358},[110,3989,3990],{"class":116},"private:\n",[110,3992,3993],{"class":112,"line":380},[110,3994,3995],{"class":123},"    string m_Device;\n",[110,3997,3998],{"class":112,"line":385},[110,3999,2204],{"class":123},[110,4001,4002],{"class":112,"line":403},[110,4003,201],{"emptyLinePlaceholder":200},[110,4005,4006,4008,4010],{"class":112,"line":408},[110,4007,206],{"class":116},[110,4009,309],{"class":191},[110,4011,312],{"class":123},[110,4013,4014],{"class":112,"line":427},[110,4015,124],{"class":123},[110,4017,4018],{"class":112,"line":432},[110,4019,323],{"class":116},[110,4021,4022],{"class":112,"line":437},[110,4023,255],{"class":123},[110,4025,4026,4029,4032,4034,4036],{"class":112,"line":446},[110,4027,4028],{"class":123},"        SerialPort ",[110,4030,4031],{"class":191},"port",[110,4033,212],{"class":123},[110,4035,1775],{"class":179},[110,4037,355],{"class":123},[110,4039,4040],{"class":112,"line":1135},[110,4041,271],{"class":123},[110,4043,4044,4046,4048,4050,4052,4054],{"class":112,"line":1153},[110,4045,388],{"class":116},[110,4047,391],{"class":123},[110,4049,394],{"class":116},[110,4051,2532],{"class":123},[110,4053,1671],{"class":116},[110,4055,851],{"class":123},[110,4057,4058],{"class":112,"line":1158},[110,4059,255],{"class":123},[110,4061,4062,4064,4066,4069,4071,4073,4075,4077,4079],{"class":112,"line":1170},[110,4063,361],{"class":123},[110,4065,364],{"class":116},[110,4067,4068],{"class":179}," \"创建对象失败：\"",[110,4070,370],{"class":116},[110,4072,1813],{"class":123},[110,4074,1816],{"class":191},[110,4076,1819],{"class":123},[110,4078,364],{"class":116},[110,4080,377],{"class":123},[110,4082,4083],{"class":112,"line":1175},[110,4084,271],{"class":123},[110,4086,4087],{"class":112,"line":1193},[110,4088,201],{"emptyLinePlaceholder":200},[110,4090,4091,4093,4095],{"class":112,"line":1198},[110,4092,282],{"class":116},[110,4094,248],{"class":247},[110,4096,195],{"class":123},[110,4098,4099],{"class":112,"line":1211},[110,4100,137],{"class":123},[17,4102,4103],{},[49,4104,453],{},[101,4106,4109],{"className":4107,"code":4108,"language":459,"meta":106},[457],"创建对象失败：串口初始化失败：设备名为空\n",[60,4110,4108],{"__ignoreMap":106},[17,4112,4113,4114,471],{},"如果構造函數拋出異常，對象創建失敗，程序會跳轉到 ",[60,4115,67],{},[17,4117,4118],{},[49,4119,4120],{},"應用場景：",[17,4122,4123],{},"例如：",[21,4125,4126,4129,4132,4135],{},[24,4127,4128],{},"打開文件失敗",[24,4130,4131],{},"打開串口失敗",[24,4133,4134],{},"讀取配置失敗",[24,4136,4137],{},"初始化網絡連接失敗",[17,4139,4140],{},"這些情況可以考慮在構造函數中拋出異常。",[473,4142],{},[13,4144,4145],{"id":4145},"異常與析構函數",[17,4147,4148],{},"析構函數中一般不要拋出異常。",[17,4150,4151],{},"因為對象銷燬時如果再次拋出異常，可能導致程序直接終止。",[17,4153,4154],{},[49,4155,4156],{},"錯誤示例：",[101,4158,4160],{"className":103,"code":4159,"language":105,"meta":106,"style":106},"class Test\n{\npublic:\n    ~Test()\n    {\n        \u002F\u002F 不推荐在析构函数中抛异常\n        \u002F\u002F throw runtime_error(\"析构失败\");\n    }\n};\n",[60,4161,4162,4169,4173,4177,4184,4188,4193,4198,4202],{"__ignoreMap":106},[110,4163,4164,4166],{"class":112,"line":113},[110,4165,3520],{"class":116},[110,4167,4168],{"class":191}," Test\n",[110,4170,4171],{"class":112,"line":120},[110,4172,124],{"class":123},[110,4174,4175],{"class":112,"line":127},[110,4176,3541],{"class":116},[110,4178,4179,4182],{"class":112,"line":134},[110,4180,4181],{"class":191},"    ~Test",[110,4183,312],{"class":123},[110,4185,4186],{"class":112,"line":140},[110,4187,255],{"class":123},[110,4189,4190],{"class":112,"line":148},[110,4191,4192],{"class":130},"        \u002F\u002F 不推荐在析构函数中抛异常\n",[110,4194,4195],{"class":112,"line":153},[110,4196,4197],{"class":130},"        \u002F\u002F throw runtime_error(\"析构失败\");\n",[110,4199,4200],{"class":112,"line":159},[110,4201,271],{"class":123},[110,4203,4204],{"class":112,"line":268},[110,4205,2204],{"class":123},[17,4207,4208],{},[49,4209,4210],{},"推薦做法：",[17,4212,4213],{},"析構函數中如果釋放資源失敗，通常只記錄錯誤，不繼續拋出異常。",[101,4215,4217],{"className":103,"code":4216,"language":105,"meta":106,"style":106},"#include \u003Ciostream>\nusing namespace std;\n\nclass File\n{\npublic:\n    ~File()\n    {\n        \u002F\u002F 析构函数中尽量不要 throw\n        cout \u003C\u003C \"释放文件资源\" \u003C\u003C endl;\n    }\n};\n",[60,4218,4219,4225,4235,4239,4246,4250,4254,4261,4265,4270,4283,4287],{"__ignoreMap":106},[110,4220,4221,4223],{"class":112,"line":113},[110,4222,176],{"class":116},[110,4224,180],{"class":179},[110,4226,4227,4229,4231,4233],{"class":112,"line":120},[110,4228,185],{"class":116},[110,4230,188],{"class":116},[110,4232,192],{"class":191},[110,4234,195],{"class":123},[110,4236,4237],{"class":112,"line":127},[110,4238,201],{"emptyLinePlaceholder":200},[110,4240,4241,4243],{"class":112,"line":134},[110,4242,3520],{"class":116},[110,4244,4245],{"class":191}," File\n",[110,4247,4248],{"class":112,"line":140},[110,4249,124],{"class":123},[110,4251,4252],{"class":112,"line":148},[110,4253,3541],{"class":116},[110,4255,4256,4259],{"class":112,"line":153},[110,4257,4258],{"class":191},"    ~File",[110,4260,312],{"class":123},[110,4262,4263],{"class":112,"line":159},[110,4264,255],{"class":123},[110,4266,4267],{"class":112,"line":268},[110,4268,4269],{"class":130},"        \u002F\u002F 析构函数中尽量不要 throw\n",[110,4271,4272,4274,4276,4279,4281],{"class":112,"line":274},[110,4273,361],{"class":123},[110,4275,364],{"class":116},[110,4277,4278],{"class":179}," \"释放文件资源\"",[110,4280,370],{"class":116},[110,4282,377],{"class":123},[110,4284,4285],{"class":112,"line":279},[110,4286,271],{"class":123},[110,4288,4289],{"class":112,"line":294},[110,4290,2204],{"class":123},[17,4292,4293],{},[49,4294,2929],{},[17,4296,4297],{},"析構函數中不要隨便拋異常。",[473,4299],{},[13,4301,4303],{"id":4302},"異常與-raii","異常與 RAII",[17,4305,4306],{},"RAII 是現代 C++ 中非常重要的思想。",[17,4308,4309],{},"RAII 的核心思想是：",[4311,4312,4313],"blockquote",{},[17,4314,4315],{},"資源在對象構造時獲取，在對象析構時釋放。",[17,4317,4318],{},"常見資源包括：",[21,4320,4321,4324,4327,4330,4333,4336],{},[24,4322,4323],{},"堆內存",[24,4325,4326],{},"文件",[24,4328,4329],{},"串口",[24,4331,4332],{},"網絡連接",[24,4334,4335],{},"鎖",[24,4337,4338],{},"句柄",[17,4340,4341],{},"異常發生時，已經創建成功的局部對象會自動調用析構函數。",[1612,4343,4344],{"id":4344},"普通指針的問題",[17,4346,4347],{},[49,4348,166],{},[101,4350,4352],{"className":103,"code":4351,"language":105,"meta":106,"style":106},"#include \u003Ciostream>\n#include \u003Cstdexcept>\nusing namespace std;\n\nvoid test()\n{\n    int* p = new int[100];\n\n    throw runtime_error(\"中途出现异常\");\n\n    delete[] p;\n}\n\nint main()\n{\n    try\n    {\n        test();\n    }\n    catch (const exception& e)\n    {\n        cout \u003C\u003C e.what() \u003C\u003C endl;\n    }\n\n    return 0;\n}\n",[60,4353,4354,4360,4366,4376,4380,4388,4392,4417,4421,4434,4438,4446,4450,4454,4462,4466,4470,4474,4480,4484,4498,4502,4518,4522,4526,4534],{"__ignoreMap":106},[110,4355,4356,4358],{"class":112,"line":113},[110,4357,176],{"class":116},[110,4359,180],{"class":179},[110,4361,4362,4364],{"class":112,"line":120},[110,4363,176],{"class":116},[110,4365,1610],{"class":179},[110,4367,4368,4370,4372,4374],{"class":112,"line":127},[110,4369,185],{"class":116},[110,4371,188],{"class":116},[110,4373,192],{"class":191},[110,4375,195],{"class":123},[110,4377,4378],{"class":112,"line":134},[110,4379,201],{"emptyLinePlaceholder":200},[110,4381,4382,4384,4386],{"class":112,"line":140},[110,4383,536],{"class":116},[110,4385,784],{"class":191},[110,4387,312],{"class":123},[110,4389,4390],{"class":112,"line":148},[110,4391,124],{"class":123},[110,4393,4394,4397,4400,4402,4405,4408,4411,4414],{"class":112,"line":153},[110,4395,4396],{"class":116},"    int*",[110,4398,4399],{"class":123}," p ",[110,4401,340],{"class":116},[110,4403,4404],{"class":116}," new",[110,4406,4407],{"class":116}," int",[110,4409,4410],{"class":123},"[",[110,4412,4413],{"class":247},"100",[110,4415,4416],{"class":123},"];\n",[110,4418,4419],{"class":112,"line":159},[110,4420,201],{"emptyLinePlaceholder":200},[110,4422,4423,4425,4427,4429,4432],{"class":112,"line":268},[110,4424,795],{"class":116},[110,4426,1704],{"class":191},[110,4428,212],{"class":123},[110,4430,4431],{"class":179},"\"中途出现异常\"",[110,4433,355],{"class":123},[110,4435,4436],{"class":112,"line":274},[110,4437,201],{"emptyLinePlaceholder":200},[110,4439,4440,4443],{"class":112,"line":279},[110,4441,4442],{"class":116},"    delete[]",[110,4444,4445],{"class":123}," p;\n",[110,4447,4448],{"class":112,"line":294},[110,4449,137],{"class":123},[110,4451,4452],{"class":112,"line":299},[110,4453,201],{"emptyLinePlaceholder":200},[110,4455,4456,4458,4460],{"class":112,"line":304},[110,4457,206],{"class":116},[110,4459,309],{"class":191},[110,4461,312],{"class":123},[110,4463,4464],{"class":112,"line":315},[110,4465,124],{"class":123},[110,4467,4468],{"class":112,"line":320},[110,4469,323],{"class":116},[110,4471,4472],{"class":112,"line":326},[110,4473,255],{"class":123},[110,4475,4476,4478],{"class":112,"line":331},[110,4477,833],{"class":191},[110,4479,836],{"class":123},[110,4481,4482],{"class":112,"line":358},[110,4483,271],{"class":123},[110,4485,4486,4488,4490,4492,4494,4496],{"class":112,"line":380},[110,4487,388],{"class":116},[110,4489,391],{"class":123},[110,4491,394],{"class":116},[110,4493,2532],{"class":123},[110,4495,1671],{"class":116},[110,4497,851],{"class":123},[110,4499,4500],{"class":112,"line":385},[110,4501,255],{"class":123},[110,4503,4504,4506,4508,4510,4512,4514,4516],{"class":112,"line":403},[110,4505,361],{"class":123},[110,4507,364],{"class":116},[110,4509,1813],{"class":123},[110,4511,1816],{"class":191},[110,4513,1819],{"class":123},[110,4515,364],{"class":116},[110,4517,377],{"class":123},[110,4519,4520],{"class":112,"line":408},[110,4521,271],{"class":123},[110,4523,4524],{"class":112,"line":427},[110,4525,201],{"emptyLinePlaceholder":200},[110,4527,4528,4530,4532],{"class":112,"line":432},[110,4529,282],{"class":116},[110,4531,248],{"class":247},[110,4533,195],{"class":123},[110,4535,4536],{"class":112,"line":437},[110,4537,137],{"class":123},[17,4539,4540],{},[49,4541,453],{},[101,4543,4546],{"className":4544,"code":4545,"language":459,"meta":106},[457],"中途出现异常\n",[60,4547,4545],{"__ignoreMap":106},[17,4549,4550,4552,4553,4556],{},[60,4551,72],{}," 之後，",[60,4554,4555],{},"delete[] p;"," 不會執行，可能造成內存洩漏。",[1612,4558,4560],{"id":4559},"使用-vector-避免資源洩漏","使用 vector 避免資源洩漏",[17,4562,4563],{},[49,4564,166],{},[101,4566,4568],{"className":103,"code":4567,"language":105,"meta":106,"style":106},"#include \u003Ciostream>\n#include \u003Cvector>\n#include \u003Cstdexcept>\nusing namespace std;\n\nvoid test()\n{\n    vector\u003Cint> nums(100);\n\n    throw runtime_error(\"中途出现异常\");\n\n    cout \u003C\u003C nums.size() \u003C\u003C endl;\n}\n\nint main()\n{\n    try\n    {\n        test();\n    }\n    catch (const exception& e)\n    {\n        cout \u003C\u003C e.what() \u003C\u003C endl;\n    }\n\n    return 0;\n}\n",[60,4569,4570,4576,4582,4588,4598,4602,4610,4614,4629,4633,4645,4649,4666,4670,4674,4682,4686,4690,4694,4700,4704,4718,4722,4738,4742,4746,4754],{"__ignoreMap":106},[110,4571,4572,4574],{"class":112,"line":113},[110,4573,176],{"class":116},[110,4575,180],{"class":179},[110,4577,4578,4580],{"class":112,"line":120},[110,4579,176],{"class":116},[110,4581,2141],{"class":179},[110,4583,4584,4586],{"class":112,"line":127},[110,4585,176],{"class":116},[110,4587,1610],{"class":179},[110,4589,4590,4592,4594,4596],{"class":112,"line":134},[110,4591,185],{"class":116},[110,4593,188],{"class":116},[110,4595,192],{"class":191},[110,4597,195],{"class":123},[110,4599,4600],{"class":112,"line":140},[110,4601,201],{"emptyLinePlaceholder":200},[110,4603,4604,4606,4608],{"class":112,"line":148},[110,4605,536],{"class":116},[110,4607,784],{"class":191},[110,4609,312],{"class":123},[110,4611,4612],{"class":112,"line":153},[110,4613,124],{"class":123},[110,4615,4616,4618,4620,4623,4625,4627],{"class":112,"line":159},[110,4617,2178],{"class":123},[110,4619,2181],{"class":116},[110,4621,4622],{"class":191}," nums",[110,4624,212],{"class":123},[110,4626,4413],{"class":247},[110,4628,355],{"class":123},[110,4630,4631],{"class":112,"line":268},[110,4632,201],{"emptyLinePlaceholder":200},[110,4634,4635,4637,4639,4641,4643],{"class":112,"line":274},[110,4636,795],{"class":116},[110,4638,1704],{"class":191},[110,4640,212],{"class":123},[110,4642,4431],{"class":179},[110,4644,355],{"class":123},[110,4646,4647],{"class":112,"line":279},[110,4648,201],{"emptyLinePlaceholder":200},[110,4650,4651,4653,4655,4657,4660,4662,4664],{"class":112,"line":294},[110,4652,592],{"class":123},[110,4654,364],{"class":116},[110,4656,2225],{"class":123},[110,4658,4659],{"class":191},"size",[110,4661,1819],{"class":123},[110,4663,364],{"class":116},[110,4665,377],{"class":123},[110,4667,4668],{"class":112,"line":299},[110,4669,137],{"class":123},[110,4671,4672],{"class":112,"line":304},[110,4673,201],{"emptyLinePlaceholder":200},[110,4675,4676,4678,4680],{"class":112,"line":315},[110,4677,206],{"class":116},[110,4679,309],{"class":191},[110,4681,312],{"class":123},[110,4683,4684],{"class":112,"line":320},[110,4685,124],{"class":123},[110,4687,4688],{"class":112,"line":326},[110,4689,323],{"class":116},[110,4691,4692],{"class":112,"line":331},[110,4693,255],{"class":123},[110,4695,4696,4698],{"class":112,"line":358},[110,4697,833],{"class":191},[110,4699,836],{"class":123},[110,4701,4702],{"class":112,"line":380},[110,4703,271],{"class":123},[110,4705,4706,4708,4710,4712,4714,4716],{"class":112,"line":385},[110,4707,388],{"class":116},[110,4709,391],{"class":123},[110,4711,394],{"class":116},[110,4713,2532],{"class":123},[110,4715,1671],{"class":116},[110,4717,851],{"class":123},[110,4719,4720],{"class":112,"line":403},[110,4721,255],{"class":123},[110,4723,4724,4726,4728,4730,4732,4734,4736],{"class":112,"line":408},[110,4725,361],{"class":123},[110,4727,364],{"class":116},[110,4729,1813],{"class":123},[110,4731,1816],{"class":191},[110,4733,1819],{"class":123},[110,4735,364],{"class":116},[110,4737,377],{"class":123},[110,4739,4740],{"class":112,"line":427},[110,4741,271],{"class":123},[110,4743,4744],{"class":112,"line":432},[110,4745,201],{"emptyLinePlaceholder":200},[110,4747,4748,4750,4752],{"class":112,"line":437},[110,4749,282],{"class":116},[110,4751,248],{"class":247},[110,4753,195],{"class":123},[110,4755,4756],{"class":112,"line":446},[110,4757,137],{"class":123},[17,4759,4760],{},[49,4761,453],{},[101,4763,4765],{"className":4764,"code":4545,"language":459,"meta":106},[457],[60,4766,4545],{"__ignoreMap":106},[17,4768,4769,4770,4772],{},"即使發生異常，",[60,4771,2114],{}," 對象也會自動析構，內部內存會自動釋放。",[1612,4774,4775],{"id":4775},"使用智能指針管理資源",[101,4777,4779],{"className":103,"code":4778,"language":105,"meta":106,"style":106},"#include \u003Ciostream>\n#include \u003Cmemory>\n#include \u003Cstdexcept>\nusing namespace std;\n\nvoid test()\n{\n    unique_ptr\u003Cint[]> p(new int[100]);\n\n    throw runtime_error(\"中途出现异常\");\n}\n\nint main()\n{\n    try\n    {\n        test();\n    }\n    catch (const exception& e)\n    {\n        cout \u003C\u003C e.what() \u003C\u003C endl;\n    }\n\n    return 0;\n}\n",[60,4780,4781,4787,4794,4800,4810,4814,4822,4826,4857,4861,4873,4877,4881,4889,4893,4897,4901,4907,4911,4925,4929,4945,4949,4953,4961],{"__ignoreMap":106},[110,4782,4783,4785],{"class":112,"line":113},[110,4784,176],{"class":116},[110,4786,180],{"class":179},[110,4788,4789,4791],{"class":112,"line":120},[110,4790,176],{"class":116},[110,4792,4793],{"class":179}," \u003Cmemory>\n",[110,4795,4796,4798],{"class":112,"line":127},[110,4797,176],{"class":116},[110,4799,1610],{"class":179},[110,4801,4802,4804,4806,4808],{"class":112,"line":134},[110,4803,185],{"class":116},[110,4805,188],{"class":116},[110,4807,192],{"class":191},[110,4809,195],{"class":123},[110,4811,4812],{"class":112,"line":140},[110,4813,201],{"emptyLinePlaceholder":200},[110,4815,4816,4818,4820],{"class":112,"line":148},[110,4817,536],{"class":116},[110,4819,784],{"class":191},[110,4821,312],{"class":123},[110,4823,4824],{"class":112,"line":153},[110,4825,124],{"class":123},[110,4827,4828,4831,4834,4837,4840,4843,4845,4848,4850,4852,4854],{"class":112,"line":159},[110,4829,4830],{"class":123},"    unique_ptr",[110,4832,4833],{"class":116},"\u003Cint",[110,4835,4836],{"class":123},"[]",[110,4838,4839],{"class":116},">",[110,4841,4842],{"class":191}," p",[110,4844,212],{"class":123},[110,4846,4847],{"class":116},"new",[110,4849,4407],{"class":116},[110,4851,4410],{"class":123},[110,4853,4413],{"class":247},[110,4855,4856],{"class":123},"]);\n",[110,4858,4859],{"class":112,"line":268},[110,4860,201],{"emptyLinePlaceholder":200},[110,4862,4863,4865,4867,4869,4871],{"class":112,"line":274},[110,4864,795],{"class":116},[110,4866,1704],{"class":191},[110,4868,212],{"class":123},[110,4870,4431],{"class":179},[110,4872,355],{"class":123},[110,4874,4875],{"class":112,"line":279},[110,4876,137],{"class":123},[110,4878,4879],{"class":112,"line":294},[110,4880,201],{"emptyLinePlaceholder":200},[110,4882,4883,4885,4887],{"class":112,"line":299},[110,4884,206],{"class":116},[110,4886,309],{"class":191},[110,4888,312],{"class":123},[110,4890,4891],{"class":112,"line":304},[110,4892,124],{"class":123},[110,4894,4895],{"class":112,"line":315},[110,4896,323],{"class":116},[110,4898,4899],{"class":112,"line":320},[110,4900,255],{"class":123},[110,4902,4903,4905],{"class":112,"line":326},[110,4904,833],{"class":191},[110,4906,836],{"class":123},[110,4908,4909],{"class":112,"line":331},[110,4910,271],{"class":123},[110,4912,4913,4915,4917,4919,4921,4923],{"class":112,"line":358},[110,4914,388],{"class":116},[110,4916,391],{"class":123},[110,4918,394],{"class":116},[110,4920,2532],{"class":123},[110,4922,1671],{"class":116},[110,4924,851],{"class":123},[110,4926,4927],{"class":112,"line":380},[110,4928,255],{"class":123},[110,4930,4931,4933,4935,4937,4939,4941,4943],{"class":112,"line":385},[110,4932,361],{"class":123},[110,4934,364],{"class":116},[110,4936,1813],{"class":123},[110,4938,1816],{"class":191},[110,4940,1819],{"class":123},[110,4942,364],{"class":116},[110,4944,377],{"class":123},[110,4946,4947],{"class":112,"line":403},[110,4948,271],{"class":123},[110,4950,4951],{"class":112,"line":408},[110,4952,201],{"emptyLinePlaceholder":200},[110,4954,4955,4957,4959],{"class":112,"line":427},[110,4956,282],{"class":116},[110,4958,248],{"class":247},[110,4960,195],{"class":123},[110,4962,4963],{"class":112,"line":432},[110,4964,137],{"class":123},[17,4966,4967],{},[49,4968,453],{},[101,4970,4972],{"className":4971,"code":4545,"language":459,"meta":106},[457],[60,4973,4545],{"__ignoreMap":106},[17,4975,4976,4979,4980,2374],{},[60,4977,4978],{},"unique_ptr"," 會自動釋放內存，不需要手動 ",[60,4981,4982],{},"delete[]",[17,4984,4985],{},[49,4986,2929],{},[17,4988,4989],{},"異常處理要和 RAII 一起理解。",[17,4991,4992],{},"現代 C++ 中，應該優先使用：",[21,4994,4995,5000,5004,5008,5013,5018],{},[24,4996,4997],{},[60,4998,4999],{},"string",[24,5001,5002],{},[60,5003,2114],{},[24,5005,5006],{},[60,5007,4978],{},[24,5009,5010],{},[60,5011,5012],{},"shared_ptr",[24,5014,5015],{},[60,5016,5017],{},"fstream",[24,5019,5020],{},"自定義類的構造和析構",[17,5022,5023,5024,2374],{},"來管理資源，減少手動 ",[60,5025,5026],{},"new\u002Fdelete",[473,5028],{},[13,5030,5031],{"id":5031},"異常和返回值錯誤碼",[17,5033,5034],{},"異常不是所有地方都適合使用。",[1612,5036,5037],{"id":5037},"適合使用異常的情況",[17,5039,5040],{},"異常適合處理“不應該頻繁發生”的嚴重錯誤。",[17,5042,4123],{},[21,5044,5045,5048,5050,5053,5056],{},[24,5046,5047],{},"配置文件不存在",[24,5049,29],{},[24,5051,5052],{},"參數明顯錯誤",[24,5054,5055],{},"初始化失敗",[24,5057,5058],{},"程序無法繼續運行",[17,5060,5061],{},[49,5062,166],{},[101,5064,5066],{"className":103,"code":5065,"language":105,"meta":106,"style":106},"#include \u003Ciostream>\n#include \u003Cstdexcept>\nusing namespace std;\n\nvoid initSystem(const string& configPath)\n{\n    if (configPath.empty())\n    {\n        throw runtime_error(\"配置文件路径为空\");\n    }\n\n    cout \u003C\u003C \"系统初始化成功\" \u003C\u003C endl;\n}\n\nint main()\n{\n    try\n    {\n        initSystem(\"\");\n    }\n    catch (const exception& e)\n    {\n        cout \u003C\u003C \"初始化失败：\" \u003C\u003C e.what() \u003C\u003C endl;\n        return 1;\n    }\n\n    return 0;\n}\n",[60,5067,5068,5074,5080,5090,5094,5114,5118,5129,5133,5146,5150,5154,5167,5171,5175,5183,5187,5191,5195,5206,5210,5224,5228,5249,5258,5262,5266,5274],{"__ignoreMap":106},[110,5069,5070,5072],{"class":112,"line":113},[110,5071,176],{"class":116},[110,5073,180],{"class":179},[110,5075,5076,5078],{"class":112,"line":120},[110,5077,176],{"class":116},[110,5079,1610],{"class":179},[110,5081,5082,5084,5086,5088],{"class":112,"line":127},[110,5083,185],{"class":116},[110,5085,188],{"class":116},[110,5087,192],{"class":191},[110,5089,195],{"class":123},[110,5091,5092],{"class":112,"line":134},[110,5093,201],{"emptyLinePlaceholder":200},[110,5095,5096,5098,5101,5103,5105,5107,5109,5112],{"class":112,"line":140},[110,5097,536],{"class":116},[110,5099,5100],{"class":191}," initSystem",[110,5102,212],{"class":123},[110,5104,394],{"class":116},[110,5106,1668],{"class":191},[110,5108,1671],{"class":116},[110,5110,5111],{"class":217}," configPath",[110,5113,229],{"class":123},[110,5115,5116],{"class":112,"line":148},[110,5117,124],{"class":123},[110,5119,5120,5122,5125,5127],{"class":112,"line":153},[110,5121,238],{"class":116},[110,5123,5124],{"class":123}," (configPath.",[110,5126,1690],{"class":191},[110,5128,1693],{"class":123},[110,5130,5131],{"class":112,"line":159},[110,5132,255],{"class":123},[110,5134,5135,5137,5139,5141,5144],{"class":112,"line":268},[110,5136,260],{"class":116},[110,5138,1704],{"class":191},[110,5140,212],{"class":123},[110,5142,5143],{"class":179},"\"配置文件路径为空\"",[110,5145,355],{"class":123},[110,5147,5148],{"class":112,"line":274},[110,5149,271],{"class":123},[110,5151,5152],{"class":112,"line":279},[110,5153,201],{"emptyLinePlaceholder":200},[110,5155,5156,5158,5160,5163,5165],{"class":112,"line":294},[110,5157,592],{"class":123},[110,5159,364],{"class":116},[110,5161,5162],{"class":179}," \"系统初始化成功\"",[110,5164,370],{"class":116},[110,5166,377],{"class":123},[110,5168,5169],{"class":112,"line":299},[110,5170,137],{"class":123},[110,5172,5173],{"class":112,"line":304},[110,5174,201],{"emptyLinePlaceholder":200},[110,5176,5177,5179,5181],{"class":112,"line":315},[110,5178,206],{"class":116},[110,5180,309],{"class":191},[110,5182,312],{"class":123},[110,5184,5185],{"class":112,"line":320},[110,5186,124],{"class":123},[110,5188,5189],{"class":112,"line":326},[110,5190,323],{"class":116},[110,5192,5193],{"class":112,"line":331},[110,5194,255],{"class":123},[110,5196,5197,5200,5202,5204],{"class":112,"line":358},[110,5198,5199],{"class":191},"        initSystem",[110,5201,212],{"class":123},[110,5203,1775],{"class":179},[110,5205,355],{"class":123},[110,5207,5208],{"class":112,"line":380},[110,5209,271],{"class":123},[110,5211,5212,5214,5216,5218,5220,5222],{"class":112,"line":385},[110,5213,388],{"class":116},[110,5215,391],{"class":123},[110,5217,394],{"class":116},[110,5219,2532],{"class":123},[110,5221,1671],{"class":116},[110,5223,851],{"class":123},[110,5225,5226],{"class":112,"line":403},[110,5227,255],{"class":123},[110,5229,5230,5232,5234,5237,5239,5241,5243,5245,5247],{"class":112,"line":408},[110,5231,361],{"class":123},[110,5233,364],{"class":116},[110,5235,5236],{"class":179}," \"初始化失败：\"",[110,5238,370],{"class":116},[110,5240,1813],{"class":123},[110,5242,1816],{"class":191},[110,5244,1819],{"class":123},[110,5246,364],{"class":116},[110,5248,377],{"class":123},[110,5250,5251,5254,5256],{"class":112,"line":427},[110,5252,5253],{"class":116},"        return",[110,5255,991],{"class":247},[110,5257,195],{"class":123},[110,5259,5260],{"class":112,"line":432},[110,5261,271],{"class":123},[110,5263,5264],{"class":112,"line":437},[110,5265,201],{"emptyLinePlaceholder":200},[110,5267,5268,5270,5272],{"class":112,"line":446},[110,5269,282],{"class":116},[110,5271,248],{"class":247},[110,5273,195],{"class":123},[110,5275,5276],{"class":112,"line":1135},[110,5277,137],{"class":123},[17,5279,5280],{},[49,5281,453],{},[101,5283,5286],{"className":5284,"code":5285,"language":459,"meta":106},[457],"初始化失败：配置文件路径为空\n",[60,5287,5285],{"__ignoreMap":106},[17,5289,5290,5291,5294],{},"程序隨後以狀態碼 ",[60,5292,5293],{},"1"," 結束。",[1612,5296,5297],{"id":5297},"適合使用返回值的情況",[17,5299,5300],{},"對於經常發生、可以恢復的小錯誤，可以用返回值。",[17,5302,4123],{},[21,5304,5305,5308,5311,5314],{},[24,5306,5307],{},"串口偶爾讀取失敗",[24,5309,5310],{},"網絡偶爾超時",[24,5312,5313],{},"傳感器某一幀數據無效",[24,5315,5316],{},"電機反饋偶爾丟包",[17,5318,5319],{},[49,5320,166],{},[101,5322,5324],{"className":103,"code":5323,"language":105,"meta":106,"style":106},"#include \u003Ciostream>\nusing namespace std;\n\nbool readEncoder()\n{\n    \u002F\u002F 模拟读取失败\n    return false;\n}\n\nint main()\n{\n    if (!readEncoder())\n    {\n        cout \u003C\u003C \"编码器读取失败，本次循环跳过\" \u003C\u003C endl;\n        return 0;\n    }\n\n    cout \u003C\u003C \"编码器读取成功\" \u003C\u003C endl;\n\n    return 0;\n}\n",[60,5325,5326,5332,5342,5346,5356,5360,5365,5374,5378,5382,5390,5394,5408,5412,5425,5433,5437,5441,5454,5458,5466],{"__ignoreMap":106},[110,5327,5328,5330],{"class":112,"line":113},[110,5329,176],{"class":116},[110,5331,180],{"class":179},[110,5333,5334,5336,5338,5340],{"class":112,"line":120},[110,5335,185],{"class":116},[110,5337,188],{"class":116},[110,5339,192],{"class":191},[110,5341,195],{"class":123},[110,5343,5344],{"class":112,"line":127},[110,5345,201],{"emptyLinePlaceholder":200},[110,5347,5348,5351,5354],{"class":112,"line":134},[110,5349,5350],{"class":116},"bool",[110,5352,5353],{"class":191}," readEncoder",[110,5355,312],{"class":123},[110,5357,5358],{"class":112,"line":140},[110,5359,124],{"class":123},[110,5361,5362],{"class":112,"line":148},[110,5363,5364],{"class":130},"    \u002F\u002F 模拟读取失败\n",[110,5366,5367,5369,5372],{"class":112,"line":153},[110,5368,282],{"class":116},[110,5370,5371],{"class":247}," false",[110,5373,195],{"class":123},[110,5375,5376],{"class":112,"line":159},[110,5377,137],{"class":123},[110,5379,5380],{"class":112,"line":268},[110,5381,201],{"emptyLinePlaceholder":200},[110,5383,5384,5386,5388],{"class":112,"line":274},[110,5385,206],{"class":116},[110,5387,309],{"class":191},[110,5389,312],{"class":123},[110,5391,5392],{"class":112,"line":279},[110,5393,124],{"class":123},[110,5395,5396,5398,5400,5403,5406],{"class":112,"line":294},[110,5397,238],{"class":116},[110,5399,391],{"class":123},[110,5401,5402],{"class":116},"!",[110,5404,5405],{"class":191},"readEncoder",[110,5407,1693],{"class":123},[110,5409,5410],{"class":112,"line":299},[110,5411,255],{"class":123},[110,5413,5414,5416,5418,5421,5423],{"class":112,"line":304},[110,5415,361],{"class":123},[110,5417,364],{"class":116},[110,5419,5420],{"class":179}," \"编码器读取失败，本次循环跳过\"",[110,5422,370],{"class":116},[110,5424,377],{"class":123},[110,5426,5427,5429,5431],{"class":112,"line":315},[110,5428,5253],{"class":116},[110,5430,248],{"class":247},[110,5432,195],{"class":123},[110,5434,5435],{"class":112,"line":320},[110,5436,271],{"class":123},[110,5438,5439],{"class":112,"line":326},[110,5440,201],{"emptyLinePlaceholder":200},[110,5442,5443,5445,5447,5450,5452],{"class":112,"line":331},[110,5444,592],{"class":123},[110,5446,364],{"class":116},[110,5448,5449],{"class":179}," \"编码器读取成功\"",[110,5451,370],{"class":116},[110,5453,377],{"class":123},[110,5455,5456],{"class":112,"line":358},[110,5457,201],{"emptyLinePlaceholder":200},[110,5459,5460,5462,5464],{"class":112,"line":380},[110,5461,282],{"class":116},[110,5463,248],{"class":247},[110,5465,195],{"class":123},[110,5467,5468],{"class":112,"line":385},[110,5469,137],{"class":123},[17,5471,5472],{},[49,5473,453],{},[101,5475,5478],{"className":5476,"code":5477,"language":459,"meta":106},[457],"编码器读取失败，本次循环跳过\n",[60,5479,5477],{"__ignoreMap":106},[17,5481,5482],{},[49,5483,2929],{},[21,5485,5486,5489],{},[24,5487,5488],{},"初始化階段的大錯誤，可以用異常",[24,5490,5491],{},"運行循環中的常見錯誤，優先用返回值或狀態碼",[473,5493],{},[13,5495,5497],{"id":5496},"ros2-機器人項目中的異常使用思路","ROS2 \u002F 機器人項目中的異常使用思路",[17,5499,5500],{},"在 ROS2 或機器人項目中，異常處理要謹慎使用。",[1612,5502,5503],{"id":5503},"適合拋異常的位置",[17,5505,5506],{},"例如節點啟動階段：",[21,5508,5509,5512,5514,5517,5520],{},[24,5510,5511],{},"參數讀取失敗",[24,5513,5047],{},[24,5515,5516],{},"串口無法打開",[24,5518,5519],{},"CAN 設備無法打開",[24,5521,5522],{},"硬件初始化失敗",[17,5524,5525],{},[49,5526,166],{},[101,5528,5530],{"className":103,"code":5529,"language":105,"meta":106,"style":106},"#include \u003Ciostream>\n#include \u003Cstdexcept>\nusing namespace std;\n\nclass MotorDriver\n{\npublic:\n    MotorDriver(const string& device)\n    {\n        if (device.empty())\n        {\n            throw runtime_error(\"电机驱动初始化失败：设备名为空\");\n        }\n\n        cout \u003C\u003C \"电机驱动初始化成功：\" \u003C\u003C device \u003C\u003C endl;\n    }\n};\n\nint main()\n{\n    try\n    {\n        MotorDriver driver(\"\");\n    }\n    catch (const exception& e)\n    {\n        cout \u003C\u003C \"程序启动失败：\" \u003C\u003C e.what() \u003C\u003C endl;\n        return 1;\n    }\n\n    return 0;\n}\n",[60,5531,5532,5538,5544,5554,5558,5565,5569,5573,5590,5594,5604,5608,5621,5625,5629,5646,5650,5654,5658,5666,5670,5674,5678,5692,5696,5710,5714,5735,5743,5747,5751,5759],{"__ignoreMap":106},[110,5533,5534,5536],{"class":112,"line":113},[110,5535,176],{"class":116},[110,5537,180],{"class":179},[110,5539,5540,5542],{"class":112,"line":120},[110,5541,176],{"class":116},[110,5543,1610],{"class":179},[110,5545,5546,5548,5550,5552],{"class":112,"line":127},[110,5547,185],{"class":116},[110,5549,188],{"class":116},[110,5551,192],{"class":191},[110,5553,195],{"class":123},[110,5555,5556],{"class":112,"line":134},[110,5557,201],{"emptyLinePlaceholder":200},[110,5559,5560,5562],{"class":112,"line":140},[110,5561,3520],{"class":116},[110,5563,5564],{"class":191}," MotorDriver\n",[110,5566,5567],{"class":112,"line":148},[110,5568,124],{"class":123},[110,5570,5571],{"class":112,"line":153},[110,5572,3541],{"class":116},[110,5574,5575,5578,5580,5582,5584,5586,5588],{"class":112,"line":159},[110,5576,5577],{"class":191},"    MotorDriver",[110,5579,212],{"class":123},[110,5581,394],{"class":116},[110,5583,1668],{"class":191},[110,5585,1671],{"class":116},[110,5587,1674],{"class":217},[110,5589,229],{"class":123},[110,5591,5592],{"class":112,"line":268},[110,5593,255],{"class":123},[110,5595,5596,5598,5600,5602],{"class":112,"line":274},[110,5597,3915],{"class":116},[110,5599,1687],{"class":123},[110,5601,1690],{"class":191},[110,5603,1693],{"class":123},[110,5605,5606],{"class":112,"line":279},[110,5607,3926],{"class":123},[110,5609,5610,5612,5614,5616,5619],{"class":112,"line":294},[110,5611,3931],{"class":116},[110,5613,1704],{"class":191},[110,5615,212],{"class":123},[110,5617,5618],{"class":179},"\"电机驱动初始化失败：设备名为空\"",[110,5620,355],{"class":123},[110,5622,5623],{"class":112,"line":299},[110,5624,3945],{"class":123},[110,5626,5627],{"class":112,"line":304},[110,5628,201],{"emptyLinePlaceholder":200},[110,5630,5631,5633,5635,5638,5640,5642,5644],{"class":112,"line":315},[110,5632,361],{"class":123},[110,5634,364],{"class":116},[110,5636,5637],{"class":179}," \"电机驱动初始化成功：\"",[110,5639,370],{"class":116},[110,5641,1733],{"class":123},[110,5643,364],{"class":116},[110,5645,377],{"class":123},[110,5647,5648],{"class":112,"line":320},[110,5649,271],{"class":123},[110,5651,5652],{"class":112,"line":326},[110,5653,2204],{"class":123},[110,5655,5656],{"class":112,"line":331},[110,5657,201],{"emptyLinePlaceholder":200},[110,5659,5660,5662,5664],{"class":112,"line":358},[110,5661,206],{"class":116},[110,5663,309],{"class":191},[110,5665,312],{"class":123},[110,5667,5668],{"class":112,"line":380},[110,5669,124],{"class":123},[110,5671,5672],{"class":112,"line":385},[110,5673,323],{"class":116},[110,5675,5676],{"class":112,"line":403},[110,5677,255],{"class":123},[110,5679,5680,5683,5686,5688,5690],{"class":112,"line":408},[110,5681,5682],{"class":123},"        MotorDriver ",[110,5684,5685],{"class":191},"driver",[110,5687,212],{"class":123},[110,5689,1775],{"class":179},[110,5691,355],{"class":123},[110,5693,5694],{"class":112,"line":427},[110,5695,271],{"class":123},[110,5697,5698,5700,5702,5704,5706,5708],{"class":112,"line":432},[110,5699,388],{"class":116},[110,5701,391],{"class":123},[110,5703,394],{"class":116},[110,5705,2532],{"class":123},[110,5707,1671],{"class":116},[110,5709,851],{"class":123},[110,5711,5712],{"class":112,"line":437},[110,5713,255],{"class":123},[110,5715,5716,5718,5720,5723,5725,5727,5729,5731,5733],{"class":112,"line":446},[110,5717,361],{"class":123},[110,5719,364],{"class":116},[110,5721,5722],{"class":179}," \"程序启动失败：\"",[110,5724,370],{"class":116},[110,5726,1813],{"class":123},[110,5728,1816],{"class":191},[110,5730,1819],{"class":123},[110,5732,364],{"class":116},[110,5734,377],{"class":123},[110,5736,5737,5739,5741],{"class":112,"line":1135},[110,5738,5253],{"class":116},[110,5740,991],{"class":247},[110,5742,195],{"class":123},[110,5744,5745],{"class":112,"line":1153},[110,5746,271],{"class":123},[110,5748,5749],{"class":112,"line":1158},[110,5750,201],{"emptyLinePlaceholder":200},[110,5752,5753,5755,5757],{"class":112,"line":1170},[110,5754,282],{"class":116},[110,5756,248],{"class":247},[110,5758,195],{"class":123},[110,5760,5761],{"class":112,"line":1175},[110,5762,137],{"class":123},[17,5764,5765],{},[49,5766,453],{},[101,5768,5771],{"className":5769,"code":5770,"language":459,"meta":106},[457],"程序启动失败：电机驱动初始化失败：设备名为空\n",[60,5772,5770],{"__ignoreMap":106},[17,5774,5290,5775,5294],{},[60,5776,5293],{},[1612,5778,5779],{"id":5779},"不適合頻繁拋異常的位置",[17,5781,5782],{},"例如控制循環中：",[101,5784,5786],{"className":103,"code":5785,"language":105,"meta":106,"style":106},"while (true)\n{\n    \u002F\u002F 不推荐每次通信失败都 throw\n}\n",[60,5787,5788,5800,5804,5809],{"__ignoreMap":106},[110,5789,5790,5793,5795,5798],{"class":112,"line":113},[110,5791,5792],{"class":116},"while",[110,5794,391],{"class":123},[110,5796,5797],{"class":247},"true",[110,5799,229],{"class":123},[110,5801,5802],{"class":112,"line":120},[110,5803,124],{"class":123},[110,5805,5806],{"class":112,"line":127},[110,5807,5808],{"class":130},"    \u002F\u002F 不推荐每次通信失败都 throw\n",[110,5810,5811],{"class":112,"line":134},[110,5812,137],{"class":123},[17,5814,5815],{},"更推薦：",[101,5817,5819],{"className":103,"code":5818,"language":105,"meta":106,"style":106},"bool readMotorState()\n{\n    \u002F\u002F 读取失败返回 false\n    return false;\n}\n\nint main()\n{\n    if (!readMotorState())\n    {\n        cout \u003C\u003C \"读取电机状态失败，跳过本次控制周期\" \u003C\u003C endl;\n    }\n\n    return 0;\n}\n",[60,5820,5821,5830,5834,5839,5847,5851,5855,5863,5867,5880,5884,5897,5901,5905,5913],{"__ignoreMap":106},[110,5822,5823,5825,5828],{"class":112,"line":113},[110,5824,5350],{"class":116},[110,5826,5827],{"class":191}," readMotorState",[110,5829,312],{"class":123},[110,5831,5832],{"class":112,"line":120},[110,5833,124],{"class":123},[110,5835,5836],{"class":112,"line":127},[110,5837,5838],{"class":130},"    \u002F\u002F 读取失败返回 false\n",[110,5840,5841,5843,5845],{"class":112,"line":134},[110,5842,282],{"class":116},[110,5844,5371],{"class":247},[110,5846,195],{"class":123},[110,5848,5849],{"class":112,"line":140},[110,5850,137],{"class":123},[110,5852,5853],{"class":112,"line":148},[110,5854,201],{"emptyLinePlaceholder":200},[110,5856,5857,5859,5861],{"class":112,"line":153},[110,5858,206],{"class":116},[110,5860,309],{"class":191},[110,5862,312],{"class":123},[110,5864,5865],{"class":112,"line":159},[110,5866,124],{"class":123},[110,5868,5869,5871,5873,5875,5878],{"class":112,"line":268},[110,5870,238],{"class":116},[110,5872,391],{"class":123},[110,5874,5402],{"class":116},[110,5876,5877],{"class":191},"readMotorState",[110,5879,1693],{"class":123},[110,5881,5882],{"class":112,"line":274},[110,5883,255],{"class":123},[110,5885,5886,5888,5890,5893,5895],{"class":112,"line":279},[110,5887,361],{"class":123},[110,5889,364],{"class":116},[110,5891,5892],{"class":179}," \"读取电机状态失败，跳过本次控制周期\"",[110,5894,370],{"class":116},[110,5896,377],{"class":123},[110,5898,5899],{"class":112,"line":294},[110,5900,271],{"class":123},[110,5902,5903],{"class":112,"line":299},[110,5904,201],{"emptyLinePlaceholder":200},[110,5906,5907,5909,5911],{"class":112,"line":304},[110,5908,282],{"class":116},[110,5910,248],{"class":247},[110,5912,195],{"class":123},[110,5914,5915],{"class":112,"line":315},[110,5916,137],{"class":123},[17,5918,5919],{},[49,5920,453],{},[101,5922,5925],{"className":5923,"code":5924,"language":459,"meta":106},[457],"读取电机状态失败，跳过本次控制周期\n",[60,5926,5924],{"__ignoreMap":106},[17,5928,5929],{},[49,5930,2929],{},[17,5932,5933],{},"機器人控制中，週期性代碼更關注穩定性和實時性，不要讓異常在高頻控制循環中到處亂飛。",[473,5935],{},[13,5937,5939],{"id":5938},"noexcept-簡介","noexcept 簡介",[17,5941,5942,5945],{},[60,5943,5944],{},"noexcept"," 表示一個函數承諾不拋出異常。",[17,5947,5948],{},[49,5949,99],{},[101,5951,5953],{"className":103,"code":5952,"language":105,"meta":106,"style":106},"void func() noexcept\n{\n}\n",[60,5954,5955,5967,5971],{"__ignoreMap":106},[110,5956,5957,5959,5962,5964],{"class":112,"line":113},[110,5958,536],{"class":116},[110,5960,5961],{"class":191}," func",[110,5963,1819],{"class":123},[110,5965,5966],{"class":116},"noexcept\n",[110,5968,5969],{"class":112,"line":120},[110,5970,124],{"class":123},[110,5972,5973],{"class":112,"line":127},[110,5974,137],{"class":123},[17,5976,5977],{},[49,5978,166],{},[101,5980,5982],{"className":103,"code":5981,"language":105,"meta":106,"style":106},"#include \u003Ciostream>\nusing namespace std;\n\nvoid test() noexcept\n{\n    cout \u003C\u003C \"这个函数承诺不抛异常\" \u003C\u003C endl;\n}\n\nint main()\n{\n    test();\n\n    return 0;\n}\n",[60,5983,5984,5990,6000,6004,6014,6018,6031,6035,6039,6047,6051,6057,6061,6069],{"__ignoreMap":106},[110,5985,5986,5988],{"class":112,"line":113},[110,5987,176],{"class":116},[110,5989,180],{"class":179},[110,5991,5992,5994,5996,5998],{"class":112,"line":120},[110,5993,185],{"class":116},[110,5995,188],{"class":116},[110,5997,192],{"class":191},[110,5999,195],{"class":123},[110,6001,6002],{"class":112,"line":127},[110,6003,201],{"emptyLinePlaceholder":200},[110,6005,6006,6008,6010,6012],{"class":112,"line":134},[110,6007,536],{"class":116},[110,6009,784],{"class":191},[110,6011,1819],{"class":123},[110,6013,5966],{"class":116},[110,6015,6016],{"class":112,"line":140},[110,6017,124],{"class":123},[110,6019,6020,6022,6024,6027,6029],{"class":112,"line":148},[110,6021,592],{"class":123},[110,6023,364],{"class":116},[110,6025,6026],{"class":179}," \"这个函数承诺不抛异常\"",[110,6028,370],{"class":116},[110,6030,377],{"class":123},[110,6032,6033],{"class":112,"line":153},[110,6034,137],{"class":123},[110,6036,6037],{"class":112,"line":159},[110,6038,201],{"emptyLinePlaceholder":200},[110,6040,6041,6043,6045],{"class":112,"line":268},[110,6042,206],{"class":116},[110,6044,309],{"class":191},[110,6046,312],{"class":123},[110,6048,6049],{"class":112,"line":274},[110,6050,124],{"class":123},[110,6052,6053,6055],{"class":112,"line":279},[110,6054,1488],{"class":191},[110,6056,836],{"class":123},[110,6058,6059],{"class":112,"line":294},[110,6060,201],{"emptyLinePlaceholder":200},[110,6062,6063,6065,6067],{"class":112,"line":299},[110,6064,282],{"class":116},[110,6066,248],{"class":247},[110,6068,195],{"class":123},[110,6070,6071],{"class":112,"line":304},[110,6072,137],{"class":123},[17,6074,6075],{},[49,6076,453],{},[101,6078,6081],{"className":6079,"code":6080,"language":459,"meta":106},[457],"这个函数承诺不抛异常\n",[60,6082,6080],{"__ignoreMap":106},[17,6084,6085],{},[49,6086,1465],{},[17,6088,6089,6090,6092],{},"如果一個 ",[60,6091,5944],{}," 函數中真的拋出了異常，程序通常會直接終止。",[101,6094,6096],{"className":103,"code":6095,"language":105,"meta":106,"style":106},"void test() noexcept\n{\n    \u002F\u002F 不应该这样写\n    \u002F\u002F throw runtime_error(\"错误\");\n}\n",[60,6097,6098,6108,6112,6117,6122],{"__ignoreMap":106},[110,6099,6100,6102,6104,6106],{"class":112,"line":113},[110,6101,536],{"class":116},[110,6103,784],{"class":191},[110,6105,1819],{"class":123},[110,6107,5966],{"class":116},[110,6109,6110],{"class":112,"line":120},[110,6111,124],{"class":123},[110,6113,6114],{"class":112,"line":127},[110,6115,6116],{"class":130},"    \u002F\u002F 不应该这样写\n",[110,6118,6119],{"class":112,"line":134},[110,6120,6121],{"class":130},"    \u002F\u002F throw runtime_error(\"错误\");\n",[110,6123,6124],{"class":112,"line":140},[110,6125,137],{"class":123},[17,6127,6128],{},"普通學習階段只需要知道：",[21,6130,6131,6136,6139],{},[24,6132,6133,6135],{},[60,6134,5944],{}," 表示函數不拋異常",[24,6137,6138],{},"析構函數、移動構造函數、底層資源釋放函數中經常會看到它",[24,6140,6141],{},"現階段不需要深入研究底層機制",[473,6143],{},[13,6145,6146],{"id":6146},"異常處理注意事項",[1612,6148,6149],{"id":6149},"儘量使用引用捕獲",[17,6151,6152],{},"推薦：",[101,6154,6156],{"className":103,"code":6155,"language":105,"meta":106,"style":106},"catch (const exception& e)\n{\n    cout \u003C\u003C e.what() \u003C\u003C endl;\n}\n",[60,6157,6158,6172,6176,6192],{"__ignoreMap":106},[110,6159,6160,6162,6164,6166,6168,6170],{"class":112,"line":113},[110,6161,67],{"class":116},[110,6163,391],{"class":123},[110,6165,394],{"class":116},[110,6167,2532],{"class":123},[110,6169,1671],{"class":116},[110,6171,851],{"class":123},[110,6173,6174],{"class":112,"line":120},[110,6175,124],{"class":123},[110,6177,6178,6180,6182,6184,6186,6188,6190],{"class":112,"line":127},[110,6179,592],{"class":123},[110,6181,364],{"class":116},[110,6183,1813],{"class":123},[110,6185,1816],{"class":191},[110,6187,1819],{"class":123},[110,6189,364],{"class":116},[110,6191,377],{"class":123},[110,6193,6194],{"class":112,"line":134},[110,6195,137],{"class":123},[17,6197,6198],{},"不推薦：",[101,6200,6202],{"className":103,"code":6201,"language":105,"meta":106,"style":106},"catch (exception e)\n{\n    cout \u003C\u003C e.what() \u003C\u003C endl;\n}\n",[60,6203,6204,6211,6215,6231],{"__ignoreMap":106},[110,6205,6206,6208],{"class":112,"line":113},[110,6207,67],{"class":116},[110,6209,6210],{"class":123}," (exception e)\n",[110,6212,6213],{"class":112,"line":120},[110,6214,124],{"class":123},[110,6216,6217,6219,6221,6223,6225,6227,6229],{"class":112,"line":127},[110,6218,592],{"class":123},[110,6220,364],{"class":116},[110,6222,1813],{"class":123},[110,6224,1816],{"class":191},[110,6226,1819],{"class":123},[110,6228,364],{"class":116},[110,6230,377],{"class":123},[110,6232,6233],{"class":112,"line":134},[110,6234,137],{"class":123},[17,6236,6237],{},"原因：",[17,6239,6240],{},"按值捕獲會產生拷貝，還可能造成對象切片問題。",[473,6242],{},[1612,6244,6245],{"id":6245},"不要濫用異常",[17,6247,6248,6249,2374],{},"異常適合處理異常情況，不適合替代普通的 ",[60,6250,6251],{},"if else",[17,6253,6198],{},[101,6255,6257],{"className":103,"code":6256,"language":105,"meta":106,"style":106},"try\n{\n    if (score \u003C 60)\n    {\n        throw \"不及格\";\n    }\n}\ncatch (...)\n{\n    cout \u003C\u003C \"成绩不及格\" \u003C\u003C endl;\n}\n",[60,6258,6259,6263,6267,6281,6285,6294,6298,6302,6308,6312,6325],{"__ignoreMap":106},[110,6260,6261],{"class":112,"line":113},[110,6262,117],{"class":116},[110,6264,6265],{"class":112,"line":120},[110,6266,124],{"class":123},[110,6268,6269,6271,6274,6276,6279],{"class":112,"line":127},[110,6270,238],{"class":116},[110,6272,6273],{"class":123}," (score ",[110,6275,562],{"class":116},[110,6277,6278],{"class":247}," 60",[110,6280,229],{"class":123},[110,6282,6283],{"class":112,"line":134},[110,6284,255],{"class":123},[110,6286,6287,6289,6292],{"class":112,"line":140},[110,6288,260],{"class":116},[110,6290,6291],{"class":179}," \"不及格\"",[110,6293,195],{"class":123},[110,6295,6296],{"class":112,"line":148},[110,6297,271],{"class":123},[110,6299,6300],{"class":112,"line":153},[110,6301,137],{"class":123},[110,6303,6304,6306],{"class":112,"line":159},[110,6305,67],{"class":116},[110,6307,1301],{"class":123},[110,6309,6310],{"class":112,"line":268},[110,6311,124],{"class":123},[110,6313,6314,6316,6318,6321,6323],{"class":112,"line":274},[110,6315,592],{"class":123},[110,6317,364],{"class":116},[110,6319,6320],{"class":179}," \"成绩不及格\"",[110,6322,370],{"class":116},[110,6324,377],{"class":123},[110,6326,6327],{"class":112,"line":279},[110,6328,137],{"class":123},[17,6330,6331],{},"普通邏輯直接寫：",[101,6333,6335],{"className":103,"code":6334,"language":105,"meta":106,"style":106},"if (score \u003C 60)\n{\n    cout \u003C\u003C \"成绩不及格\" \u003C\u003C endl;\n}\n",[60,6336,6337,6350,6354,6366],{"__ignoreMap":106},[110,6338,6339,6342,6344,6346,6348],{"class":112,"line":113},[110,6340,6341],{"class":116},"if",[110,6343,6273],{"class":123},[110,6345,562],{"class":116},[110,6347,6278],{"class":247},[110,6349,229],{"class":123},[110,6351,6352],{"class":112,"line":120},[110,6353,124],{"class":123},[110,6355,6356,6358,6360,6362,6364],{"class":112,"line":127},[110,6357,592],{"class":123},[110,6359,364],{"class":116},[110,6361,6320],{"class":179},[110,6363,370],{"class":116},[110,6365,377],{"class":123},[110,6367,6368],{"class":112,"line":134},[110,6369,137],{"class":123},[473,6371],{},[1612,6373,6374],{"id":6374},"不要在析構函數中隨便拋異常",[17,6376,6377],{},"析構函數中應該儘量保證安全釋放資源。",[473,6379],{},[1612,6381,6382],{"id":6382},"標準異常優先於字符串異常",[17,6384,6152],{},[101,6386,6388],{"className":103,"code":6387,"language":105,"meta":106,"style":106},"throw runtime_error(\"文件打开失败\");\n",[60,6389,6390],{"__ignoreMap":106},[110,6391,6392,6394,6396,6398,6401],{"class":112,"line":113},[110,6393,72],{"class":116},[110,6395,1704],{"class":191},[110,6397,212],{"class":123},[110,6399,6400],{"class":179},"\"文件打开失败\"",[110,6402,355],{"class":123},[17,6404,6198],{},[101,6406,6408],{"className":103,"code":6407,"language":105,"meta":106,"style":106},"throw \"文件打开失败\";\n",[60,6409,6410],{"__ignoreMap":106},[110,6411,6412,6414,6417],{"class":112,"line":113},[110,6413,72],{"class":116},[110,6415,6416],{"class":179}," \"文件打开失败\"",[110,6418,195],{"class":123},[473,6420],{},[1612,6422,6424],{"id":6423},"main-函數中可以統一捕獲嚴重異常","main 函數中可以統一捕獲嚴重異常",[17,6426,6427],{},[49,6428,166],{},[101,6430,6432],{"className":103,"code":6431,"language":105,"meta":106,"style":106},"#include \u003Ciostream>\n#include \u003Cstdexcept>\nusing namespace std;\n\nint main()\n{\n    try\n    {\n        throw runtime_error(\"程序出现严重错误\");\n    }\n    catch (const exception& e)\n    {\n        cout \u003C\u003C \"fatal error：\" \u003C\u003C e.what() \u003C\u003C endl;\n        return 1;\n    }\n\n    return 0;\n}\n",[60,6433,6434,6440,6446,6456,6460,6468,6472,6476,6480,6493,6497,6511,6515,6536,6544,6548,6552,6560],{"__ignoreMap":106},[110,6435,6436,6438],{"class":112,"line":113},[110,6437,176],{"class":116},[110,6439,180],{"class":179},[110,6441,6442,6444],{"class":112,"line":120},[110,6443,176],{"class":116},[110,6445,1610],{"class":179},[110,6447,6448,6450,6452,6454],{"class":112,"line":127},[110,6449,185],{"class":116},[110,6451,188],{"class":116},[110,6453,192],{"class":191},[110,6455,195],{"class":123},[110,6457,6458],{"class":112,"line":134},[110,6459,201],{"emptyLinePlaceholder":200},[110,6461,6462,6464,6466],{"class":112,"line":140},[110,6463,206],{"class":116},[110,6465,309],{"class":191},[110,6467,312],{"class":123},[110,6469,6470],{"class":112,"line":148},[110,6471,124],{"class":123},[110,6473,6474],{"class":112,"line":153},[110,6475,323],{"class":116},[110,6477,6478],{"class":112,"line":159},[110,6479,255],{"class":123},[110,6481,6482,6484,6486,6488,6491],{"class":112,"line":268},[110,6483,260],{"class":116},[110,6485,1704],{"class":191},[110,6487,212],{"class":123},[110,6489,6490],{"class":179},"\"程序出现严重错误\"",[110,6492,355],{"class":123},[110,6494,6495],{"class":112,"line":274},[110,6496,271],{"class":123},[110,6498,6499,6501,6503,6505,6507,6509],{"class":112,"line":279},[110,6500,388],{"class":116},[110,6502,391],{"class":123},[110,6504,394],{"class":116},[110,6506,2532],{"class":123},[110,6508,1671],{"class":116},[110,6510,851],{"class":123},[110,6512,6513],{"class":112,"line":294},[110,6514,255],{"class":123},[110,6516,6517,6519,6521,6524,6526,6528,6530,6532,6534],{"class":112,"line":299},[110,6518,361],{"class":123},[110,6520,364],{"class":116},[110,6522,6523],{"class":179}," \"fatal error：\"",[110,6525,370],{"class":116},[110,6527,1813],{"class":123},[110,6529,1816],{"class":191},[110,6531,1819],{"class":123},[110,6533,364],{"class":116},[110,6535,377],{"class":123},[110,6537,6538,6540,6542],{"class":112,"line":304},[110,6539,5253],{"class":116},[110,6541,991],{"class":247},[110,6543,195],{"class":123},[110,6545,6546],{"class":112,"line":315},[110,6547,271],{"class":123},[110,6549,6550],{"class":112,"line":320},[110,6551,201],{"emptyLinePlaceholder":200},[110,6553,6554,6556,6558],{"class":112,"line":326},[110,6555,282],{"class":116},[110,6557,248],{"class":247},[110,6559,195],{"class":123},[110,6561,6562],{"class":112,"line":331},[110,6563,137],{"class":123},[17,6565,6566],{},[49,6567,6568],{},"運行結果（程序最後以狀態碼 1 結束）：",[101,6570,6573],{"className":6571,"code":6572,"language":459,"meta":106},[457],"fatal error：程序出现严重错误\n",[60,6574,6572],{"__ignoreMap":106},[17,6576,6577,6578,6581],{},"程序出現嚴重異常後，在 ",[60,6579,6580],{},"main"," 函數中統一處理，避免程序直接崩潰且沒有錯誤信息。",[473,6583],{},[13,6585,6586],{"id":6586},"總結",[17,6588,6589],{},"C++ 異常處理的核心內容：",[21,6591,6592,6597,6601,6606,6611,6616,6621,6624,6627,6630,6633],{},[24,6593,6594,6596],{},[60,6595,62],{},"：嘗試執行可能出錯的代碼",[24,6598,6599,89],{},[60,6600,72],{},[24,6602,6603,6605],{},[60,6604,67],{},"：捕獲並處理異常",[24,6607,6608,6610],{},[60,6609,1570],{},"：標準異常基類",[24,6612,6613,6615],{},[60,6614,1575],{},"：常用運行時異常",[24,6617,6618,6620],{},[60,6619,1858],{},"：獲取異常信息",[24,6622,6623],{},"異常可以跨函數傳遞",[24,6625,6626],{},"構造函數可以拋異常",[24,6628,6629],{},"析構函數不要隨便拋異常",[24,6631,6632],{},"異常處理要配合 RAII 理解",[24,6634,6245],{},[17,6636,6637],{},"對於普通 C++ 學習和 ROS2 工程開發來說，重點掌握：",[6639,6640,6641,6647,6652,6659,6662],"ol",{},[24,6642,6643,6644],{},"會寫基本的 ",[60,6645,6646],{},"try \u002F catch \u002F throw",[24,6648,6649,6650],{},"會使用 ",[60,6651,1575],{},[24,6653,6654,6655,6658],{},"會用 ",[60,6656,6657],{},"catch (const std::exception& e)"," 統一捕獲標準異常",[24,6660,6661],{},"知道異常適合初始化失敗，不適合高頻控制循環",[24,6663,6664],{},"理解 RAII 可以避免異常導致資源洩漏",[6666,6667,6668],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}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 .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 .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}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":106,"searchDepth":120,"depth":120,"links":6670},[6671],{"id":5,"depth":120,"text":5,"children":6672},[6673,6674,6675,6676,6677,6678,6679,6680,6681,6682,6683,6684,6685,6686,6687,6688,6689,6690,6691],{"id":15,"depth":127,"text":15},{"id":477,"depth":127,"text":478},{"id":733,"depth":127,"text":734},{"id":921,"depth":127,"text":922},{"id":1278,"depth":127,"text":1278},{"id":1557,"depth":127,"text":1557},{"id":2367,"depth":127,"text":2368},{"id":2604,"depth":127,"text":2605},{"id":2937,"depth":127,"text":2937},{"id":3191,"depth":127,"text":3191},{"id":3469,"depth":127,"text":3469},{"id":3833,"depth":127,"text":3833},{"id":4145,"depth":127,"text":4145},{"id":4302,"depth":127,"text":4303},{"id":5031,"depth":127,"text":5031},{"id":5496,"depth":127,"text":5497},{"id":5938,"depth":127,"text":5939},{"id":6146,"depth":127,"text":6146},{"id":6586,"depth":127,"text":6586},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma",0,"1600","2023-10-05","wiki\u002F2023-10-05-cplusplus-jiao-xue","zh-tw:2023-10-05-cplusplus-jiao-xue","\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md","wiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码",false,null,"zh-TW","zh-tw",{},{"title":5,"description":106},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","ooJe0ZXm0RI58mA3mDMuH2l2Q88zxvZS7GseKugItWU",[6712,6717,6722,6727,6732,6737,6742,6747,6752,6757,6762,6767,6772,6777,6782,6787,6792,6797,6802,6807,6812,6817,6818,6823,6828,6833,6838,6843,6848,6853,6858,6863,6868,6873,6878,6883,6888,6893,6898,6903,6907,6912,6917,6922,6927,6932,6937,6942,6947,6952,6957,6962,6967,6972,6977,6982,6987,6992,6997,7002,7007,7012,7017,7022,7027,7032,7037,7042,7047,7052,7057,7062,7067,7072,7077,7082,7087,7092,7097,7102,7107,7112],{"path":6713,"stem":6714,"title":6715,"date":6695,"chapterOrder":6716,"chapterDepth":6693,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0100-C++开发环境搭建与测试","C++開發環境搭建與測試","0100",{"path":6718,"stem":6719,"title":6720,"date":6695,"chapterOrder":6721,"chapterDepth":6693,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++基礎初識","0200",{"path":6723,"stem":6724,"title":6725,"date":6695,"chapterOrder":6726,"chapterDepth":6693,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0300-shu-ju-lei-xing-yu-shu-ju-cun-fang","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0300-数据类型与数据存放","數據類型與數據存放","0300",{"path":6728,"stem":6729,"title":6730,"date":6695,"chapterOrder":6731,"chapterDepth":6693,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","輸入輸出","0400",{"path":6733,"stem":6734,"title":6735,"date":6695,"chapterOrder":6736,"chapterDepth":6693,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","運算符","0500",{"path":6738,"stem":6739,"title":6740,"date":6695,"chapterOrder":6741,"chapterDepth":6693,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","程序流程結構","0600",{"path":6743,"stem":6744,"title":6745,"date":6695,"chapterOrder":6746,"chapterDepth":6693,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","數組","0700",{"path":6748,"stem":6749,"title":6750,"date":6695,"chapterOrder":6751,"chapterDepth":6693,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","函數與頭文件","0800",{"path":6753,"stem":6754,"title":6755,"date":6695,"chapterOrder":6756,"chapterDepth":6693,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","指針","0900",{"path":6758,"stem":6759,"title":6760,"date":6695,"chapterOrder":6761,"chapterDepth":6693,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","結構體與共用體","1000",{"path":6763,"stem":6764,"title":6765,"date":6695,"chapterOrder":6766,"chapterDepth":6693,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1100-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1100-内存分区与生命周期","內存分區與生命週期","1100",{"path":6768,"stem":6769,"title":6770,"date":6695,"chapterOrder":6771,"chapterDepth":6693,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","引用","1200",{"path":6773,"stem":6774,"title":6775,"date":6695,"chapterOrder":6776,"chapterDepth":6693,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao-yu-ming-ming-kong-jian","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高与命名空间","函數提高與命名空間","1300",{"path":6778,"stem":6779,"title":6780,"date":6695,"chapterOrder":6781,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","封裝","1400-0100",{"path":6783,"stem":6784,"title":6785,"date":6695,"chapterOrder":6786,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0200-dui-xiang-chu-shi-hua-he-qing-li","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0200-对象初始化和清理","對象初始化和清理","1400-0200",{"path":6788,"stem":6789,"title":6790,"date":6695,"chapterOrder":6791,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0300-dui-xiang-mo-xing-yu-this-zhi-zhen","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0300-对象模型与this指针","對象模型與this指針","1400-0300",{"path":6793,"stem":6794,"title":6795,"date":6695,"chapterOrder":6796,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0400-you-yuan-yu-yun-suan-fu-zhong-zai","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0400-友元与运算符重载","友元與運算符重載","1400-0400",{"path":6798,"stem":6799,"title":6800,"date":6695,"chapterOrder":6801,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","繼承","1400-0500",{"path":6803,"stem":6804,"title":6805,"date":6695,"chapterOrder":6806,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","多態","1400-0600",{"path":6808,"stem":6809,"title":6810,"date":6695,"chapterOrder":6811,"chapterDepth":6693,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","類和對象","1400",{"path":6813,"stem":6814,"title":6815,"date":6695,"chapterOrder":6816,"chapterDepth":6693,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","文件操作","1500",{"path":6692,"stem":6709,"title":5,"date":6695,"chapterOrder":6694,"chapterDepth":6693,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},{"path":6819,"stem":6820,"title":6821,"date":6695,"chapterOrder":6822,"chapterDepth":6693,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","模板","1700",{"path":6824,"stem":6825,"title":6826,"date":6695,"chapterOrder":6827,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","STL初識","1800-0100",{"path":6829,"stem":6830,"title":6831,"date":6695,"chapterOrder":6832,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0200-std-array","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0200-std-array","std::array","1800-0200",{"path":6834,"stem":6835,"title":6836,"date":6695,"chapterOrder":6837,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string容器","1800-0300",{"path":6839,"stem":6840,"title":6841,"date":6695,"chapterOrder":6842,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-rong-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector容器","vector 容器","1800-0400",{"path":6844,"stem":6845,"title":6846,"date":6695,"chapterOrder":6847,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-deque-rong-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-deque容器","deque 容器","1800-0500",{"path":6849,"stem":6850,"title":6851,"date":6695,"chapterOrder":6852,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-stack-rong-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-stack容器","stack 容器","1800-0600",{"path":6854,"stem":6855,"title":6856,"date":6695,"chapterOrder":6857,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-queue-rong-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-queue容器","queue 容器","1800-0700",{"path":6859,"stem":6860,"title":6861,"date":6695,"chapterOrder":6862,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-list-rong-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-list容器","list 容器","1800-0800",{"path":6864,"stem":6865,"title":6866,"date":6695,"chapterOrder":6867,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0900-set-rong-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0900-set容器","set \u002F multiset 容器","1800-0900",{"path":6869,"stem":6870,"title":6871,"date":6695,"chapterOrder":6872,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1000-map-rong-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1000-map容器","map \u002F multimap 容器","1800-1000",{"path":6874,"stem":6875,"title":6876,"date":6695,"chapterOrder":6877,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1100-han-shu-dui-xiang-yu-wei-ci","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1100-函数对象与谓词","函數對象與謂詞","1800-1100",{"path":6879,"stem":6880,"title":6881,"date":6695,"chapterOrder":6882,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1200-chang-yong-suan-fa","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1200-常用算法","常用算法","1800-1200",{"path":6884,"stem":6885,"title":6886,"date":6695,"chapterOrder":6887,"chapterDepth":6693,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","STL提高編程","1800",{"path":6889,"stem":6890,"title":6891,"date":6695,"chapterOrder":6892,"chapterDepth":6693,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++類型轉換","1900",{"path":6894,"stem":6895,"title":6896,"date":6695,"chapterOrder":6897,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","auto","2000-0100",{"path":6899,"stem":6900,"title":6901,"date":6695,"chapterOrder":6902,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","nullptr","2000-0200",{"path":6904,"stem":6905,"title":185,"date":6695,"chapterOrder":6906,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","2000-0300",{"path":6908,"stem":6909,"title":6910,"date":6695,"chapterOrder":6911,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0400-enum-class","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0400-enum-class","enum class","2000-0400",{"path":6913,"stem":6914,"title":6915,"date":6695,"chapterOrder":6916,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0500-fan-wei-for-xun-huan","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0500-范围for循环","範圍 for 循環","2000-0500",{"path":6918,"stem":6919,"title":6920,"date":6695,"chapterOrder":6921,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","結構化綁定","2000-0600",{"path":6923,"stem":6924,"title":6925,"date":6695,"chapterOrder":6926,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","constexpr","2000-0700",{"path":6928,"stem":6929,"title":6930,"date":6695,"chapterOrder":6931,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII","2000-0800",{"path":6933,"stem":6934,"title":6935,"date":6695,"chapterOrder":6936,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","智能指針","2000-0900",{"path":6938,"stem":6939,"title":6940,"date":6695,"chapterOrder":6941,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义","右值引用和移動語義","2000-1000",{"path":6943,"stem":6944,"title":6945,"date":6695,"chapterOrder":6946,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","Lambda 表達式","2000-1100",{"path":6948,"stem":6949,"title":6950,"date":6695,"chapterOrder":6951,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","std::function","2000-1200",{"path":6953,"stem":6954,"title":6955,"date":6695,"chapterOrder":6956,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","std::bind","2000-1300",{"path":6958,"stem":6959,"title":6960,"date":6695,"chapterOrder":6961,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional","std::optional","2000-1400",{"path":6963,"stem":6964,"title":6965,"date":6695,"chapterOrder":6966,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1500-std-variant","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1500-std-variant","std::variant","2000-1500",{"path":6968,"stem":6969,"title":6970,"date":6695,"chapterOrder":6971,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1600-std-span","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1600-std-span","std::span","2000-1600",{"path":6973,"stem":6974,"title":6975,"date":6695,"chapterOrder":6976,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1700-std-format-print","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1700-std-format-print","std::format \u002F std::print","2000-1700",{"path":6978,"stem":6979,"title":6980,"date":6695,"chapterOrder":6981,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1800-std-chrono","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1800-std-chrono","std::chrono","2000-1800",{"path":6983,"stem":6984,"title":6985,"date":6695,"chapterOrder":6986,"chapterDepth":120,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0100-std-thread","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0100-std-thread","std::thread 與 join","2000-1900-0100",{"path":6988,"stem":6989,"title":6990,"date":6695,"chapterOrder":6991,"chapterDepth":120,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-mutex-lock-guard","mutex 與 lock_guard","2000-1900-0200",{"path":6993,"stem":6994,"title":6995,"date":6695,"chapterOrder":6996,"chapterDepth":120,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0300-std-atomic","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0300-std-atomic","std::atomic","2000-1900-0300",{"path":6998,"stem":6999,"title":7000,"date":6695,"chapterOrder":7001,"chapterDepth":120,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0400-condition-variable","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0400-condition-variable","condition_variable","2000-1900-0400",{"path":7003,"stem":7004,"title":7005,"date":6695,"chapterOrder":7006,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bian-cheng","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发编程","併發編程","2000-1900",{"path":7008,"stem":7009,"title":7010,"date":6695,"chapterOrder":7011,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2000-std-filesystem","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2000-std-filesystem","std::filesystem","2000-2000",{"path":7013,"stem":7014,"title":7015,"date":6695,"chapterOrder":7016,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","modules 簡介","2000-2100",{"path":7018,"stem":7019,"title":7020,"date":6695,"chapterOrder":7021,"chapterDepth":6693,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","現代C++","2000",{"path":7023,"stem":7024,"title":7025,"date":6695,"chapterOrder":7026,"chapterDepth":120,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0100-ding-shi-qi-yu-yi-bu-io","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0100-定时器与异步IO","定時器與異步 IO","2100-0100-0100",{"path":7028,"stem":7029,"title":7030,"date":6695,"chapterOrder":7031,"chapterDepth":120,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0200-boost-asio-ji-chu","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0200-Boost.Asio基础","Boost.Asio 基礎","2100-0100-0200",{"path":7033,"stem":7034,"title":7035,"date":6695,"chapterOrder":7036,"chapterDepth":120,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0300-chuan-kou-tong-xin","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0300-串口通信","串口通信","2100-0100-0300",{"path":7038,"stem":7039,"title":7040,"date":6695,"chapterOrder":7041,"chapterDepth":120,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0400-tcp-tong-xin","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0400-TCP通信","TCP 通信","2100-0100-0400",{"path":7043,"stem":7044,"title":7045,"date":6695,"chapterOrder":7046,"chapterDepth":120,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0500-udp-tong-xin","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0500-UDP通信","UDP 通信","2100-0100-0500",{"path":7048,"stem":7049,"title":7050,"date":6695,"chapterOrder":7051,"chapterDepth":120,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0600-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0600-机器人工程写法与ROS2集成","機器人工程寫法與 ROS2 集成","2100-0100-0600",{"path":7053,"stem":7054,"title":7055,"date":6695,"chapterOrder":7056,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","Boost.Asio異步IO庫","2100-0100",{"path":7058,"stem":7059,"title":7060,"date":6695,"chapterOrder":7061,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0200-eigen-xian-xing-dai-shu-ku","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0200-Eigen线性代数库","Eigen線性代數庫","2100-0200",{"path":7063,"stem":7064,"title":7065,"date":6695,"chapterOrder":7066,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0300-opencv-ji-suan-ji-shi-jue-ku","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0300-OpenCV计算机视觉库","OpenCV計算機視覺庫","2100-0300",{"path":7068,"stem":7069,"title":7070,"date":6695,"chapterOrder":7071,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0400-pcl-dian-yun-ku","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0400-PCL点云库","PCL點雲庫","2100-0400",{"path":7073,"stem":7074,"title":7075,"date":6695,"chapterOrder":7076,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0500-sophus-li-qun-li-dai-shu-ku","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0500-Sophus李群李代数库","Sophus 李群李代數庫","2100-0500",{"path":7078,"stem":7079,"title":7080,"date":6695,"chapterOrder":7081,"chapterDepth":6693,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","常用庫學習","2100",{"path":7083,"stem":7084,"title":7085,"date":6695,"chapterOrder":7086,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0100-cmakepresets-yu-gou-jian-an-zhuang","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0100-CMakePresets与构建安装","CMakePresets與構建安裝","2200-0100",{"path":7088,"stem":7089,"title":7090,"date":6695,"chapterOrder":7091,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项","頂層CMake與公共編譯選項","2200-0200",{"path":7093,"stem":7094,"title":7095,"date":6695,"chapterOrder":7096,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0300-src-yu-lib-mo-kuai-cmake-xiang-jie","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0300-src与lib模块CMake详解","src與lib模塊CMake詳解","2200-0300",{"path":7098,"stem":7099,"title":7100,"date":6695,"chapterOrder":7101,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法","第三方庫依賴寫法","2200-0400",{"path":7103,"stem":7104,"title":7105,"date":6695,"chapterOrder":7106,"chapterDepth":113,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0500-mu-ban-kuo-zhan-yu-chang-jian-wen-ti","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0500-模板扩展与常见问题","模板擴展與常見問題","2200-0500",{"path":7108,"stem":7109,"title":7110,"date":6695,"chapterOrder":7111,"chapterDepth":6693,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":6702},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake工程模板","2200",{"path":6698,"stem":7113,"title":7114,"date":6695,"chapterOrder":6703,"chapterDepth":6693,"docKey":6697,"docRoot":6698,"docTitle":6699,"isWikiDoc":200,"isWikiIndex":200},"_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++教程",{"variants":7116},[7117,7120,7123,7126,7127],{"path":7118,"localeSlug":7119,"i18nKey":6701},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","en-us",{"path":7121,"localeSlug":7122,"i18nKey":6701},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","zh-hant",{"path":7124,"localeSlug":7125,"i18nKey":6701},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","zh-hk",{"path":6692,"localeSlug":6705,"i18nKey":6701},{"path":7128,"localeSlug":7129,"i18nKey":6701},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","zh-cn",[7118,6708,7121,6708,7124,6708,6692,6708,7128,6708],1784646890795]