[{"data":1,"prerenderedAt":1492},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard":3,"wiki-doc-items-2023-10-05-cplusplus-jiao-xue":1106},{"id":4,"title":5,"body":6,"chapterDepth":65,"chapterOrder":1094,"date":1095,"description":47,"docKey":1096,"docRoot":1097,"docTitle":1098,"extension":1099,"isWikiDoc":84,"isWikiIndex":1100,"meta":1101,"navigation":84,"path":1102,"seo":1103,"stem":1104,"wikiDepth":54,"__hash__":1105},"wiki\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-mutex-lock-guard.md","mutex 与 lock_guard",{"type":7,"value":8,"toc":1084},"minimark",[9,13,22,33,36,41,418,425,433,437,440,945,949,955,959,1008,1023,1026,1058,1061,1080],[10,11,12],"h2",{"id":12},"本节解决什么问题",[14,15,16,17,21],"p",{},"多个线程同时修改同一个变量时，",[18,19,20],"code",{},"++counter"," 并不是一个不可分割的动作。它通常包含读取、加一、写回几个步骤。两个线程交错执行时，就会产生数据竞争。",[14,23,24,25,28,29,32],{},"保护共享数据最常见的做法是：用 ",[18,26,27],{},"std::mutex"," 互斥锁，加锁后只有一个线程能进入临界区。",[18,30,31],{},"std::lock_guard"," 是 RAII 锁，构造时加锁，离开作用域时自动解锁。",[10,34,35],{"id":35},"示例代码",[37,38,40],"h3",{"id":39},"示例-1用-mutex-和-lock_guard-保护共享计数器","示例 1：用 mutex 和 lock_guard 保护共享计数器",[42,43,48],"pre",{"className":44,"code":45,"language":46,"meta":47,"style":47},"language-cpp shiki shiki-themes github-light github-dark","#include \u003Ciostream>\n#include \u003Cmutex>\n#include \u003Cthread>\n\nint counter = 0;\n\u002F\u002F 加锁用来保护共享数据，避免多个线程同时修改造成数据竞争。\nstd::mutex counter_mutex;\n\nvoid add_many(int times)\n{\n    for (int i = 0; i \u003C times; ++i)\n    {\n        std::lock_guard\u003Cstd::mutex> lock(counter_mutex);\n        ++counter;\n    }\n}\n\nint main()\n{\n    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    \u002F\u002F 创建子线程，让这部分代码和 main 线程并发运行。\n    std::thread t1(add_many, 100000);\n    std::thread t2(add_many, 100000);\n\n    \u002F\u002F join 会等待子线程结束，避免 main 提前退出。\n    t1.join();\n    t2.join();\n\n    std::cout \u003C\u003C \"counter = \" \u003C\u003C counter \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"expected = 200000\\n\";\n\n    return 0;\n}\n","cpp","",[18,49,50,63,71,79,86,106,113,123,128,149,155,188,194,219,228,234,240,245,256,261,267,273,294,310,315,321,333,343,348,380,398,403,413],{"__ignoreMap":47},[51,52,55,59],"span",{"class":53,"line":54},"line",1,[51,56,58],{"class":57},"szBVR","#include",[51,60,62],{"class":61},"sZZnC"," \u003Ciostream>\n",[51,64,66,68],{"class":53,"line":65},2,[51,67,58],{"class":57},[51,69,70],{"class":61}," \u003Cmutex>\n",[51,72,74,76],{"class":53,"line":73},3,[51,75,58],{"class":57},[51,77,78],{"class":61}," \u003Cthread>\n",[51,80,82],{"class":53,"line":81},4,[51,83,85],{"emptyLinePlaceholder":84},true,"\n",[51,87,89,92,96,99,103],{"class":53,"line":88},5,[51,90,91],{"class":57},"int",[51,93,95],{"class":94},"sVt8B"," counter ",[51,97,98],{"class":57},"=",[51,100,102],{"class":101},"sj4cs"," 0",[51,104,105],{"class":94},";\n",[51,107,109],{"class":53,"line":108},6,[51,110,112],{"class":111},"sJ8bj","\u002F\u002F 加锁用来保护共享数据，避免多个线程同时修改造成数据竞争。\n",[51,114,116,120],{"class":53,"line":115},7,[51,117,119],{"class":118},"sScJk","std",[51,121,122],{"class":94},"::mutex counter_mutex;\n",[51,124,126],{"class":53,"line":125},8,[51,127,85],{"emptyLinePlaceholder":84},[51,129,131,134,137,140,142,146],{"class":53,"line":130},9,[51,132,133],{"class":57},"void",[51,135,136],{"class":118}," add_many",[51,138,139],{"class":94},"(",[51,141,91],{"class":57},[51,143,145],{"class":144},"s4XuR"," times",[51,147,148],{"class":94},")\n",[51,150,152],{"class":53,"line":151},10,[51,153,154],{"class":94},"{\n",[51,156,158,161,164,166,169,171,173,176,179,182,185],{"class":53,"line":157},11,[51,159,160],{"class":57},"    for",[51,162,163],{"class":94}," (",[51,165,91],{"class":57},[51,167,168],{"class":94}," i ",[51,170,98],{"class":57},[51,172,102],{"class":101},[51,174,175],{"class":94},"; i ",[51,177,178],{"class":57},"\u003C",[51,180,181],{"class":94}," times; ",[51,183,184],{"class":57},"++",[51,186,187],{"class":94},"i)\n",[51,189,191],{"class":53,"line":190},12,[51,192,193],{"class":94},"    {\n",[51,195,197,200,203,205,207,210,213,216],{"class":53,"line":196},13,[51,198,199],{"class":118},"        std",[51,201,202],{"class":94},"::lock_guard",[51,204,178],{"class":57},[51,206,119],{"class":118},[51,208,209],{"class":94},"::mutex",[51,211,212],{"class":57},">",[51,214,215],{"class":118}," lock",[51,217,218],{"class":94},"(counter_mutex);\n",[51,220,222,225],{"class":53,"line":221},14,[51,223,224],{"class":57},"        ++",[51,226,227],{"class":94},"counter;\n",[51,229,231],{"class":53,"line":230},15,[51,232,233],{"class":94},"    }\n",[51,235,237],{"class":53,"line":236},16,[51,238,239],{"class":94},"}\n",[51,241,243],{"class":53,"line":242},17,[51,244,85],{"emptyLinePlaceholder":84},[51,246,248,250,253],{"class":53,"line":247},18,[51,249,91],{"class":57},[51,251,252],{"class":118}," main",[51,254,255],{"class":94},"()\n",[51,257,259],{"class":53,"line":258},19,[51,260,154],{"class":94},[51,262,264],{"class":53,"line":263},20,[51,265,266],{"class":111},"    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n",[51,268,270],{"class":53,"line":269},21,[51,271,272],{"class":111},"    \u002F\u002F 创建子线程，让这部分代码和 main 线程并发运行。\n",[51,274,276,279,282,285,288,291],{"class":53,"line":275},22,[51,277,278],{"class":118},"    std",[51,280,281],{"class":94},"::thread ",[51,283,284],{"class":118},"t1",[51,286,287],{"class":94},"(add_many, ",[51,289,290],{"class":101},"100000",[51,292,293],{"class":94},");\n",[51,295,297,299,301,304,306,308],{"class":53,"line":296},23,[51,298,278],{"class":118},[51,300,281],{"class":94},[51,302,303],{"class":118},"t2",[51,305,287],{"class":94},[51,307,290],{"class":101},[51,309,293],{"class":94},[51,311,313],{"class":53,"line":312},24,[51,314,85],{"emptyLinePlaceholder":84},[51,316,318],{"class":53,"line":317},25,[51,319,320],{"class":111},"    \u002F\u002F join 会等待子线程结束，避免 main 提前退出。\n",[51,322,324,327,330],{"class":53,"line":323},26,[51,325,326],{"class":94},"    t1.",[51,328,329],{"class":118},"join",[51,331,332],{"class":94},"();\n",[51,334,336,339,341],{"class":53,"line":335},27,[51,337,338],{"class":94},"    t2.",[51,340,329],{"class":118},[51,342,332],{"class":94},[51,344,346],{"class":53,"line":345},28,[51,347,85],{"emptyLinePlaceholder":84},[51,349,351,353,356,359,362,365,367,369,372,375,378],{"class":53,"line":350},29,[51,352,278],{"class":118},[51,354,355],{"class":94},"::cout ",[51,357,358],{"class":57},"\u003C\u003C",[51,360,361],{"class":61}," \"counter = \"",[51,363,364],{"class":57}," \u003C\u003C",[51,366,95],{"class":94},[51,368,358],{"class":57},[51,370,371],{"class":61}," \"",[51,373,374],{"class":101},"\\n",[51,376,377],{"class":61},"\"",[51,379,105],{"class":94},[51,381,383,385,387,389,392,394,396],{"class":53,"line":382},30,[51,384,278],{"class":118},[51,386,355],{"class":94},[51,388,358],{"class":57},[51,390,391],{"class":61}," \"expected = 200000",[51,393,374],{"class":101},[51,395,377],{"class":61},[51,397,105],{"class":94},[51,399,401],{"class":53,"line":400},31,[51,402,85],{"emptyLinePlaceholder":84},[51,404,406,409,411],{"class":53,"line":405},32,[51,407,408],{"class":57},"    return",[51,410,102],{"class":101},[51,412,105],{"class":94},[51,414,416],{"class":53,"line":415},33,[51,417,239],{"class":94},[14,419,420,424],{},[421,422,423],"strong",{},"运行结果","：",[42,426,431],{"className":427,"code":429,"language":430,"meta":47},[428],"language-text","counter = 200000\nexpected = 200000\n","text",[18,432,429],{"__ignoreMap":47},[37,434,436],{"id":435},"示例-2锁的作用域要尽量小","示例 2：锁的作用域要尽量小",[14,438,439],{},"这个例子里，线程先在锁外准备数据，只有更新共享总数时才加锁。这样另一个线程不用在无关工作上等待。",[42,441,443],{"className":44,"code":442,"language":46,"meta":47,"style":47},"#include \u003Ciostream>\n#include \u003Cmutex>\n#include \u003Cthread>\n#include \u003Cvector>\n\nint total = 0;\n\u002F\u002F 加锁用来保护共享数据，避免多个线程同时修改造成数据竞争。\nstd::mutex total_mutex;\n\nint sum_part(const std::vector\u003Cint>& data, int begin, int end)\n{\n    int local_sum = 0;\n    for (int i = begin; i \u003C end; ++i)\n    {\n        local_sum += data[i];\n    }\n    return local_sum;\n}\n\nvoid worker(const std::vector\u003Cint>& data, int begin, int end)\n{\n    int local_sum = sum_part(data, begin, end);\n\n    {\n        std::lock_guard\u003Cstd::mutex> lock(total_mutex);\n        total += local_sum;\n    }\n}\n\nint main()\n{\n    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    std::vector\u003Cint> data = {1, 2, 3, 4, 5, 6};\n\n    \u002F\u002F 创建子线程，让这部分代码和 main 线程并发运行。\n    std::thread t1(worker, std::cref(data), 0, 3);\n    std::thread t2(worker, std::cref(data), 3, 6);\n\n    \u002F\u002F join 会等待子线程结束，避免 main 提前退出。\n    t1.join();\n    t2.join();\n\n    std::cout \u003C\u003C \"total = \" \u003C\u003C total \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[18,444,445,451,457,463,470,474,487,491,498,502,552,556,570,594,598,609,613,620,624,628,669,673,686,690,694,713,722,726,730,734,742,746,750,799,804,809,840,867,872,877,886,895,900,926,931,940],{"__ignoreMap":47},[51,446,447,449],{"class":53,"line":54},[51,448,58],{"class":57},[51,450,62],{"class":61},[51,452,453,455],{"class":53,"line":65},[51,454,58],{"class":57},[51,456,70],{"class":61},[51,458,459,461],{"class":53,"line":73},[51,460,58],{"class":57},[51,462,78],{"class":61},[51,464,465,467],{"class":53,"line":81},[51,466,58],{"class":57},[51,468,469],{"class":61}," \u003Cvector>\n",[51,471,472],{"class":53,"line":88},[51,473,85],{"emptyLinePlaceholder":84},[51,475,476,478,481,483,485],{"class":53,"line":108},[51,477,91],{"class":57},[51,479,480],{"class":94}," total ",[51,482,98],{"class":57},[51,484,102],{"class":101},[51,486,105],{"class":94},[51,488,489],{"class":53,"line":115},[51,490,112],{"class":111},[51,492,493,495],{"class":53,"line":125},[51,494,119],{"class":118},[51,496,497],{"class":94},"::mutex total_mutex;\n",[51,499,500],{"class":53,"line":130},[51,501,85],{"emptyLinePlaceholder":84},[51,503,504,506,509,511,514,517,520,523,525,527,529,532,535,538,540,543,545,547,550],{"class":53,"line":151},[51,505,91],{"class":57},[51,507,508],{"class":118}," sum_part",[51,510,139],{"class":94},[51,512,513],{"class":57},"const",[51,515,516],{"class":118}," std",[51,518,519],{"class":94},"::",[51,521,522],{"class":118},"vector",[51,524,178],{"class":94},[51,526,91],{"class":57},[51,528,212],{"class":94},[51,530,531],{"class":57},"&",[51,533,534],{"class":144}," data",[51,536,537],{"class":94},", ",[51,539,91],{"class":57},[51,541,542],{"class":144}," begin",[51,544,537],{"class":94},[51,546,91],{"class":57},[51,548,549],{"class":144}," end",[51,551,148],{"class":94},[51,553,554],{"class":53,"line":157},[51,555,154],{"class":94},[51,557,558,561,564,566,568],{"class":53,"line":190},[51,559,560],{"class":57},"    int",[51,562,563],{"class":94}," local_sum ",[51,565,98],{"class":57},[51,567,102],{"class":101},[51,569,105],{"class":94},[51,571,572,574,576,578,580,582,585,587,590,592],{"class":53,"line":196},[51,573,160],{"class":57},[51,575,163],{"class":94},[51,577,91],{"class":57},[51,579,168],{"class":94},[51,581,98],{"class":57},[51,583,584],{"class":94}," begin; i ",[51,586,178],{"class":57},[51,588,589],{"class":94}," end; ",[51,591,184],{"class":57},[51,593,187],{"class":94},[51,595,596],{"class":53,"line":221},[51,597,193],{"class":94},[51,599,600,603,606],{"class":53,"line":230},[51,601,602],{"class":94},"        local_sum ",[51,604,605],{"class":57},"+=",[51,607,608],{"class":94}," data[i];\n",[51,610,611],{"class":53,"line":236},[51,612,233],{"class":94},[51,614,615,617],{"class":53,"line":242},[51,616,408],{"class":57},[51,618,619],{"class":94}," local_sum;\n",[51,621,622],{"class":53,"line":247},[51,623,239],{"class":94},[51,625,626],{"class":53,"line":258},[51,627,85],{"emptyLinePlaceholder":84},[51,629,630,632,635,637,639,641,643,645,647,649,651,653,655,657,659,661,663,665,667],{"class":53,"line":263},[51,631,133],{"class":57},[51,633,634],{"class":118}," worker",[51,636,139],{"class":94},[51,638,513],{"class":57},[51,640,516],{"class":118},[51,642,519],{"class":94},[51,644,522],{"class":118},[51,646,178],{"class":94},[51,648,91],{"class":57},[51,650,212],{"class":94},[51,652,531],{"class":57},[51,654,534],{"class":144},[51,656,537],{"class":94},[51,658,91],{"class":57},[51,660,542],{"class":144},[51,662,537],{"class":94},[51,664,91],{"class":57},[51,666,549],{"class":144},[51,668,148],{"class":94},[51,670,671],{"class":53,"line":269},[51,672,154],{"class":94},[51,674,675,677,679,681,683],{"class":53,"line":275},[51,676,560],{"class":57},[51,678,563],{"class":94},[51,680,98],{"class":57},[51,682,508],{"class":118},[51,684,685],{"class":94},"(data, begin, end);\n",[51,687,688],{"class":53,"line":296},[51,689,85],{"emptyLinePlaceholder":84},[51,691,692],{"class":53,"line":312},[51,693,193],{"class":94},[51,695,696,698,700,702,704,706,708,710],{"class":53,"line":317},[51,697,199],{"class":118},[51,699,202],{"class":94},[51,701,178],{"class":57},[51,703,119],{"class":118},[51,705,209],{"class":94},[51,707,212],{"class":57},[51,709,215],{"class":118},[51,711,712],{"class":94},"(total_mutex);\n",[51,714,715,718,720],{"class":53,"line":323},[51,716,717],{"class":94},"        total ",[51,719,605],{"class":57},[51,721,619],{"class":94},[51,723,724],{"class":53,"line":335},[51,725,233],{"class":94},[51,727,728],{"class":53,"line":345},[51,729,239],{"class":94},[51,731,732],{"class":53,"line":350},[51,733,85],{"emptyLinePlaceholder":84},[51,735,736,738,740],{"class":53,"line":382},[51,737,91],{"class":57},[51,739,252],{"class":118},[51,741,255],{"class":94},[51,743,744],{"class":53,"line":400},[51,745,154],{"class":94},[51,747,748],{"class":53,"line":405},[51,749,266],{"class":111},[51,751,752,754,757,760,763,765,768,771,773,776,778,781,783,786,788,791,793,796],{"class":53,"line":415},[51,753,278],{"class":118},[51,755,756],{"class":94},"::vector",[51,758,759],{"class":57},"\u003Cint>",[51,761,762],{"class":94}," data ",[51,764,98],{"class":57},[51,766,767],{"class":94}," {",[51,769,770],{"class":101},"1",[51,772,537],{"class":94},[51,774,775],{"class":101},"2",[51,777,537],{"class":94},[51,779,780],{"class":101},"3",[51,782,537],{"class":94},[51,784,785],{"class":101},"4",[51,787,537],{"class":94},[51,789,790],{"class":101},"5",[51,792,537],{"class":94},[51,794,795],{"class":101},"6",[51,797,798],{"class":94},"};\n",[51,800,802],{"class":53,"line":801},34,[51,803,85],{"emptyLinePlaceholder":84},[51,805,807],{"class":53,"line":806},35,[51,808,272],{"class":111},[51,810,812,814,816,818,821,823,825,828,831,834,836,838],{"class":53,"line":811},36,[51,813,278],{"class":118},[51,815,281],{"class":94},[51,817,284],{"class":118},[51,819,820],{"class":94},"(worker, ",[51,822,119],{"class":118},[51,824,519],{"class":94},[51,826,827],{"class":118},"cref",[51,829,830],{"class":94},"(data), ",[51,832,833],{"class":101},"0",[51,835,537],{"class":94},[51,837,780],{"class":101},[51,839,293],{"class":94},[51,841,843,845,847,849,851,853,855,857,859,861,863,865],{"class":53,"line":842},37,[51,844,278],{"class":118},[51,846,281],{"class":94},[51,848,303],{"class":118},[51,850,820],{"class":94},[51,852,119],{"class":118},[51,854,519],{"class":94},[51,856,827],{"class":118},[51,858,830],{"class":94},[51,860,780],{"class":101},[51,862,537],{"class":94},[51,864,795],{"class":101},[51,866,293],{"class":94},[51,868,870],{"class":53,"line":869},38,[51,871,85],{"emptyLinePlaceholder":84},[51,873,875],{"class":53,"line":874},39,[51,876,320],{"class":111},[51,878,880,882,884],{"class":53,"line":879},40,[51,881,326],{"class":94},[51,883,329],{"class":118},[51,885,332],{"class":94},[51,887,889,891,893],{"class":53,"line":888},41,[51,890,338],{"class":94},[51,892,329],{"class":118},[51,894,332],{"class":94},[51,896,898],{"class":53,"line":897},42,[51,899,85],{"emptyLinePlaceholder":84},[51,901,903,905,907,909,912,914,916,918,920,922,924],{"class":53,"line":902},43,[51,904,278],{"class":118},[51,906,355],{"class":94},[51,908,358],{"class":57},[51,910,911],{"class":61}," \"total = \"",[51,913,364],{"class":57},[51,915,480],{"class":94},[51,917,358],{"class":57},[51,919,371],{"class":61},[51,921,374],{"class":101},[51,923,377],{"class":61},[51,925,105],{"class":94},[51,927,929],{"class":53,"line":928},44,[51,930,85],{"emptyLinePlaceholder":84},[51,932,934,936,938],{"class":53,"line":933},45,[51,935,408],{"class":57},[51,937,102],{"class":101},[51,939,105],{"class":94},[51,941,943],{"class":53,"line":942},46,[51,944,239],{"class":94},[14,946,947,424],{},[421,948,423],{},[42,950,953],{"className":951,"code":952,"language":430,"meta":47},[428],"total = 21\n",[18,954,952],{"__ignoreMap":47},[10,956,958],{"id":957},"lock_guard-和-unique_lock-的区别","lock_guard 和 unique_lock 的区别",[960,961,962,979],"table",{},[963,964,965],"thead",{},[966,967,968,973,976],"tr",{},[969,970,972],"th",{"align":971},"left","锁类型",[969,974,975],{"align":971},"特点",[969,977,978],{"align":971},"常见用途",[980,981,982,995],"tbody",{},[966,983,984,989,992],{},[985,986,987],"td",{"align":971},[18,988,31],{},[985,990,991],{"align":971},"简单，构造加锁，析构解锁，不能手动解锁",[985,993,994],{"align":971},"保护一小段共享数据访问",[966,996,997,1002,1005],{},[985,998,999],{"align":971},[18,1000,1001],{},"std::unique_lock",[985,1003,1004],{"align":971},"可延迟加锁、手动解锁、转移所有权",[985,1006,1007],{"align":971},"条件变量、需要提前释放锁的场景",[14,1009,1010,1011,1014,1015,1018,1019,1022],{},"初学时优先用 ",[18,1012,1013],{},"lock_guard","。只有需要配合 ",[18,1016,1017],{},"condition_variable"," 或者需要更灵活地控制加锁时，再用 ",[18,1020,1021],{},"unique_lock","。",[10,1024,1025],{"id":1025},"常见错误",[1027,1028,1029,1041,1052,1055],"ol",{},[1030,1031,1032,1033,1036,1037,1040],"li",{},"多个线程同时修改共享数据，却没有用 ",[18,1034,1035],{},"mutex"," 或 ",[18,1038,1039],{},"atomic"," 保护。",[1030,1042,1043,1044,1047,1048,1051],{},"手动 ",[18,1045,1046],{},"lock()"," 后忘记 ",[18,1049,1050],{},"unlock()","，或者中途异常导致无法解锁。",[1030,1053,1054],{},"持有锁时做耗时操作，比如睡眠、网络请求、文件 IO。",[1030,1056,1057],{},"锁保护的范围太小，读写共享数据的某些路径漏掉了锁。",[10,1059,1060],{"id":1060},"小结",[1062,1063,1064,1067,1072,1077],"ul",{},[1030,1065,1066],{},"共享数据需要同步保护。",[1030,1068,1069,1071],{},[18,1070,27],{}," 提供互斥访问。",[1030,1073,1074,1076],{},[18,1075,31],{}," 是 RAII 锁，构造加锁，析构解锁。",[1030,1078,1079],{},"锁的作用域越小越好，但必须完整覆盖共享数据访问。",[1081,1082,1083],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}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 .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);}",{"title":47,"searchDepth":65,"depth":65,"links":1085},[1086,1087,1091,1092,1093],{"id":12,"depth":65,"text":12},{"id":35,"depth":65,"text":35,"children":1088},[1089,1090],{"id":39,"depth":73,"text":40},{"id":435,"depth":73,"text":436},{"id":957,"depth":65,"text":958},{"id":1025,"depth":65,"text":1025},{"id":1060,"depth":65,"text":1060},"2000-1900-0200","2023-10-05","2023-10-05-cplusplus-jiao-xue","\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md",false,{},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard",{"title":5,"description":47},"wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-mutex-lock-guard","OiIoyAj-PY54gyVyXGith5wMpmxobj_mi7L9-dhEBYA",[1107,1113,1118,1123,1128,1133,1138,1143,1148,1153,1158,1163,1168,1173,1178,1183,1188,1193,1198,1203,1208,1213,1218,1223,1228,1233,1238,1243,1248,1253,1258,1263,1268,1273,1278,1283,1288,1293,1298,1303,1308,1313,1318,1323,1328,1333,1338,1343,1348,1353,1358,1363,1368,1369,1374,1378,1383,1388,1393,1398,1403,1408,1413,1418,1423,1428,1433,1438,1443,1448,1453,1458,1463,1468,1473,1478,1483,1488],{"path":1108,"stem":1109,"title":1110,"date":1095,"chapterOrder":1111,"chapterDepth":1112,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F0100-C++开发环境搭建与测试","C++开发环境搭建与测试","0100",0,{"path":1114,"stem":1115,"title":1116,"date":1095,"chapterOrder":1117,"chapterDepth":1112,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++基础初识","0200",{"path":1119,"stem":1120,"title":1121,"date":1095,"chapterOrder":1122,"chapterDepth":1112,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0300-shu-ju-lei-xing-yu-shu-ju-cun-fang","wiki\u002F2023-10-05-Cplusplus教学\u002F0300-数据类型与数据存放","数据类型与数据存放","0300",{"path":1124,"stem":1125,"title":1126,"date":1095,"chapterOrder":1127,"chapterDepth":1112,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","wiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","输入输出","0400",{"path":1129,"stem":1130,"title":1131,"date":1095,"chapterOrder":1132,"chapterDepth":1112,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","wiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","运算符","0500",{"path":1134,"stem":1135,"title":1136,"date":1095,"chapterOrder":1137,"chapterDepth":1112,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","wiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","程序流程结构","0600",{"path":1139,"stem":1140,"title":1141,"date":1095,"chapterOrder":1142,"chapterDepth":1112,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","wiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","数组","0700",{"path":1144,"stem":1145,"title":1146,"date":1095,"chapterOrder":1147,"chapterDepth":1112,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","函数与头文件","0800",{"path":1149,"stem":1150,"title":1151,"date":1095,"chapterOrder":1152,"chapterDepth":1112,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","指针","0900",{"path":1154,"stem":1155,"title":1156,"date":1095,"chapterOrder":1157,"chapterDepth":1112,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","wiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","结构体与共用体","1000",{"path":1159,"stem":1160,"title":1161,"date":1095,"chapterOrder":1162,"chapterDepth":1112,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1100-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1100-内存分区与生命周期","内存分区与生命周期","1100",{"path":1164,"stem":1165,"title":1166,"date":1095,"chapterOrder":1167,"chapterDepth":1112,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","wiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","引用","1200",{"path":1169,"stem":1170,"title":1171,"date":1095,"chapterOrder":1172,"chapterDepth":1112,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao-yu-ming-ming-kong-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高与命名空间","函数提高与命名空间","1300",{"path":1174,"stem":1175,"title":1176,"date":1095,"chapterOrder":1177,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","封装","1400-0100",{"path":1179,"stem":1180,"title":1181,"date":1095,"chapterOrder":1182,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0200-dui-xiang-chu-shi-hua-he-qing-li","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0200-对象初始化和清理","对象初始化和清理","1400-0200",{"path":1184,"stem":1185,"title":1186,"date":1095,"chapterOrder":1187,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0300-dui-xiang-mo-xing-yu-this-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0300-对象模型与this指针","对象模型与this指针","1400-0300",{"path":1189,"stem":1190,"title":1191,"date":1095,"chapterOrder":1192,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0400-you-yuan-yu-yun-suan-fu-zhong-zai","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0400-友元与运算符重载","友元与运算符重载","1400-0400",{"path":1194,"stem":1195,"title":1196,"date":1095,"chapterOrder":1197,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","继承","1400-0500",{"path":1199,"stem":1200,"title":1201,"date":1095,"chapterOrder":1202,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","多态","1400-0600",{"path":1204,"stem":1205,"title":1206,"date":1095,"chapterOrder":1207,"chapterDepth":1112,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","类和对象","1400",{"path":1209,"stem":1210,"title":1211,"date":1095,"chapterOrder":1212,"chapterDepth":1112,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","wiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","文件操作","1500",{"path":1214,"stem":1215,"title":1216,"date":1095,"chapterOrder":1217,"chapterDepth":1112,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","wiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","异常处理","1600",{"path":1219,"stem":1220,"title":1221,"date":1095,"chapterOrder":1222,"chapterDepth":1112,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","模板","1700",{"path":1224,"stem":1225,"title":1226,"date":1095,"chapterOrder":1227,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","STL初识","1800-0100",{"path":1229,"stem":1230,"title":1231,"date":1095,"chapterOrder":1232,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0200-std-array","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0200-std-array","std::array","1800-0200",{"path":1234,"stem":1235,"title":1236,"date":1095,"chapterOrder":1237,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string容器","1800-0300",{"path":1239,"stem":1240,"title":1241,"date":1095,"chapterOrder":1242,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-yu-deque-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector与deque容器","vector与deque容器","1800-0400",{"path":1244,"stem":1245,"title":1246,"date":1095,"chapterOrder":1247,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-stack-queue-list-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-stack-queue-list容器","stack \u002F queue \u002F list 容器","1800-0500",{"path":1249,"stem":1250,"title":1251,"date":1095,"chapterOrder":1252,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-set-map-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-set-map容器","set \u002F map 容器","1800-0600",{"path":1254,"stem":1255,"title":1256,"date":1095,"chapterOrder":1257,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-han-shu-dui-xiang-yu-wei-ci","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-函数对象与谓词","函数对象与谓词","1800-0700",{"path":1259,"stem":1260,"title":1261,"date":1095,"chapterOrder":1262,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-chang-yong-suan-fa","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-常用算法","常用算法","1800-0800",{"path":1264,"stem":1265,"title":1266,"date":1095,"chapterOrder":1267,"chapterDepth":1112,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","STL提高编程","1800",{"path":1269,"stem":1270,"title":1271,"date":1095,"chapterOrder":1272,"chapterDepth":1112,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","wiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++类型转换","1900",{"path":1274,"stem":1275,"title":1276,"date":1095,"chapterOrder":1277,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","auto","2000-0100",{"path":1279,"stem":1280,"title":1281,"date":1095,"chapterOrder":1282,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","nullptr","2000-0200",{"path":1284,"stem":1285,"title":1286,"date":1095,"chapterOrder":1287,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","using","2000-0300",{"path":1289,"stem":1290,"title":1291,"date":1095,"chapterOrder":1292,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0400-enum-class","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0400-enum-class","enum class","2000-0400",{"path":1294,"stem":1295,"title":1296,"date":1095,"chapterOrder":1297,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0500-fan-wei-for-xun-huan","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0500-范围for循环","范围 for 循环","2000-0500",{"path":1299,"stem":1300,"title":1301,"date":1095,"chapterOrder":1302,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","结构化绑定","2000-0600",{"path":1304,"stem":1305,"title":1306,"date":1095,"chapterOrder":1307,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","constexpr","2000-0700",{"path":1309,"stem":1310,"title":1311,"date":1095,"chapterOrder":1312,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII","2000-0800",{"path":1314,"stem":1315,"title":1316,"date":1095,"chapterOrder":1317,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","智能指针","2000-0900",{"path":1319,"stem":1320,"title":1321,"date":1095,"chapterOrder":1322,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义","右值引用和移动语义","2000-1000",{"path":1324,"stem":1325,"title":1326,"date":1095,"chapterOrder":1327,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","Lambda 表达式","2000-1100",{"path":1329,"stem":1330,"title":1331,"date":1095,"chapterOrder":1332,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","std::function","2000-1200",{"path":1334,"stem":1335,"title":1336,"date":1095,"chapterOrder":1337,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","std::bind","2000-1300",{"path":1339,"stem":1340,"title":1341,"date":1095,"chapterOrder":1342,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional","std::optional","2000-1400",{"path":1344,"stem":1345,"title":1346,"date":1095,"chapterOrder":1347,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1500-std-variant","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1500-std-variant","std::variant","2000-1500",{"path":1349,"stem":1350,"title":1351,"date":1095,"chapterOrder":1352,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1600-std-span","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1600-std-span","std::span","2000-1600",{"path":1354,"stem":1355,"title":1356,"date":1095,"chapterOrder":1357,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1700-std-format-print","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1700-std-format-print","std::format \u002F std::print","2000-1700",{"path":1359,"stem":1360,"title":1361,"date":1095,"chapterOrder":1362,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1800-std-chrono","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1800-std-chrono","std::chrono","2000-1800",{"path":1364,"stem":1365,"title":1366,"date":1095,"chapterOrder":1367,"chapterDepth":65,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0100-std-thread","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0100-std-thread","std::thread 与 join","2000-1900-0100",{"path":1102,"stem":1104,"title":5,"date":1095,"chapterOrder":1094,"chapterDepth":65,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},{"path":1370,"stem":1371,"title":1372,"date":1095,"chapterOrder":1373,"chapterDepth":65,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0300-std-atomic","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0300-std-atomic","std::atomic","2000-1900-0300",{"path":1375,"stem":1376,"title":1017,"date":1095,"chapterOrder":1377,"chapterDepth":65,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0400-condition-variable","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0400-condition-variable","2000-1900-0400",{"path":1379,"stem":1380,"title":1381,"date":1095,"chapterOrder":1382,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发编程","并发编程","2000-1900",{"path":1384,"stem":1385,"title":1386,"date":1095,"chapterOrder":1387,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2000-std-filesystem","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-2000-std-filesystem","std::filesystem","2000-2000",{"path":1389,"stem":1390,"title":1391,"date":1095,"chapterOrder":1392,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","modules 简介","2000-2100",{"path":1394,"stem":1395,"title":1396,"date":1095,"chapterOrder":1397,"chapterDepth":1112,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","现代C++","2000",{"path":1399,"stem":1400,"title":1401,"date":1095,"chapterOrder":1402,"chapterDepth":65,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0100-ding-shi-qi-yu-yi-bu-io","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0100-定时器与异步IO","定时器与异步 IO","2100-0100-0100",{"path":1404,"stem":1405,"title":1406,"date":1095,"chapterOrder":1407,"chapterDepth":65,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0200-boost-asio-ji-chu","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0200-Boost.Asio基础","Boost.Asio 基础","2100-0100-0200",{"path":1409,"stem":1410,"title":1411,"date":1095,"chapterOrder":1412,"chapterDepth":65,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0300-chuan-kou-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0300-串口通信","串口通信","2100-0100-0300",{"path":1414,"stem":1415,"title":1416,"date":1095,"chapterOrder":1417,"chapterDepth":65,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0400-tcp-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0400-TCP通信","TCP 通信","2100-0100-0400",{"path":1419,"stem":1420,"title":1421,"date":1095,"chapterOrder":1422,"chapterDepth":65,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0500-udp-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0500-UDP通信","UDP 通信","2100-0100-0500",{"path":1424,"stem":1425,"title":1426,"date":1095,"chapterOrder":1427,"chapterDepth":65,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0600-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0600-机器人工程写法与ROS2集成","机器人工程写法与 ROS2 集成","2100-0100-0600",{"path":1429,"stem":1430,"title":1431,"date":1095,"chapterOrder":1432,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","Boost.Asio异步IO库","2100-0100",{"path":1434,"stem":1435,"title":1436,"date":1095,"chapterOrder":1437,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0200-eigen-xian-xing-dai-shu-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0200-Eigen线性代数库","Eigen线性代数库","2100-0200",{"path":1439,"stem":1440,"title":1441,"date":1095,"chapterOrder":1442,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0300-opencv-ji-suan-ji-shi-jue-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0300-OpenCV计算机视觉库","OpenCV计算机视觉库","2100-0300",{"path":1444,"stem":1445,"title":1446,"date":1095,"chapterOrder":1447,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0400-pcl-dian-yun-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0400-PCL点云库","PCL点云库","2100-0400",{"path":1449,"stem":1450,"title":1451,"date":1095,"chapterOrder":1452,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0500-sophus-li-qun-li-dai-shu-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0500-Sophus李群李代数库","Sophus 李群李代数库","2100-0500",{"path":1454,"stem":1455,"title":1456,"date":1095,"chapterOrder":1457,"chapterDepth":1112,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","常用库学习","2100",{"path":1459,"stem":1460,"title":1461,"date":1095,"chapterOrder":1462,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0100-cmakepresets-yu-gou-jian-an-zhuang","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0100-CMakePresets与构建安装","CMakePresets与构建安装","2200-0100",{"path":1464,"stem":1465,"title":1466,"date":1095,"chapterOrder":1467,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项","顶层CMake与公共编译选项","2200-0200",{"path":1469,"stem":1470,"title":1471,"date":1095,"chapterOrder":1472,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0300-src-yu-lib-mo-kuai-cmake-xiang-jie","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0300-src与lib模块CMake详解","src与lib模块CMake详解","2200-0300",{"path":1474,"stem":1475,"title":1476,"date":1095,"chapterOrder":1477,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法","第三方库依赖写法","2200-0400",{"path":1479,"stem":1480,"title":1481,"date":1095,"chapterOrder":1482,"chapterDepth":54,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0500-mu-ban-kuo-zhan-yu-chang-jian-wen-ti","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0500-模板扩展与常见问题","模板扩展与常见问题","2200-0500",{"path":1484,"stem":1485,"title":1486,"date":1095,"chapterOrder":1487,"chapterDepth":1112,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":1100},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake工程模板","2200",{"path":1097,"stem":1489,"title":1490,"date":1095,"chapterOrder":1491,"chapterDepth":1112,"docKey":1096,"docRoot":1097,"docTitle":1098,"isWikiDoc":84,"isWikiIndex":84},"wiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++教程",null,1784505234991]