[{"data":1,"prerenderedAt":1434},["ShallowReactive",2],{"wiki-page-/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-boost-asio-yi-bu-io-ku":3,"wiki-doc-items-/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-boost-asio-yi-bu-io-ku":1007,"language-switcher-data-/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-boost-asio-yi-bu-io-ku":1418,"wiki-i18n-paths-/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-boost-asio-yi-bu-io-ku":1433},{"id":4,"title":5,"body":6,"canonicalPath":989,"chapter":990,"chapterSort":991,"date":992,"description":42,"docI18nKey":993,"docKey":994,"docRoot":995,"docTitle":996,"extension":997,"i18nKey":998,"isBlogPost":999,"isWikiDoc":568,"isWikiIndex":999,"layout":1000,"legacyPath":1001,"locale":1002,"localeSlug":1003,"meta":1004,"navigation":568,"path":989,"seo":1005,"sourcePath":1001,"sourceStem":998,"stem":998,"wikiDepth":109,"__hash__":1006},"content/wiki/2023-10-05-Cplusplus教学/ch19-1-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/UDP 通信学习。",[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","ch19-1-Boost.Asio异步IO库.md\nch19-1-1-定时器与异步IO.md\nch19-1-2-Boost.Asio基础.md\nch19-1-3-串口通信.md\nch19-1-4-TCP通信.md\nch19-1-5-UDP通信.md\nch19-1-6-机器人工程写法与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 = 事件循环 / 调度器\nsocket / serial_port / 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 / 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 等待串口可读 / 可写\ntcp::socket 等待网络可读 / 可写 / 连接完成\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 / TCP / 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 / server；",[52,923,924],{},"能写 UDP sender / receiver / 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},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-boost-asio-yi-bu-io-ku","19.1",19010000,"2023-10-05","wiki/2023-10-05-cplusplus-jiao-xue","zh-cn:2023-10-05-cplusplus-jiao-xue","/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md","wiki/2023-10-05-Cplusplus教学/ch19-1-Boost.Asio异步IO库",false,null,"/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-boost-asio-yi-bu-io-ku","zh-CN","zh-cn",{},{"title":5,"description":42},"WchFFvrEaJjdde6TT5OKT0k8U8FzHaXw3c_xWvV_thc",[1008,1013,1019,1025,1031,1037,1043,1049,1055,1061,1067,1073,1079,1085,1091,1097,1103,1109,1115,1121,1127,1133,1139,1145,1151,1157,1163,1169,1174,1180,1186,1192,1198,1204,1210,1216,1222,1228,1234,1240,1246,1252,1258,1264,1270,1276,1282,1288,1294,1300,1306,1312,1318,1324,1330,1336,1337,1343,1349,1355,1361,1367,1372,1378,1384,1390,1396,1402,1408,1414],{"path":1009,"stem":1010,"title":1011,"date":992,"chapter":182,"chapterSort":1012,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch1-c-ji-chu-chu-shi","wiki/2023-10-05-Cplusplus教学/ch1-C++基础初识","C++基础初识",1000000,{"path":1014,"stem":1015,"title":1016,"date":992,"chapter":1017,"chapterSort":1018,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch10-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","wiki/2023-10-05-Cplusplus教学/ch10-内存分区与生命周期","内存分区与生命周期","10",10000000,{"path":1020,"stem":1021,"title":1022,"date":992,"chapter":1023,"chapterSort":1024,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch11-yin-yong","wiki/2023-10-05-Cplusplus教学/ch11-引用","引用","11",11000000,{"path":1026,"stem":1027,"title":1028,"date":992,"chapter":1029,"chapterSort":1030,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch12-han-shu-ti-gao-yu-ming-ming-kong-jian","wiki/2023-10-05-Cplusplus教学/ch12-函数提高与命名空间","函数提高与命名空间","12",12000000,{"path":1032,"stem":1033,"title":1034,"date":992,"chapter":1035,"chapterSort":1036,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-1-feng-zhuang","wiki/2023-10-05-Cplusplus教学/ch13-1-封装","封装","13.1",13010000,{"path":1038,"stem":1039,"title":1040,"date":992,"chapter":1041,"chapterSort":1042,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-2-dui-xiang-chu-shi-hua-he-qing-li","wiki/2023-10-05-Cplusplus教学/ch13-2-对象初始化和清理","对象初始化和清理","13.2",13020000,{"path":1044,"stem":1045,"title":1046,"date":992,"chapter":1047,"chapterSort":1048,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-3-dui-xiang-mo-xing-yu-this-zhi-zhen","wiki/2023-10-05-Cplusplus教学/ch13-3-对象模型与this指针","对象模型与this指针","13.3",13030000,{"path":1050,"stem":1051,"title":1052,"date":992,"chapter":1053,"chapterSort":1054,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-4-you-yuan-yu-yun-suan-fu-zhong-zai","wiki/2023-10-05-Cplusplus教学/ch13-4-友元与运算符重载","友元与运算符重载","13.4",13040000,{"path":1056,"stem":1057,"title":1058,"date":992,"chapter":1059,"chapterSort":1060,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-5-ji-cheng","wiki/2023-10-05-Cplusplus教学/ch13-5-继承","继承","13.5",13050000,{"path":1062,"stem":1063,"title":1064,"date":992,"chapter":1065,"chapterSort":1066,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-6-duo-tai","wiki/2023-10-05-Cplusplus教学/ch13-6-多态","多态","13.6",13060000,{"path":1068,"stem":1069,"title":1070,"date":992,"chapter":1071,"chapterSort":1072,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-lei-he-dui-xiang","wiki/2023-10-05-Cplusplus教学/ch13-类和对象","类和对象","13",13000000,{"path":1074,"stem":1075,"title":1076,"date":992,"chapter":1077,"chapterSort":1078,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch14-wen-jian-cao-zuo","wiki/2023-10-05-Cplusplus教学/ch14-文件操作","文件操作","14",14000000,{"path":1080,"stem":1081,"title":1082,"date":992,"chapter":1083,"chapterSort":1084,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch15-mu-ban","wiki/2023-10-05-Cplusplus教学/ch15-模板","模板","15",15000000,{"path":1086,"stem":1087,"title":1088,"date":992,"chapter":1089,"chapterSort":1090,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-1-stl-chu-shi","wiki/2023-10-05-Cplusplus教学/ch16-1-STL初识","STL初识","16.1",16010000,{"path":1092,"stem":1093,"title":1094,"date":992,"chapter":1095,"chapterSort":1096,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-2-std-array","wiki/2023-10-05-Cplusplus教学/ch16-2-std-array","std::array","16.2",16020000,{"path":1098,"stem":1099,"title":1100,"date":992,"chapter":1101,"chapterSort":1102,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-3-string-rong-qi","wiki/2023-10-05-Cplusplus教学/ch16-3-string容器","string容器","16.3",16030000,{"path":1104,"stem":1105,"title":1106,"date":992,"chapter":1107,"chapterSort":1108,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-4-vector-yu-deque-rong-qi","wiki/2023-10-05-Cplusplus教学/ch16-4-vector与deque容器","vector与deque容器","16.4",16040000,{"path":1110,"stem":1111,"title":1112,"date":992,"chapter":1113,"chapterSort":1114,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-5-stack-queue-list-rong-qi","wiki/2023-10-05-Cplusplus教学/ch16-5-stack-queue-list容器","stack / queue / list 容器","16.5",16050000,{"path":1116,"stem":1117,"title":1118,"date":992,"chapter":1119,"chapterSort":1120,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-6-set-map-rong-qi","wiki/2023-10-05-Cplusplus教学/ch16-6-set-map容器","set / map 容器","16.6",16060000,{"path":1122,"stem":1123,"title":1124,"date":992,"chapter":1125,"chapterSort":1126,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-7-han-shu-dui-xiang-yu-wei-ci","wiki/2023-10-05-Cplusplus教学/ch16-7-函数对象与谓词","函数对象与谓词","16.7",16070000,{"path":1128,"stem":1129,"title":1130,"date":992,"chapter":1131,"chapterSort":1132,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-8-chang-yong-suan-fa","wiki/2023-10-05-Cplusplus教学/ch16-8-常用算法","常用算法","16.8",16080000,{"path":1134,"stem":1135,"title":1136,"date":992,"chapter":1137,"chapterSort":1138,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-stl-ti-gao-bian-cheng","wiki/2023-10-05-Cplusplus教学/ch16-STL提高编程","STL提高编程","16",16000000,{"path":1140,"stem":1141,"title":1142,"date":992,"chapter":1143,"chapterSort":1144,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch17-c-lei-xing-zhuan-huan","wiki/2023-10-05-Cplusplus教学/ch17-C++类型转换","C++类型转换","17",17000000,{"path":1146,"stem":1147,"title":1148,"date":992,"chapter":1149,"chapterSort":1150,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-1-auto","wiki/2023-10-05-Cplusplus教学/ch18-1-auto","auto","18.1",18010000,{"path":1152,"stem":1153,"title":1154,"date":992,"chapter":1155,"chapterSort":1156,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-10-you-zhi-yin-yong-he-yi-dong-yu-yi","wiki/2023-10-05-Cplusplus教学/ch18-10-右值引用和移动语义","右值引用和移动语义","18.10",18100000,{"path":1158,"stem":1159,"title":1160,"date":992,"chapter":1161,"chapterSort":1162,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-11-lambda-biao-da-shi","wiki/2023-10-05-Cplusplus教学/ch18-11-Lambda表达式","Lambda 表达式","18.11",18110000,{"path":1164,"stem":1165,"title":1166,"date":992,"chapter":1167,"chapterSort":1168,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-12-std-function","wiki/2023-10-05-Cplusplus教学/ch18-12-std-function","std::function","18.12",18120000,{"path":1170,"stem":1171,"title":23,"date":992,"chapter":1172,"chapterSort":1173,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-13-std-bind","wiki/2023-10-05-Cplusplus教学/ch18-13-std-bind","18.13",18130000,{"path":1175,"stem":1176,"title":1177,"date":992,"chapter":1178,"chapterSort":1179,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-14-std-optional","wiki/2023-10-05-Cplusplus教学/ch18-14-std-optional","std::optional","18.14",18140000,{"path":1181,"stem":1182,"title":1183,"date":992,"chapter":1184,"chapterSort":1185,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-15-std-variant","wiki/2023-10-05-Cplusplus教学/ch18-15-std-variant","std::variant","18.15",18150000,{"path":1187,"stem":1188,"title":1189,"date":992,"chapter":1190,"chapterSort":1191,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-16-std-span","wiki/2023-10-05-Cplusplus教学/ch18-16-std-span","std::span","18.16",18160000,{"path":1193,"stem":1194,"title":1195,"date":992,"chapter":1196,"chapterSort":1197,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-17-std-format-print","wiki/2023-10-05-Cplusplus教学/ch18-17-std-format-print","std::format / std::print","18.17",18170000,{"path":1199,"stem":1200,"title":1201,"date":992,"chapter":1202,"chapterSort":1203,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-18-std-chrono","wiki/2023-10-05-Cplusplus教学/ch18-18-std-chrono","std::chrono","18.18",18180000,{"path":1205,"stem":1206,"title":1207,"date":992,"chapter":1208,"chapterSort":1209,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-1-std-thread","wiki/2023-10-05-Cplusplus教学/ch18-19-1-std-thread","std::thread 与 join","18.19.1",18190100,{"path":1211,"stem":1212,"title":1213,"date":992,"chapter":1214,"chapterSort":1215,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-2-mutex-lock-guard","wiki/2023-10-05-Cplusplus教学/ch18-19-2-mutex-lock-guard","mutex 与 lock_guard","18.19.2",18190200,{"path":1217,"stem":1218,"title":1219,"date":992,"chapter":1220,"chapterSort":1221,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-3-std-atomic","wiki/2023-10-05-Cplusplus教学/ch18-19-3-std-atomic","std::atomic","18.19.3",18190300,{"path":1223,"stem":1224,"title":1225,"date":992,"chapter":1226,"chapterSort":1227,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-4-condition-variable","wiki/2023-10-05-Cplusplus教学/ch18-19-4-condition-variable","condition_variable","18.19.4",18190400,{"path":1229,"stem":1230,"title":1231,"date":992,"chapter":1232,"chapterSort":1233,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-bing-fa-bian-cheng","wiki/2023-10-05-Cplusplus教学/ch18-19-并发编程","并发编程","18.19",18190000,{"path":1235,"stem":1236,"title":1237,"date":992,"chapter":1238,"chapterSort":1239,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-2-nullptr","wiki/2023-10-05-Cplusplus教学/ch18-2-nullptr","nullptr","18.2",18020000,{"path":1241,"stem":1242,"title":1243,"date":992,"chapter":1244,"chapterSort":1245,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-20-std-filesystem","wiki/2023-10-05-Cplusplus教学/ch18-20-std-filesystem","std::filesystem","18.20",18200000,{"path":1247,"stem":1248,"title":1249,"date":992,"chapter":1250,"chapterSort":1251,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-21-modules-jian-jie","wiki/2023-10-05-Cplusplus教学/ch18-21-modules简介","modules 简介","18.21",18210000,{"path":1253,"stem":1254,"title":1255,"date":992,"chapter":1256,"chapterSort":1257,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-3-using","wiki/2023-10-05-Cplusplus教学/ch18-3-using","using","18.3",18030000,{"path":1259,"stem":1260,"title":1261,"date":992,"chapter":1262,"chapterSort":1263,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-4-enum-class","wiki/2023-10-05-Cplusplus教学/ch18-4-enum-class","enum class","18.4",18040000,{"path":1265,"stem":1266,"title":1267,"date":992,"chapter":1268,"chapterSort":1269,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-5-fan-wei-for-xun-huan","wiki/2023-10-05-Cplusplus教学/ch18-5-范围for循环","范围 for 循环","18.5",18050000,{"path":1271,"stem":1272,"title":1273,"date":992,"chapter":1274,"chapterSort":1275,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-6-jie-gou-hua-bang-ding","wiki/2023-10-05-Cplusplus教学/ch18-6-结构化绑定","结构化绑定","18.6",18060000,{"path":1277,"stem":1278,"title":1279,"date":992,"chapter":1280,"chapterSort":1281,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-7-constexpr","wiki/2023-10-05-Cplusplus教学/ch18-7-constexpr","constexpr","18.7",18070000,{"path":1283,"stem":1284,"title":1285,"date":992,"chapter":1286,"chapterSort":1287,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-8-raii","wiki/2023-10-05-Cplusplus教学/ch18-8-RAII","RAII","18.8",18080000,{"path":1289,"stem":1290,"title":1291,"date":992,"chapter":1292,"chapterSort":1293,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-9-zhi-neng-zhi-zhen","wiki/2023-10-05-Cplusplus教学/ch18-9-智能指针","智能指针","18.9",18090000,{"path":1295,"stem":1296,"title":1297,"date":992,"chapter":1298,"chapterSort":1299,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-xian-dai-c","wiki/2023-10-05-Cplusplus教学/ch18-现代C++","现代C++","18",18000000,{"path":1301,"stem":1302,"title":1303,"date":992,"chapter":1304,"chapterSort":1305,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-1-ding-shi-qi-yu-yi-bu-io","wiki/2023-10-05-Cplusplus教学/ch19-1-1-定时器与异步IO","定时器与异步 IO","19.1.1",19010100,{"path":1307,"stem":1308,"title":1309,"date":992,"chapter":1310,"chapterSort":1311,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-2-boost-asio-ji-chu","wiki/2023-10-05-Cplusplus教学/ch19-1-2-Boost.Asio基础","Boost.Asio 基础","19.1.2",19010200,{"path":1313,"stem":1314,"title":1315,"date":992,"chapter":1316,"chapterSort":1317,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-3-chuan-kou-tong-xin","wiki/2023-10-05-Cplusplus教学/ch19-1-3-串口通信","串口通信","19.1.3",19010300,{"path":1319,"stem":1320,"title":1321,"date":992,"chapter":1322,"chapterSort":1323,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-4-tcp-tong-xin","wiki/2023-10-05-Cplusplus教学/ch19-1-4-TCP通信","TCP 通信","19.1.4",19010400,{"path":1325,"stem":1326,"title":1327,"date":992,"chapter":1328,"chapterSort":1329,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-5-udp-tong-xin","wiki/2023-10-05-Cplusplus教学/ch19-1-5-UDP通信","UDP 通信","19.1.5",19010500,{"path":1331,"stem":1332,"title":1333,"date":992,"chapter":1334,"chapterSort":1335,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-6-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","wiki/2023-10-05-Cplusplus教学/ch19-1-6-机器人工程写法与ROS2集成","机器人工程写法与 ROS2 集成","19.1.6",19010600,{"path":989,"stem":998,"title":5,"date":992,"chapter":990,"chapterSort":991,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},{"path":1338,"stem":1339,"title":1340,"date":992,"chapter":1341,"chapterSort":1342,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-2-eigen-xian-xing-dai-shu-ku","wiki/2023-10-05-Cplusplus教学/ch19-2-Eigen线性代数库","Eigen线性代数库","19.2",19020000,{"path":1344,"stem":1345,"title":1346,"date":992,"chapter":1347,"chapterSort":1348,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-3-opencv-ji-suan-ji-shi-jue-ku","wiki/2023-10-05-Cplusplus教学/ch19-3-OpenCV计算机视觉库","OpenCV计算机视觉库","19.3",19030000,{"path":1350,"stem":1351,"title":1352,"date":992,"chapter":1353,"chapterSort":1354,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-4-pcl-dian-yun-ku","wiki/2023-10-05-Cplusplus教学/ch19-4-PCL点云库","PCL点云库","19.4",19040000,{"path":1356,"stem":1357,"title":1358,"date":992,"chapter":1359,"chapterSort":1360,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-5-sophus-li-qun-li-dai-shu-ku","wiki/2023-10-05-Cplusplus教学/ch19-5-Sophus李群李代数库","Sophus 李群李代数库","19.5",19050000,{"path":1362,"stem":1363,"title":1364,"date":992,"chapter":1365,"chapterSort":1366,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-chang-yong-ku","wiki/2023-10-05-Cplusplus教学/ch19-常用库","常用库学习","19",19000000,{"path":1368,"stem":1369,"title":1370,"date":992,"chapter":560,"chapterSort":1371,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch2-shu-ju-lei-xing-yu-shu-ju-cun-fang","wiki/2023-10-05-Cplusplus教学/ch2-数据类型与数据存放","数据类型与数据存放",2000000,{"path":1373,"stem":1374,"title":1375,"date":992,"chapter":1376,"chapterSort":1377,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch3-shu-ru-shu-chu","wiki/2023-10-05-Cplusplus教学/ch3-输入输出","输入输出","3",3000000,{"path":1379,"stem":1380,"title":1381,"date":992,"chapter":1382,"chapterSort":1383,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch4-yun-suan-fu","wiki/2023-10-05-Cplusplus教学/ch4-运算符","运算符","4",4000000,{"path":1385,"stem":1386,"title":1387,"date":992,"chapter":1388,"chapterSort":1389,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch5-cheng-xu-liu-cheng-jie-gou","wiki/2023-10-05-Cplusplus教学/ch5-程序流程结构","程序流程结构","5",5000000,{"path":1391,"stem":1392,"title":1393,"date":992,"chapter":1394,"chapterSort":1395,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch6-shu-zu","wiki/2023-10-05-Cplusplus教学/ch6-数组","数组","6",6000000,{"path":1397,"stem":1398,"title":1399,"date":992,"chapter":1400,"chapterSort":1401,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch7-han-shu-yu-tou-wen-jian","wiki/2023-10-05-Cplusplus教学/ch7-函数与头文件","函数与头文件","7",7000000,{"path":1403,"stem":1404,"title":1405,"date":992,"chapter":1406,"chapterSort":1407,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch8-zhi-zhen","wiki/2023-10-05-Cplusplus教学/ch8-指针","指针","8",8000000,{"path":1409,"stem":1410,"title":1411,"date":992,"chapter":1412,"chapterSort":1413,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":999},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch9-jie-gou-ti-yu-gong-yong-ti","wiki/2023-10-05-Cplusplus教学/ch9-结构体与共用体","结构体与共用体","9",9000000,{"path":995,"stem":1415,"title":1416,"date":992,"chapter":1000,"chapterSort":1417,"docKey":994,"docRoot":995,"docTitle":996,"isWikiDoc":568,"isWikiIndex":568},"wiki/2023-10-05-Cplusplus教学/index","C/C++教程",0,{"variants":1419},[1420,1423,1426,1429,1432],{"path":1421,"localeSlug":1422,"i18nKey":998},"/en-us/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-boost-asio-yi-bu-io-ku","en-us",{"path":1424,"localeSlug":1425,"i18nKey":998},"/zh-hant/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-boost-asio-yi-bu-io-ku","zh-hant",{"path":1427,"localeSlug":1428,"i18nKey":998},"/zh-hk/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-boost-asio-yi-bu-io-ku","zh-hk",{"path":1430,"localeSlug":1431,"i18nKey":998},"/zh-tw/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-boost-asio-yi-bu-io-ku","zh-tw",{"path":989,"localeSlug":1003,"i18nKey":998},[1421,1001,1424,1001,1427,1001,1430,1001,989,1001],1780663038930]