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