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