[{"data":1,"prerenderedAt":1387},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku":3,"wiki-doc-items-2023-10-05-cplusplus-jiao-xue":1001},{"id":4,"title":5,"body":6,"chapterDepth":109,"chapterOrder":989,"date":990,"description":42,"docKey":991,"docRoot":992,"docTitle":993,"extension":994,"isWikiDoc":568,"isWikiIndex":995,"meta":996,"navigation":568,"path":997,"seo":998,"stem":999,"wikiDepth":109,"__hash__":1000},"wiki\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库.md","Boost.Asio异步IO库",{"type":7,"value":8,"toc":970},"minimark",[9,25,28,32,35,45,48,86,88,91,95,98,150,153,206,209,238,244,247,282,285,329,332,416,419,446,449,453,456,482,489,491,495,498,504,507,609,612,618,621,627,629,632,636,672,676,698,701,704,732,739,743,846,848,851,854,882,885,891,893,896,899,931,933,937,966],[10,11,12],"blockquote",{},[13,14,15,16,19,20,24],"p",{},"本章面向机器人、ROS2、下位机串口、TCP\u002FUDP 通信学习。",[17,18],"br",{},"\n本教程刻意采用 ",[21,22,23],"code",{},"std::bind","，暂时不使用 lambda，方便初学者先把“回调函数、占位符、成员函数绑定、异步执行顺序”看清楚。",[26,27],"hr",{},[29,30,31],"h2",{"id":31},"本套教程的章节顺序",[13,33,34],{},"建议学习顺序如下：",[36,37,43],"pre",{"className":38,"code":40,"language":41,"meta":42},[39],"language-text","2100-0100-Boost.Asio异步IO库.md\n2100-0100-0100-定时器与异步IO.md\n2100-0100-0200-Boost.Asio基础.md\n2100-0100-0300-串口通信.md\n2100-0100-0400-TCP通信.md\n2100-0100-0500-UDP通信.md\n2100-0100-0600-机器人工程写法与ROS2集成.md\n","text","",[21,44,40],{"__ignoreMap":42},[13,46,47],{},"我把“定时器”提前，是因为定时器不依赖串口硬件、不依赖网络对端，最适合看清楚：",[49,50,51,58,64,67,70],"ol",{},[52,53,54,57],"li",{},[21,55,56],{},"io_context.run()"," 为什么会阻塞；",[52,59,60,63],{},[21,61,62],{},"async_wait()"," 为什么不是立刻执行回调；",[52,65,66],{},"一个 timer 和两个 timer 的区别；",[52,68,69],{},"回调函数到底在哪个线程里执行；",[52,71,72,74,75,78,79,78,82,85],{},[21,73,23],{}," 里的 ",[21,76,77],{},"_1","、",[21,80,81],{},"this",[21,83,84],{},"&Class::func"," 到底什么意思。",[26,87],{},[29,89,90],{"id":90},"本套教程统一约定",[92,93,94],"h3",{"id":94},"统一使用标准库写法",[13,96,97],{},"本教程尽量使用标准库：",[36,99,103],{"className":100,"code":101,"language":102,"meta":42,"style":42},"language-cpp shiki shiki-themes github-light github-dark","#include \u003Cchrono>\n#include \u003Cfunctional>\n#include \u003Cmemory>\n#include \u003Cthread>\n#include \u003Cstring>\n","cpp",[21,104,105,118,126,134,142],{"__ignoreMap":42},[106,107,110,114],"span",{"class":108,"line":109},"line",1,[106,111,113],{"class":112},"szBVR","#include",[106,115,117],{"class":116},"sZZnC"," \u003Cchrono>\n",[106,119,121,123],{"class":108,"line":120},2,[106,122,113],{"class":112},[106,124,125],{"class":116}," \u003Cfunctional>\n",[106,127,129,131],{"class":108,"line":128},3,[106,130,113],{"class":112},[106,132,133],{"class":116}," \u003Cmemory>\n",[106,135,137,139],{"class":108,"line":136},4,[106,138,113],{"class":112},[106,140,141],{"class":116}," \u003Cthread>\n",[106,143,145,147],{"class":108,"line":144},5,[106,146,113],{"class":112},[106,148,149],{"class":116}," \u003Cstring>\n",[13,151,152],{},"例如定时器时间统一写：",[36,154,156],{"className":100,"code":155,"language":102,"meta":42,"style":42},"std::chrono::seconds(1)\nstd::chrono::milliseconds(100)\n",[21,157,158,186],{"__ignoreMap":42},[106,159,160,164,168,171,173,176,179,183],{"class":108,"line":109},[106,161,163],{"class":162},"sScJk","std",[106,165,167],{"class":166},"sVt8B","::",[106,169,170],{"class":162},"chrono",[106,172,167],{"class":166},[106,174,175],{"class":162},"seconds",[106,177,178],{"class":166},"(",[106,180,182],{"class":181},"sj4cs","1",[106,184,185],{"class":166},")\n",[106,187,188,190,192,194,196,199,201,204],{"class":108,"line":120},[106,189,163],{"class":162},[106,191,167],{"class":166},[106,193,170],{"class":162},[106,195,167],{"class":166},[106,197,198],{"class":162},"milliseconds",[106,200,178],{"class":166},[106,202,203],{"class":181},"100",[106,205,185],{"class":166},[13,207,208],{},"而不是优先写：",[36,210,212],{"className":100,"code":211,"language":102,"meta":42,"style":42},"boost::asio::chrono::seconds(1)\n",[21,213,214],{"__ignoreMap":42},[106,215,216,219,221,224,226,228,230,232,234,236],{"class":108,"line":109},[106,217,218],{"class":162},"boost",[106,220,167],{"class":166},[106,222,223],{"class":162},"asio",[106,225,167],{"class":166},[106,227,170],{"class":162},[106,229,167],{"class":166},[106,231,175],{"class":162},[106,233,178],{"class":166},[106,235,182],{"class":181},[106,237,185],{"class":166},[92,239,241,242],{"id":240},"回调统一使用-stdbind","回调统一使用 ",[21,243,23],{},[13,245,246],{},"本教程里异步回调尽量写成：",[36,248,250],{"className":100,"code":249,"language":102,"meta":42,"style":42},"timer.async_wait(std::bind(on_timer, std::placeholders::_1));\n",[21,251,252],{"__ignoreMap":42},[106,253,254,257,260,262,264,266,269,272,274,276,279],{"class":108,"line":109},[106,255,256],{"class":166},"timer.",[106,258,259],{"class":162},"async_wait",[106,261,178],{"class":166},[106,263,163],{"class":162},[106,265,167],{"class":166},[106,267,268],{"class":162},"bind",[106,270,271],{"class":166},"(on_timer, ",[106,273,163],{"class":162},[106,275,167],{"class":166},[106,277,278],{"class":162},"placeholders",[106,280,281],{"class":166},"::_1));\n",[13,283,284],{},"成员函数回调写成：",[36,286,288],{"className":100,"code":287,"language":102,"meta":42,"style":42},"timer_.async_wait(std::bind(&Printer::on_timer, this, std::placeholders::_1));\n",[21,289,290],{"__ignoreMap":42},[106,291,292,295,297,299,301,303,305,307,310,313,316,318,321,323,325,327],{"class":108,"line":109},[106,293,294],{"class":166},"timer_.",[106,296,259],{"class":162},[106,298,178],{"class":166},[106,300,163],{"class":162},[106,302,167],{"class":166},[106,304,268],{"class":162},[106,306,178],{"class":166},[106,308,309],{"class":112},"&",[106,311,312],{"class":162},"Printer",[106,314,315],{"class":166},"::on_timer, ",[106,317,81],{"class":181},[106,319,320],{"class":166},", ",[106,322,163],{"class":162},[106,324,167],{"class":166},[106,326,278],{"class":162},[106,328,281],{"class":166},[13,330,331],{},"读写回调有两个参数时写成：",[36,333,335],{"className":100,"code":334,"language":102,"meta":42,"style":42},"socket.async_read_some(\n    boost::asio::buffer(data_),\n    std::bind(&Session::on_read,\n              this,\n              std::placeholders::_1,\n              std::placeholders::_2));\n",[21,336,337,348,365,384,392,404],{"__ignoreMap":42},[106,338,339,342,345],{"class":108,"line":109},[106,340,341],{"class":166},"socket.",[106,343,344],{"class":162},"async_read_some",[106,346,347],{"class":166},"(\n",[106,349,350,353,355,357,359,362],{"class":108,"line":120},[106,351,352],{"class":162},"    boost",[106,354,167],{"class":166},[106,356,223],{"class":162},[106,358,167],{"class":166},[106,360,361],{"class":162},"buffer",[106,363,364],{"class":166},"(data_),\n",[106,366,367,370,372,374,376,378,381],{"class":108,"line":128},[106,368,369],{"class":162},"    std",[106,371,167],{"class":166},[106,373,268],{"class":162},[106,375,178],{"class":166},[106,377,309],{"class":112},[106,379,380],{"class":162},"Session",[106,382,383],{"class":166},"::on_read,\n",[106,385,386,389],{"class":108,"line":136},[106,387,388],{"class":181},"              this",[106,390,391],{"class":166},",\n",[106,393,394,397,399,401],{"class":108,"line":144},[106,395,396],{"class":162},"              std",[106,398,167],{"class":166},[106,400,278],{"class":162},[106,402,403],{"class":166},"::_1,\n",[106,405,407,409,411,413],{"class":108,"line":406},6,[106,408,396],{"class":162},[106,410,167],{"class":166},[106,412,278],{"class":162},[106,414,415],{"class":166},"::_2));\n",[13,417,418],{},"其中：",[36,420,422],{"className":100,"code":421,"language":102,"meta":42,"style":42},"std::placeholders::_1\nstd::placeholders::_2\n",[21,423,424,435],{"__ignoreMap":42},[106,425,426,428,430,432],{"class":108,"line":109},[106,427,163],{"class":162},[106,429,167],{"class":166},[106,431,278],{"class":162},[106,433,434],{"class":166},"::_1\n",[106,436,437,439,441,443],{"class":108,"line":120},[106,438,163],{"class":162},[106,440,167],{"class":166},[106,442,278],{"class":162},[106,444,445],{"class":166},"::_2\n",[13,447,448],{},"表示“异步操作完成时，Boost.Asio 自动传给回调函数的第 1 个、第 2 个参数”。",[92,450,452],{"id":451},"错误码仍然使用-boostasio-的类型","错误码仍然使用 Boost.Asio 的类型",[13,454,455],{},"这个不要乱换：",[36,457,459],{"className":100,"code":458,"language":102,"meta":42,"style":42},"const boost::system::error_code& ec\n",[21,460,461],{"__ignoreMap":42},[106,462,463,466,469,471,474,477,479],{"class":108,"line":109},[106,464,465],{"class":112},"const",[106,467,468],{"class":162}," boost",[106,470,167],{"class":166},[106,472,473],{"class":162},"system",[106,475,476],{"class":166},"::error_code",[106,478,309],{"class":112},[106,480,481],{"class":166}," ec\n",[13,483,484,485,488],{},"原因是 Boost.Asio 的异步回调默认把错误传给 ",[21,486,487],{},"boost::system::error_code","。以后如果你换 standalone Asio 或者标准网络库，再考虑对应类型。",[26,490],{},[29,492,494],{"id":493},"boostasio-的核心思想","Boost.Asio 的核心思想",[13,496,497],{},"Boost.Asio 可以先粗暴理解成：",[36,499,502],{"className":500,"code":501,"language":41,"meta":42},[39],"io_context = 事件循环 \u002F 调度器\nsocket \u002F serial_port \u002F timer = IO对象\nasync_xxx() = 注册一个异步任务\nhandler = 异步任务完成后执行的回调函数\nrun() = 开始处理异步任务和回调函数\n",[21,503,501],{"__ignoreMap":42},[13,505,506],{},"最小异步程序大概长这样：",[36,508,510],{"className":100,"code":509,"language":102,"meta":42,"style":42},"boost::asio::io_context io;\nboost::asio::steady_timer timer(io, std::chrono::seconds(2));\n\ntimer.async_wait(std::bind(on_timer, std::placeholders::_1));\n\nio.run();\n",[21,511,512,523,564,570,594,598],{"__ignoreMap":42},[106,513,514,516,518,520],{"class":108,"line":109},[106,515,218],{"class":162},[106,517,167],{"class":166},[106,519,223],{"class":162},[106,521,522],{"class":166},"::io_context io;\n",[106,524,525,527,529,531,533,536,539,541,544,546,548,550,552,554,556,558,561],{"class":108,"line":120},[106,526,218],{"class":162},[106,528,167],{"class":166},[106,530,223],{"class":162},[106,532,167],{"class":166},[106,534,535],{"class":162},"steady_timer",[106,537,538],{"class":162}," timer",[106,540,178],{"class":166},[106,542,543],{"class":162},"io",[106,545,320],{"class":166},[106,547,163],{"class":162},[106,549,167],{"class":166},[106,551,170],{"class":162},[106,553,167],{"class":166},[106,555,175],{"class":162},[106,557,178],{"class":166},[106,559,560],{"class":181},"2",[106,562,563],{"class":166},"));\n",[106,565,566],{"class":108,"line":128},[106,567,569],{"emptyLinePlaceholder":568},true,"\n",[106,571,572,574,576,578,580,582,584,586,588,590,592],{"class":108,"line":136},[106,573,256],{"class":166},[106,575,259],{"class":162},[106,577,178],{"class":166},[106,579,163],{"class":162},[106,581,167],{"class":166},[106,583,268],{"class":162},[106,585,271],{"class":166},[106,587,163],{"class":162},[106,589,167],{"class":166},[106,591,278],{"class":162},[106,593,281],{"class":166},[106,595,596],{"class":108,"line":144},[106,597,569],{"emptyLinePlaceholder":568},[106,599,600,603,606],{"class":108,"line":406},[106,601,602],{"class":166},"io.",[106,604,605],{"class":162},"run",[106,607,608],{"class":166},"();\n",[13,610,611],{},"执行逻辑不是：",[36,613,616],{"className":614,"code":615,"language":41,"meta":42},[39],"async_wait 立刻执行 on_timer\n",[21,617,615],{"__ignoreMap":42},[13,619,620],{},"而是：",[36,622,625],{"className":623,"code":624,"language":41,"meta":42},[39],"async_wait 注册任务\nio.run() 进入事件循环\n等待 2 秒\ntimer 到期\nio.run() 调用 on_timer\n没有任务了\nio.run() 返回\n",[21,626,624],{"__ignoreMap":42},[26,628],{},[29,630,631],{"id":631},"编译环境",[92,633,635],{"id":634},"ubuntu-debian","Ubuntu \u002F Debian",[36,637,641],{"className":638,"code":639,"language":640,"meta":42,"style":42},"language-bash shiki shiki-themes github-light github-dark","sudo apt update\nsudo apt install libboost-all-dev g++ cmake\n","bash",[21,642,643,654],{"__ignoreMap":42},[106,644,645,648,651],{"class":108,"line":109},[106,646,647],{"class":162},"sudo",[106,649,650],{"class":116}," apt",[106,652,653],{"class":116}," update\n",[106,655,656,658,660,663,666,669],{"class":108,"line":120},[106,657,647],{"class":162},[106,659,650],{"class":116},[106,661,662],{"class":116}," install",[106,664,665],{"class":116}," libboost-all-dev",[106,667,668],{"class":116}," g++",[106,670,671],{"class":116}," cmake\n",[92,673,675],{"id":674},"fedora","Fedora",[36,677,679],{"className":638,"code":678,"language":640,"meta":42,"style":42},"sudo dnf install boost-devel gcc-c++ cmake\n",[21,680,681],{"__ignoreMap":42},[106,682,683,685,688,690,693,696],{"class":108,"line":109},[106,684,647],{"class":162},[106,686,687],{"class":116}," dnf",[106,689,662],{"class":116},[106,691,692],{"class":116}," boost-devel",[106,694,695],{"class":116}," gcc-c++",[106,697,671],{"class":116},[92,699,700],{"id":700},"单文件编译命令",[13,702,703],{},"很多示例可以直接这样编译：",[36,705,707],{"className":638,"code":706,"language":640,"meta":42,"style":42},"g++ demo.cpp -o demo -std=c++17 -lboost_system -pthread\n",[21,708,709],{"__ignoreMap":42},[106,710,711,714,717,720,723,726,729],{"class":108,"line":109},[106,712,713],{"class":162},"g++",[106,715,716],{"class":116}," demo.cpp",[106,718,719],{"class":181}," -o",[106,721,722],{"class":116}," demo",[106,724,725],{"class":181}," -std=c++17",[106,727,728],{"class":181}," -lboost_system",[106,730,731],{"class":181}," -pthread\n",[13,733,734,735,738],{},"如果你的 Boost 版本较新，某些 Linux 发行版上也许不需要显式链接 ",[21,736,737],{},"-lboost_system","，但初学阶段建议先带上，减少环境差异。",[92,740,742],{"id":741},"推荐-cmake-模板","推荐 CMake 模板",[36,744,748],{"className":745,"code":746,"language":747,"meta":42,"style":42},"language-cmake shiki shiki-themes github-light github-dark","cmake_minimum_required(VERSION 3.16)\nproject(asio_demo)\n\nset(CMAKE_CXX_STANDARD 17)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\n\nfind_package(Boost REQUIRED COMPONENTS system)\n\nadd_executable(demo demo.cpp)\ntarget_link_libraries(demo PRIVATE Boost::system pthread)\n","cmake",[21,749,750,763,771,775,783,795,799,812,817,826],{"__ignoreMap":42},[106,751,752,755,757,760],{"class":108,"line":109},[106,753,754],{"class":112},"cmake_minimum_required",[106,756,178],{"class":166},[106,758,759],{"class":162},"VERSION",[106,761,762],{"class":166}," 3.16)\n",[106,764,765,768],{"class":108,"line":120},[106,766,767],{"class":112},"project",[106,769,770],{"class":166},"(asio_demo)\n",[106,772,773],{"class":108,"line":128},[106,774,569],{"emptyLinePlaceholder":568},[106,776,777,780],{"class":108,"line":136},[106,778,779],{"class":112},"set",[106,781,782],{"class":166},"(CMAKE_CXX_STANDARD 17)\n",[106,784,785,787,790,793],{"class":108,"line":144},[106,786,779],{"class":112},[106,788,789],{"class":166},"(CMAKE_CXX_STANDARD_REQUIRED ",[106,791,792],{"class":112},"ON",[106,794,185],{"class":166},[106,796,797],{"class":108,"line":406},[106,798,569],{"emptyLinePlaceholder":568},[106,800,802,805,808,810],{"class":108,"line":801},7,[106,803,804],{"class":112},"find_package",[106,806,807],{"class":166},"(Boost REQUIRED COMPONENTS ",[106,809,473],{"class":181},[106,811,185],{"class":166},[106,813,815],{"class":108,"line":814},8,[106,816,569],{"emptyLinePlaceholder":568},[106,818,820,823],{"class":108,"line":819},9,[106,821,822],{"class":112},"add_executable",[106,824,825],{"class":166},"(demo demo.cpp)\n",[106,827,829,832,835,838,841,843],{"class":108,"line":828},10,[106,830,831],{"class":112},"target_link_libraries",[106,833,834],{"class":166},"(demo ",[106,836,837],{"class":162},"PRIVATE",[106,839,840],{"class":166}," Boost::",[106,842,473],{"class":181},[106,844,845],{"class":166}," pthread)\n",[26,847],{},[29,849,850],{"id":850},"为什么先学定时器",[13,852,853],{},"机器人通信里最容易出问题的不是“API 会不会调用”，而是：",[49,855,856,859,862,865,868,874,879],{},[52,857,858],{},"回调什么时候执行；",[52,860,861],{},"回调在哪个线程执行；",[52,863,864],{},"对象什么时候析构；",[52,866,867],{},"buffer 数据什么时候还能用；",[52,869,870,873],{},[21,871,872],{},"run()"," 为什么卡住；",[52,875,876,878],{},[21,877,872],{}," 为什么又会提前返回；",[52,880,881],{},"多线程时为什么会数据竞争。",[13,883,884],{},"这些问题都可以先用定时器看懂。定时器看懂之后，串口、TCP、UDP 本质上只是“等待的事件不同”：",[36,886,889],{"className":887,"code":888,"language":41,"meta":42},[39],"timer 等待时间到期\nserial_port 等待串口可读 \u002F 可写\ntcp::socket 等待网络可读 \u002F 可写 \u002F 连接完成\nudp::socket 等待收到一个数据报\n",[21,890,888],{"__ignoreMap":42},[26,892],{},[29,894,895],{"id":895},"学完这套教程应该达到什么程度",[13,897,898],{},"学完之后，你应该能做到：",[49,900,901,904,910,916,919,922,925,928],{},[52,902,903],{},"看懂 Boost.Asio 官方 timer \u002F TCP \u002F UDP 教程；",[52,905,906,907,909],{},"能用 ",[21,908,23],{}," 写普通函数回调、成员函数回调；",[52,911,912,913,915],{},"能解释 ",[21,914,56],{}," 的阻塞和返回条件；",[52,917,918],{},"能写串口异步读取下位机数据；",[52,920,921],{},"能写 TCP client \u002F server；",[52,923,924],{},"能写 UDP sender \u002F receiver \u002F echo server；",[52,926,927],{},"能把 Asio 通信模块封装成一个类；",[52,929,930],{},"能把通信模块接进 ROS2 节点，而不是在 ROS2 回调里写阻塞死循环。",[26,932],{},[29,934,936],{"id":935},"你现在最需要记住的-5-句话","你现在最需要记住的 5 句话",[49,938,939,945,950,956,959],{},[52,940,941,944],{},[21,942,943],{},"async_xxx()"," 只是注册异步任务，不是立刻执行回调。",[52,946,947,949],{},[21,948,56],{}," 才是真正驱动异步任务执行的地方。",[52,951,952,953,955],{},"回调函数只会在正在执行 ",[21,954,56],{}," 的线程里被调用。",[52,957,958],{},"异步 buffer、socket、timer 对象必须活到回调执行完。",[52,960,961,962,965],{},"类里绑定成员函数时，写 ",[21,963,964],{},"std::bind(&Class::func, this, _1, _2)","。",[967,968,969],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":42,"searchDepth":120,"depth":120,"links":971},[972,973,979,980,986,987,988],{"id":31,"depth":120,"text":31},{"id":90,"depth":120,"text":90,"children":974},[975,976,978],{"id":94,"depth":128,"text":94},{"id":240,"depth":128,"text":977},"回调统一使用 std::bind",{"id":451,"depth":128,"text":452},{"id":493,"depth":120,"text":494},{"id":631,"depth":120,"text":631,"children":981},[982,983,984,985],{"id":634,"depth":128,"text":635},{"id":674,"depth":128,"text":675},{"id":700,"depth":128,"text":700},{"id":741,"depth":128,"text":742},{"id":850,"depth":120,"text":850},{"id":895,"depth":120,"text":895},{"id":935,"depth":120,"text":936},"2100-0100","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\u002F2100-0100-boost-asio-yi-bu-io-ku",{"title":5,"description":42},"wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","81vf9KbxuAOASFhavo-8jyFe3-Gp9Z7sUVgk8V2XNrM",[1002,1008,1013,1018,1023,1028,1033,1038,1043,1048,1053,1058,1063,1068,1073,1078,1083,1088,1093,1098,1103,1108,1113,1118,1123,1128,1133,1138,1143,1148,1153,1158,1163,1168,1173,1178,1183,1188,1193,1198,1203,1208,1213,1218,1223,1228,1232,1237,1242,1247,1252,1257,1262,1267,1272,1277,1282,1287,1292,1297,1302,1307,1312,1317,1322,1327,1328,1333,1338,1343,1348,1353,1358,1363,1368,1373,1378,1383],{"path":1003,"stem":1004,"title":1005,"date":990,"chapterOrder":1006,"chapterDepth":1007,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1009,"stem":1010,"title":1011,"date":990,"chapterOrder":1012,"chapterDepth":1007,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++基础初识","0200",{"path":1014,"stem":1015,"title":1016,"date":990,"chapterOrder":1017,"chapterDepth":1007,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1019,"stem":1020,"title":1021,"date":990,"chapterOrder":1022,"chapterDepth":1007,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","wiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","输入输出","0400",{"path":1024,"stem":1025,"title":1026,"date":990,"chapterOrder":1027,"chapterDepth":1007,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","wiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","运算符","0500",{"path":1029,"stem":1030,"title":1031,"date":990,"chapterOrder":1032,"chapterDepth":1007,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","wiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","程序流程结构","0600",{"path":1034,"stem":1035,"title":1036,"date":990,"chapterOrder":1037,"chapterDepth":1007,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","wiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","数组","0700",{"path":1039,"stem":1040,"title":1041,"date":990,"chapterOrder":1042,"chapterDepth":1007,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","函数与头文件","0800",{"path":1044,"stem":1045,"title":1046,"date":990,"chapterOrder":1047,"chapterDepth":1007,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","指针","0900",{"path":1049,"stem":1050,"title":1051,"date":990,"chapterOrder":1052,"chapterDepth":1007,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","wiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","结构体与共用体","1000",{"path":1054,"stem":1055,"title":1056,"date":990,"chapterOrder":1057,"chapterDepth":1007,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1059,"stem":1060,"title":1061,"date":990,"chapterOrder":1062,"chapterDepth":1007,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","wiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","引用","1200",{"path":1064,"stem":1065,"title":1066,"date":990,"chapterOrder":1067,"chapterDepth":1007,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1069,"stem":1070,"title":1071,"date":990,"chapterOrder":1072,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","封装","1400-0100",{"path":1074,"stem":1075,"title":1076,"date":990,"chapterOrder":1077,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1079,"stem":1080,"title":1081,"date":990,"chapterOrder":1082,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1084,"stem":1085,"title":1086,"date":990,"chapterOrder":1087,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1089,"stem":1090,"title":1091,"date":990,"chapterOrder":1092,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","继承","1400-0500",{"path":1094,"stem":1095,"title":1096,"date":990,"chapterOrder":1097,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","多态","1400-0600",{"path":1099,"stem":1100,"title":1101,"date":990,"chapterOrder":1102,"chapterDepth":1007,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","类和对象","1400",{"path":1104,"stem":1105,"title":1106,"date":990,"chapterOrder":1107,"chapterDepth":1007,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","wiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","文件操作","1500",{"path":1109,"stem":1110,"title":1111,"date":990,"chapterOrder":1112,"chapterDepth":1007,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","wiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","异常处理","1600",{"path":1114,"stem":1115,"title":1116,"date":990,"chapterOrder":1117,"chapterDepth":1007,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","模板","1700",{"path":1119,"stem":1120,"title":1121,"date":990,"chapterOrder":1122,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","STL初识","1800-0100",{"path":1124,"stem":1125,"title":1126,"date":990,"chapterOrder":1127,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1129,"stem":1130,"title":1131,"date":990,"chapterOrder":1132,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string容器","1800-0300",{"path":1134,"stem":1135,"title":1136,"date":990,"chapterOrder":1137,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1139,"stem":1140,"title":1141,"date":990,"chapterOrder":1142,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1144,"stem":1145,"title":1146,"date":990,"chapterOrder":1147,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1149,"stem":1150,"title":1151,"date":990,"chapterOrder":1152,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1154,"stem":1155,"title":1156,"date":990,"chapterOrder":1157,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-chang-yong-suan-fa","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-常用算法","常用算法","1800-0800",{"path":1159,"stem":1160,"title":1161,"date":990,"chapterOrder":1162,"chapterDepth":1007,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","STL提高编程","1800",{"path":1164,"stem":1165,"title":1166,"date":990,"chapterOrder":1167,"chapterDepth":1007,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","wiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++类型转换","1900",{"path":1169,"stem":1170,"title":1171,"date":990,"chapterOrder":1172,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","auto","2000-0100",{"path":1174,"stem":1175,"title":1176,"date":990,"chapterOrder":1177,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","nullptr","2000-0200",{"path":1179,"stem":1180,"title":1181,"date":990,"chapterOrder":1182,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","using","2000-0300",{"path":1184,"stem":1185,"title":1186,"date":990,"chapterOrder":1187,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1189,"stem":1190,"title":1191,"date":990,"chapterOrder":1192,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1194,"stem":1195,"title":1196,"date":990,"chapterOrder":1197,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","结构化绑定","2000-0600",{"path":1199,"stem":1200,"title":1201,"date":990,"chapterOrder":1202,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","constexpr","2000-0700",{"path":1204,"stem":1205,"title":1206,"date":990,"chapterOrder":1207,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII","2000-0800",{"path":1209,"stem":1210,"title":1211,"date":990,"chapterOrder":1212,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","智能指针","2000-0900",{"path":1214,"stem":1215,"title":1216,"date":990,"chapterOrder":1217,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1219,"stem":1220,"title":1221,"date":990,"chapterOrder":1222,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1224,"stem":1225,"title":1226,"date":990,"chapterOrder":1227,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1229,"stem":1230,"title":23,"date":990,"chapterOrder":1231,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","2000-1300",{"path":1233,"stem":1234,"title":1235,"date":990,"chapterOrder":1236,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1238,"stem":1239,"title":1240,"date":990,"chapterOrder":1241,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1243,"stem":1244,"title":1245,"date":990,"chapterOrder":1246,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1248,"stem":1249,"title":1250,"date":990,"chapterOrder":1251,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1253,"stem":1254,"title":1255,"date":990,"chapterOrder":1256,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1258,"stem":1259,"title":1260,"date":990,"chapterOrder":1261,"chapterDepth":120,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1263,"stem":1264,"title":1265,"date":990,"chapterOrder":1266,"chapterDepth":120,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-mutex-lock-guard","mutex 与 lock_guard","2000-1900-0200",{"path":1268,"stem":1269,"title":1270,"date":990,"chapterOrder":1271,"chapterDepth":120,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1273,"stem":1274,"title":1275,"date":990,"chapterOrder":1276,"chapterDepth":120,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0400-condition-variable","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0400-condition-variable","condition_variable","2000-1900-0400",{"path":1278,"stem":1279,"title":1280,"date":990,"chapterOrder":1281,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发编程","并发编程","2000-1900",{"path":1283,"stem":1284,"title":1285,"date":990,"chapterOrder":1286,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1288,"stem":1289,"title":1290,"date":990,"chapterOrder":1291,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","modules 简介","2000-2100",{"path":1293,"stem":1294,"title":1295,"date":990,"chapterOrder":1296,"chapterDepth":1007,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","现代C++","2000",{"path":1298,"stem":1299,"title":1300,"date":990,"chapterOrder":1301,"chapterDepth":120,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1303,"stem":1304,"title":1305,"date":990,"chapterOrder":1306,"chapterDepth":120,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1308,"stem":1309,"title":1310,"date":990,"chapterOrder":1311,"chapterDepth":120,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1313,"stem":1314,"title":1315,"date":990,"chapterOrder":1316,"chapterDepth":120,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1318,"stem":1319,"title":1320,"date":990,"chapterOrder":1321,"chapterDepth":120,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1323,"stem":1324,"title":1325,"date":990,"chapterOrder":1326,"chapterDepth":120,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":997,"stem":999,"title":5,"date":990,"chapterOrder":989,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},{"path":1329,"stem":1330,"title":1331,"date":990,"chapterOrder":1332,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1334,"stem":1335,"title":1336,"date":990,"chapterOrder":1337,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1339,"stem":1340,"title":1341,"date":990,"chapterOrder":1342,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1344,"stem":1345,"title":1346,"date":990,"chapterOrder":1347,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1349,"stem":1350,"title":1351,"date":990,"chapterOrder":1352,"chapterDepth":1007,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","常用库学习","2100",{"path":1354,"stem":1355,"title":1356,"date":990,"chapterOrder":1357,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1359,"stem":1360,"title":1361,"date":990,"chapterOrder":1362,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1364,"stem":1365,"title":1366,"date":990,"chapterOrder":1367,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1369,"stem":1370,"title":1371,"date":990,"chapterOrder":1372,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1374,"stem":1375,"title":1376,"date":990,"chapterOrder":1377,"chapterDepth":109,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\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":1379,"stem":1380,"title":1381,"date":990,"chapterOrder":1382,"chapterDepth":1007,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":995},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake工程模板","2200",{"path":992,"stem":1384,"title":1385,"date":990,"chapterOrder":1386,"chapterDepth":1007,"docKey":991,"docRoot":992,"docTitle":993,"isWikiDoc":568,"isWikiIndex":568},"wiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++教程",null,1784505235185]