[{"data":1,"prerenderedAt":1431},["ShallowReactive",2],{"wiki-page-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku":3,"wiki-doc-items-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku":1010,"language-switcher-data-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku":1415,"wiki-i18n-paths-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku":1430},{"id":4,"title":5,"body":6,"canonicalPath":992,"chapterDepth":110,"chapterOrder":993,"date":994,"description":39,"docI18nKey":995,"docKey":996,"docRoot":997,"docTitle":998,"extension":999,"i18nKey":1000,"isBlogPost":1001,"isWikiDoc":568,"isWikiIndex":1001,"layout":1002,"legacyPath":1002,"locale":1003,"localeSlug":1004,"meta":1005,"navigation":568,"path":992,"seo":1006,"sourcePath":1007,"sourceStem":1000,"stem":1008,"wikiDepth":110,"__hash__":1009},"content\u002F_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库.md","Boost.Asio asynchronous IO library",{"type":7,"value":8,"toc":973},"minimark",[9,21,24,29,32,42,45,85,87,91,96,99,151,154,207,210,239,245,248,283,286,329,332,416,419,446,449,453,456,482,489,491,495,498,504,507,609,612,618,621,627,629,633,637,673,677,699,703,706,734,741,745,848,850,854,857,885,888,894,896,900,903,935,937,941,969],[10,11,12],"blockquote",{},[13,14,15,16,20],"p",{},"This chapter is for learning about robots, ROS2, lower-level computer serial ports, and TCP\u002FUDP communication.\nThis tutorial intentionally uses ",[17,18,19],"code",{},"std::bind"," and temporarily avoids lambda, so that beginners can first clearly understand \"callback functions, placeholders, member function binding, and asynchronous execution order.\"",[22,23],"hr",{},[25,26,28],"h2",{"id":27},"the-chapter-order-of-this-tutorial","The chapter order of this tutorial.",[13,30,31],{},"Recommended learning order is as follows:",[33,34,40],"pre",{"className":35,"code":37,"language":38,"meta":39},[36],"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","",[17,41,37],{"__ignoreMap":39},[13,43,44],{},"I put the 'timer' first because it doesn't depend on serial port hardware or a network peer, and is most suitable for seeing clearly:",[46,47,48,55,61,64,67],"ol",{},[49,50,51,54],"li",{},[17,52,53],{},"io_context.run()"," why does it block;",[49,56,57,60],{},[17,58,59],{},"async_wait()"," why doesn't it execute the callback immediately;",[49,62,63],{},"The difference between one timer and two timers;",[49,65,66],{},"Which thread does the callback function actually execute in;",[49,68,69,70,72,73,76,77,80,81,84],{},"What exactly do ",[17,71,19],{},"'s ",[17,74,75],{},"_1",", ",[17,78,79],{},"this",", and ",[17,82,83],{},"&Class::func"," mean?",[22,86],{},[25,88,90],{"id":89},"unified-conventions-for-this-tutorial","Unified Conventions for This Tutorial",[92,93,95],"h3",{"id":94},"use-standard-library-style-consistently","Use standard library style consistently.",[13,97,98],{},"This tutorial uses the standard library as much as possible:",[33,100,104],{"className":101,"code":102,"language":103,"meta":39,"style":39},"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",[17,105,106,119,127,135,143],{"__ignoreMap":39},[107,108,111,115],"span",{"class":109,"line":110},"line",1,[107,112,114],{"class":113},"szBVR","#include",[107,116,118],{"class":117},"sZZnC"," \u003Cchrono>\n",[107,120,122,124],{"class":109,"line":121},2,[107,123,114],{"class":113},[107,125,126],{"class":117}," \u003Cfunctional>\n",[107,128,130,132],{"class":109,"line":129},3,[107,131,114],{"class":113},[107,133,134],{"class":117}," \u003Cmemory>\n",[107,136,138,140],{"class":109,"line":137},4,[107,139,114],{"class":113},[107,141,142],{"class":117}," \u003Cthread>\n",[107,144,146,148],{"class":109,"line":145},5,[107,147,114],{"class":113},[107,149,150],{"class":117}," \u003Cstring>\n",[13,152,153],{},"For example, unify timer time settings:",[33,155,157],{"className":101,"code":156,"language":103,"meta":39,"style":39},"std::chrono::seconds(1)\nstd::chrono::milliseconds(100)\n",[17,158,159,187],{"__ignoreMap":39},[107,160,161,165,169,172,174,177,180,184],{"class":109,"line":110},[107,162,164],{"class":163},"sScJk","std",[107,166,168],{"class":167},"sVt8B","::",[107,170,171],{"class":163},"chrono",[107,173,168],{"class":167},[107,175,176],{"class":163},"seconds",[107,178,179],{"class":167},"(",[107,181,183],{"class":182},"sj4cs","1",[107,185,186],{"class":167},")\n",[107,188,189,191,193,195,197,200,202,205],{"class":109,"line":121},[107,190,164],{"class":163},[107,192,168],{"class":167},[107,194,171],{"class":163},[107,196,168],{"class":167},[107,198,199],{"class":163},"milliseconds",[107,201,179],{"class":167},[107,203,204],{"class":182},"100",[107,206,186],{"class":167},[13,208,209],{},"Instead of writing first:",[33,211,213],{"className":101,"code":212,"language":103,"meta":39,"style":39},"boost::asio::chrono::seconds(1)\n",[17,214,215],{"__ignoreMap":39},[107,216,217,220,222,225,227,229,231,233,235,237],{"class":109,"line":110},[107,218,219],{"class":163},"boost",[107,221,168],{"class":167},[107,223,224],{"class":163},"asio",[107,226,168],{"class":167},[107,228,171],{"class":163},[107,230,168],{"class":167},[107,232,176],{"class":163},[107,234,179],{"class":167},[107,236,183],{"class":182},[107,238,186],{"class":167},[92,240,242,243],{"id":241},"callbacks-uniformly-use-stdbind","Callbacks uniformly use ",[17,244,19],{},[13,246,247],{},"In this tutorial, asynchronous callbacks should be written as:",[33,249,251],{"className":101,"code":250,"language":103,"meta":39,"style":39},"timer.async_wait(std::bind(on_timer, std::placeholders::_1));\n",[17,252,253],{"__ignoreMap":39},[107,254,255,258,261,263,265,267,270,273,275,277,280],{"class":109,"line":110},[107,256,257],{"class":167},"timer.",[107,259,260],{"class":163},"async_wait",[107,262,179],{"class":167},[107,264,164],{"class":163},[107,266,168],{"class":167},[107,268,269],{"class":163},"bind",[107,271,272],{"class":167},"(on_timer, ",[107,274,164],{"class":163},[107,276,168],{"class":167},[107,278,279],{"class":163},"placeholders",[107,281,282],{"class":167},"::_1));\n",[13,284,285],{},"Member function callback written as:",[33,287,289],{"className":101,"code":288,"language":103,"meta":39,"style":39},"timer_.async_wait(std::bind(&Printer::on_timer, this, std::placeholders::_1));\n",[17,290,291],{"__ignoreMap":39},[107,292,293,296,298,300,302,304,306,308,311,314,317,319,321,323,325,327],{"class":109,"line":110},[107,294,295],{"class":167},"timer_.",[107,297,260],{"class":163},[107,299,179],{"class":167},[107,301,164],{"class":163},[107,303,168],{"class":167},[107,305,269],{"class":163},[107,307,179],{"class":167},[107,309,310],{"class":113},"&",[107,312,313],{"class":163},"Printer",[107,315,316],{"class":167},"::on_timer, ",[107,318,79],{"class":182},[107,320,76],{"class":167},[107,322,164],{"class":163},[107,324,168],{"class":167},[107,326,279],{"class":163},[107,328,282],{"class":167},[13,330,331],{},"When the read-write callback has two parameters, write it as:",[33,333,335],{"className":101,"code":334,"language":103,"meta":39,"style":39},"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",[17,336,337,348,365,384,392,404],{"__ignoreMap":39},[107,338,339,342,345],{"class":109,"line":110},[107,340,341],{"class":167},"socket.",[107,343,344],{"class":163},"async_read_some",[107,346,347],{"class":167},"(\n",[107,349,350,353,355,357,359,362],{"class":109,"line":121},[107,351,352],{"class":163},"    boost",[107,354,168],{"class":167},[107,356,224],{"class":163},[107,358,168],{"class":167},[107,360,361],{"class":163},"buffer",[107,363,364],{"class":167},"(data_),\n",[107,366,367,370,372,374,376,378,381],{"class":109,"line":129},[107,368,369],{"class":163},"    std",[107,371,168],{"class":167},[107,373,269],{"class":163},[107,375,179],{"class":167},[107,377,310],{"class":113},[107,379,380],{"class":163},"Session",[107,382,383],{"class":167},"::on_read,\n",[107,385,386,389],{"class":109,"line":137},[107,387,388],{"class":182},"              this",[107,390,391],{"class":167},",\n",[107,393,394,397,399,401],{"class":109,"line":145},[107,395,396],{"class":163},"              std",[107,398,168],{"class":167},[107,400,279],{"class":163},[107,402,403],{"class":167},"::_1,\n",[107,405,407,409,411,413],{"class":109,"line":406},6,[107,408,396],{"class":163},[107,410,168],{"class":167},[107,412,279],{"class":163},[107,414,415],{"class":167},"::_2));\n",[13,417,418],{},"Among them:",[33,420,422],{"className":101,"code":421,"language":103,"meta":39,"style":39},"std::placeholders::_1\nstd::placeholders::_2\n",[17,423,424,435],{"__ignoreMap":39},[107,425,426,428,430,432],{"class":109,"line":110},[107,427,164],{"class":163},[107,429,168],{"class":167},[107,431,279],{"class":163},[107,433,434],{"class":167},"::_1\n",[107,436,437,439,441,443],{"class":109,"line":121},[107,438,164],{"class":163},[107,440,168],{"class":167},[107,442,279],{"class":163},[107,444,445],{"class":167},"::_2\n",[13,447,448],{},"\"Indicates the first and second parameters that Boost.Asio automatically passes to the callback function when the asynchronous operation completes.\"",[92,450,452],{"id":451},"error-codes-still-use-boostasios-types","Error codes still use Boost.Asio's types.",[13,454,455],{},"Do not change this arbitrarily:",[33,457,459],{"className":101,"code":458,"language":103,"meta":39,"style":39},"const boost::system::error_code& ec\n",[17,460,461],{"__ignoreMap":39},[107,462,463,466,469,471,474,477,479],{"class":109,"line":110},[107,464,465],{"class":113},"const",[107,467,468],{"class":163}," boost",[107,470,168],{"class":167},[107,472,473],{"class":163},"system",[107,475,476],{"class":167},"::error_code",[107,478,310],{"class":113},[107,480,481],{"class":167}," ec\n",[13,483,484,485,488],{},"The reason is that Boost.Asio's asynchronous callback by default passes the error to ",[17,486,487],{},"boost::system::error_code",". If you later switch to standalone Asio or a standard networking library, then consider the corresponding type.",[22,490],{},[25,492,494],{"id":493},"the-core-idea-of-boostasio","The core idea of Boost.Asio",[13,496,497],{},"Boost.Asio can be roughly understood as:",[33,499,502],{"className":500,"code":501,"language":38,"meta":39},[36],"io_context = 事件循环 \u002F 调度器\nsocket \u002F serial_port \u002F timer = IO对象\nasync_xxx() = 注册一个异步任务\nhandler = 异步任务完成后执行的回调函数\nrun() = 开始处理异步任务和回调函数\n",[17,503,501],{"__ignoreMap":39},[13,505,506],{},"A minimal asynchronous program looks roughly like this:",[33,508,510],{"className":101,"code":509,"language":103,"meta":39,"style":39},"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",[17,511,512,523,564,570,594,598],{"__ignoreMap":39},[107,513,514,516,518,520],{"class":109,"line":110},[107,515,219],{"class":163},[107,517,168],{"class":167},[107,519,224],{"class":163},[107,521,522],{"class":167},"::io_context io;\n",[107,524,525,527,529,531,533,536,539,541,544,546,548,550,552,554,556,558,561],{"class":109,"line":121},[107,526,219],{"class":163},[107,528,168],{"class":167},[107,530,224],{"class":163},[107,532,168],{"class":167},[107,534,535],{"class":163},"steady_timer",[107,537,538],{"class":163}," timer",[107,540,179],{"class":167},[107,542,543],{"class":163},"io",[107,545,76],{"class":167},[107,547,164],{"class":163},[107,549,168],{"class":167},[107,551,171],{"class":163},[107,553,168],{"class":167},[107,555,176],{"class":163},[107,557,179],{"class":167},[107,559,560],{"class":182},"2",[107,562,563],{"class":167},"));\n",[107,565,566],{"class":109,"line":129},[107,567,569],{"emptyLinePlaceholder":568},true,"\n",[107,571,572,574,576,578,580,582,584,586,588,590,592],{"class":109,"line":137},[107,573,257],{"class":167},[107,575,260],{"class":163},[107,577,179],{"class":167},[107,579,164],{"class":163},[107,581,168],{"class":167},[107,583,269],{"class":163},[107,585,272],{"class":167},[107,587,164],{"class":163},[107,589,168],{"class":167},[107,591,279],{"class":163},[107,593,282],{"class":167},[107,595,596],{"class":109,"line":145},[107,597,569],{"emptyLinePlaceholder":568},[107,599,600,603,606],{"class":109,"line":406},[107,601,602],{"class":167},"io.",[107,604,605],{"class":163},"run",[107,607,608],{"class":167},"();\n",[13,610,611],{},"The execution logic is not:",[33,613,616],{"className":614,"code":615,"language":38,"meta":39},[36],"async_wait 立刻执行 on_timer\n",[17,617,615],{"__ignoreMap":39},[13,619,620],{},"but rather:",[33,622,625],{"className":623,"code":624,"language":38,"meta":39},[36],"async_wait 注册任务\nio.run() 进入事件循环\n等待 2 秒\ntimer 到期\nio.run() 调用 on_timer\n没有任务了\nio.run() 返回\n",[17,626,624],{"__ignoreMap":39},[22,628],{},[25,630,632],{"id":631},"build-environment","build environment",[92,634,636],{"id":635},"ubuntu-debian","Ubuntu \u002F Debian",[33,638,642],{"className":639,"code":640,"language":641,"meta":39,"style":39},"language-bash shiki shiki-themes github-light github-dark","sudo apt update\nsudo apt install libboost-all-dev g++ cmake\n","bash",[17,643,644,655],{"__ignoreMap":39},[107,645,646,649,652],{"class":109,"line":110},[107,647,648],{"class":163},"sudo",[107,650,651],{"class":117}," apt",[107,653,654],{"class":117}," update\n",[107,656,657,659,661,664,667,670],{"class":109,"line":121},[107,658,648],{"class":163},[107,660,651],{"class":117},[107,662,663],{"class":117}," install",[107,665,666],{"class":117}," libboost-all-dev",[107,668,669],{"class":117}," g++",[107,671,672],{"class":117}," cmake\n",[92,674,676],{"id":675},"fedora","Fedora",[33,678,680],{"className":639,"code":679,"language":641,"meta":39,"style":39},"sudo dnf install boost-devel gcc-c++ cmake\n",[17,681,682],{"__ignoreMap":39},[107,683,684,686,689,691,694,697],{"class":109,"line":110},[107,685,648],{"class":163},[107,687,688],{"class":117}," dnf",[107,690,663],{"class":117},[107,692,693],{"class":117}," boost-devel",[107,695,696],{"class":117}," gcc-c++",[107,698,672],{"class":117},[92,700,702],{"id":701},"single-file-compilation-command","Single-file compilation command",[13,704,705],{},"Many examples can be compiled directly like this:",[33,707,709],{"className":639,"code":708,"language":641,"meta":39,"style":39},"g++ demo.cpp -o demo -std=c++17 -lboost_system -pthread\n",[17,710,711],{"__ignoreMap":39},[107,712,713,716,719,722,725,728,731],{"class":109,"line":110},[107,714,715],{"class":163},"g++",[107,717,718],{"class":117}," demo.cpp",[107,720,721],{"class":182}," -o",[107,723,724],{"class":117}," demo",[107,726,727],{"class":182}," -std=c++17",[107,729,730],{"class":182}," -lboost_system",[107,732,733],{"class":182}," -pthread\n",[13,735,736,737,740],{},"If your Boost version is relatively new, you may not need to explicitly link ",[17,738,739],{},"-lboost_system"," on some Linux distributions, but it’s recommended to include it in the early learning stages to reduce environment discrepancies.",[92,742,744],{"id":743},"recommended-cmake-template","Recommended CMake template",[33,746,750],{"className":747,"code":748,"language":749,"meta":39,"style":39},"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",[17,751,752,765,773,777,785,797,801,814,819,828],{"__ignoreMap":39},[107,753,754,757,759,762],{"class":109,"line":110},[107,755,756],{"class":113},"cmake_minimum_required",[107,758,179],{"class":167},[107,760,761],{"class":163},"VERSION",[107,763,764],{"class":167}," 3.16)\n",[107,766,767,770],{"class":109,"line":121},[107,768,769],{"class":113},"project",[107,771,772],{"class":167},"(asio_demo)\n",[107,774,775],{"class":109,"line":129},[107,776,569],{"emptyLinePlaceholder":568},[107,778,779,782],{"class":109,"line":137},[107,780,781],{"class":113},"set",[107,783,784],{"class":167},"(CMAKE_CXX_STANDARD 17)\n",[107,786,787,789,792,795],{"class":109,"line":145},[107,788,781],{"class":113},[107,790,791],{"class":167},"(CMAKE_CXX_STANDARD_REQUIRED ",[107,793,794],{"class":113},"ON",[107,796,186],{"class":167},[107,798,799],{"class":109,"line":406},[107,800,569],{"emptyLinePlaceholder":568},[107,802,804,807,810,812],{"class":109,"line":803},7,[107,805,806],{"class":113},"find_package",[107,808,809],{"class":167},"(Boost REQUIRED COMPONENTS ",[107,811,473],{"class":182},[107,813,186],{"class":167},[107,815,817],{"class":109,"line":816},8,[107,818,569],{"emptyLinePlaceholder":568},[107,820,822,825],{"class":109,"line":821},9,[107,823,824],{"class":113},"add_executable",[107,826,827],{"class":167},"(demo demo.cpp)\n",[107,829,831,834,837,840,843,845],{"class":109,"line":830},10,[107,832,833],{"class":113},"target_link_libraries",[107,835,836],{"class":167},"(demo ",[107,838,839],{"class":163},"PRIVATE",[107,841,842],{"class":167}," Boost::",[107,844,473],{"class":182},[107,846,847],{"class":167}," pthread)\n",[22,849],{},[25,851,853],{"id":852},"why-learn-timers-first","Why learn timers first?",[13,855,856],{},"In robot communication, the most common issue isn't \"whether you know how to call the API,\" but rather:",[46,858,859,862,865,868,871,877,882],{},[49,860,861],{},"When is the callback executed;",[49,863,864],{},"In which thread is the callback executed?",[49,866,867],{},"When is an object destructed;",[49,869,870],{},"When can buffer data still be used;",[49,872,873,876],{},[17,874,875],{},"run()"," why is it stuck;",[49,878,879,881],{},[17,880,875],{}," why would it return early again;",[49,883,884],{},"Why does data race occur in multithreading?",[13,886,887],{},"These problems can all be understood by first grasping timers. Once you understand timers, serial ports, TCP, and UDP are essentially just \"different events to wait for\":",[33,889,892],{"className":890,"code":891,"language":38,"meta":39},[36],"timer 等待时间到期\nserial_port 等待串口可读 \u002F 可写\ntcp::socket 等待网络可读 \u002F 可写 \u002F 连接完成\nudp::socket 等待收到一个数据报\n",[17,893,891],{"__ignoreMap":39},[22,895],{},[25,897,899],{"id":898},"after-completing-this-tutorial-what-level-should-be-achieved","After completing this tutorial, what level should be achieved?",[13,901,902],{},"After learning, you should be able to:",[46,904,905,908,914,920,923,926,929,932],{},[49,906,907],{},"Understand the official Boost.Asio timer \u002F TCP \u002F UDP tutorial;",[49,909,910,911,913],{},"Can use ",[17,912,19],{}," to write ordinary function callbacks and member function callbacks;",[49,915,916,917,919],{},"Can explain the blocking and return conditions of ",[17,918,53],{},";",[49,921,922],{},"Can you write an asynchronous serial port read of the lower computer's data;",[49,924,925],{},"Can write TCP client\u002Fserver;",[49,927,928],{},"Can write UDP sender \u002F receiver \u002F echo server;",[49,930,931],{},"Able to encapsulate the Asio communication module into a class;",[49,933,934],{},"It can integrate the communication module into the ROS2 node, instead of writing a blocking infinite loop in the ROS2 callback.",[22,936],{},[25,938,940],{"id":939},"the-5-sentences-you-need-to-remember-most-right-now","The 5 sentences you need to remember most right now",[46,942,943,949,954,960,963],{},[49,944,945,948],{},[17,946,947],{},"async_xxx()"," just registers an asynchronous task, not immediately executing the callback.",[49,950,951,953],{},[17,952,53],{}," is where asynchronous task execution is truly driven.",[49,955,956,957,959],{},"The callback function will only be called in the thread that is executing ",[17,958,53],{},".",[49,961,962],{},"Asynchronous buffer, socket, and timer objects must live until the callback completes execution.",[49,964,965,966,959],{},"When binding a member function in a class, write ",[17,967,968],{},"std::bind(&Class::func, this, _1, _2)",[970,971,972],"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":39,"searchDepth":121,"depth":121,"links":974},[975,976,982,983,989,990,991],{"id":27,"depth":121,"text":28},{"id":89,"depth":121,"text":90,"children":977},[978,979,981],{"id":94,"depth":129,"text":95},{"id":241,"depth":129,"text":980},"Callbacks uniformly use std::bind",{"id":451,"depth":129,"text":452},{"id":493,"depth":121,"text":494},{"id":631,"depth":121,"text":632,"children":984},[985,986,987,988],{"id":635,"depth":129,"text":636},{"id":675,"depth":129,"text":676},{"id":701,"depth":129,"text":702},{"id":743,"depth":129,"text":744},{"id":852,"depth":121,"text":853},{"id":898,"depth":121,"text":899},{"id":939,"depth":121,"text":940},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","2100-0100","2023-10-05","wiki\u002F2023-10-05-cplusplus-jiao-xue","en-us:2023-10-05-cplusplus-jiao-xue","\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库",false,null,"en-US","en-us",{},{"title":5,"description":39},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","a-hYzmenoALqv4mJUxbqBsP_GjDOL8mwBG5zZv84LSA",[1011,1017,1022,1027,1032,1037,1042,1047,1052,1057,1062,1067,1072,1077,1082,1087,1092,1097,1102,1107,1112,1117,1122,1127,1132,1137,1142,1147,1152,1157,1162,1167,1172,1177,1182,1187,1192,1197,1202,1207,1212,1217,1222,1227,1232,1237,1242,1247,1252,1257,1261,1266,1271,1276,1281,1286,1291,1296,1301,1306,1311,1316,1321,1326,1331,1336,1341,1346,1351,1356,1357,1362,1367,1372,1377,1382,1387,1392,1397,1402,1407,1412],{"path":1012,"stem":1013,"title":1014,"date":994,"chapterOrder":1015,"chapterDepth":1016,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0100-C++开发环境搭建与测试","C++ Development Environment Setup and Testing","0100",0,{"path":1018,"stem":1019,"title":1020,"date":994,"chapterOrder":1021,"chapterDepth":1016,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++ Basics","0200",{"path":1023,"stem":1024,"title":1025,"date":994,"chapterOrder":1026,"chapterDepth":1016,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0300-shu-ju-lei-xing-yu-shu-ju-cun-fang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0300-数据类型与数据存放","Data Types and Data Storage","0300",{"path":1028,"stem":1029,"title":1030,"date":994,"chapterOrder":1031,"chapterDepth":1016,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","Input and Output","0400",{"path":1033,"stem":1034,"title":1035,"date":994,"chapterOrder":1036,"chapterDepth":1016,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","operator","0500",{"path":1038,"stem":1039,"title":1040,"date":994,"chapterOrder":1041,"chapterDepth":1016,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","program flow structure","0600",{"path":1043,"stem":1044,"title":1045,"date":994,"chapterOrder":1046,"chapterDepth":1016,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","array","0700",{"path":1048,"stem":1049,"title":1050,"date":994,"chapterOrder":1051,"chapterDepth":1016,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","Functions and Header Files","0800",{"path":1053,"stem":1054,"title":1055,"date":994,"chapterOrder":1056,"chapterDepth":1016,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","pointer","0900",{"path":1058,"stem":1059,"title":1060,"date":994,"chapterOrder":1061,"chapterDepth":1016,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","Structures and Unions","1000",{"path":1063,"stem":1064,"title":1065,"date":994,"chapterOrder":1066,"chapterDepth":1016,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1100-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1100-内存分区与生命周期","Memory Partitioning and Lifecycle","1100",{"path":1068,"stem":1069,"title":1070,"date":994,"chapterOrder":1071,"chapterDepth":1016,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","reference","1200",{"path":1073,"stem":1074,"title":1075,"date":994,"chapterOrder":1076,"chapterDepth":1016,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao-yu-ming-ming-kong-jian","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高与命名空间","Advanced Functions and Namespaces","1300",{"path":1078,"stem":1079,"title":1080,"date":994,"chapterOrder":1081,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","encapsulation","1400-0100",{"path":1083,"stem":1084,"title":1085,"date":994,"chapterOrder":1086,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0200-dui-xiang-chu-shi-hua-he-qing-li","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0200-对象初始化和清理","Object initialization and cleanup","1400-0200",{"path":1088,"stem":1089,"title":1090,"date":994,"chapterOrder":1091,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0300-dui-xiang-mo-xing-yu-this-zhi-zhen","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0300-对象模型与this指针","Object Model and the `this` Pointer","1400-0300",{"path":1093,"stem":1094,"title":1095,"date":994,"chapterOrder":1096,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0400-you-yuan-yu-yun-suan-fu-zhong-zai","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0400-友元与运算符重载","Friends and operator overloading","1400-0400",{"path":1098,"stem":1099,"title":1100,"date":994,"chapterOrder":1101,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","inheritance","1400-0500",{"path":1103,"stem":1104,"title":1105,"date":994,"chapterOrder":1106,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","polymorphism","1400-0600",{"path":1108,"stem":1109,"title":1110,"date":994,"chapterOrder":1111,"chapterDepth":1016,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","Classes and Objects","1400",{"path":1113,"stem":1114,"title":1115,"date":994,"chapterOrder":1116,"chapterDepth":1016,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","File operations","1500",{"path":1118,"stem":1119,"title":1120,"date":994,"chapterOrder":1121,"chapterDepth":1016,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","异常处理","1600",{"path":1123,"stem":1124,"title":1125,"date":994,"chapterOrder":1126,"chapterDepth":1016,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","template","1700",{"path":1128,"stem":1129,"title":1130,"date":994,"chapterOrder":1131,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","Introduction to STL","1800-0100",{"path":1133,"stem":1134,"title":1135,"date":994,"chapterOrder":1136,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0200-std-array","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0200-std-array","std::array","1800-0200",{"path":1138,"stem":1139,"title":1140,"date":994,"chapterOrder":1141,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string container","1800-0300",{"path":1143,"stem":1144,"title":1145,"date":994,"chapterOrder":1146,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector容器","vector 容器","1800-0400",{"path":1148,"stem":1149,"title":1150,"date":994,"chapterOrder":1151,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-deque-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-deque容器","deque 容器","1800-0500",{"path":1153,"stem":1154,"title":1155,"date":994,"chapterOrder":1156,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-stack-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-stack容器","stack 容器","1800-0600",{"path":1158,"stem":1159,"title":1160,"date":994,"chapterOrder":1161,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-queue-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-queue容器","queue container","1800-0700",{"path":1163,"stem":1164,"title":1165,"date":994,"chapterOrder":1166,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-list-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-list容器","list 容器","1800-0800",{"path":1168,"stem":1169,"title":1170,"date":994,"chapterOrder":1171,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0900-set-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0900-set容器","set \u002F multiset 容器","1800-0900",{"path":1173,"stem":1174,"title":1175,"date":994,"chapterOrder":1176,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1000-map-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1000-map容器","map \u002F multimap 容器","1800-1000",{"path":1178,"stem":1179,"title":1180,"date":994,"chapterOrder":1181,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1100-han-shu-dui-xiang-yu-wei-ci","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1100-函数对象与谓词","Function objects and predicates","1800-1100",{"path":1183,"stem":1184,"title":1185,"date":994,"chapterOrder":1186,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1200-chang-yong-suan-fa","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1200-常用算法","Common algorithms","1800-1200",{"path":1188,"stem":1189,"title":1190,"date":994,"chapterOrder":1191,"chapterDepth":1016,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","Level up your programming with STL.","1800",{"path":1193,"stem":1194,"title":1195,"date":994,"chapterOrder":1196,"chapterDepth":1016,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++ Type Casting","1900",{"path":1198,"stem":1199,"title":1200,"date":994,"chapterOrder":1201,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","auto","2000-0100",{"path":1203,"stem":1204,"title":1205,"date":994,"chapterOrder":1206,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","nullptr","2000-0200",{"path":1208,"stem":1209,"title":1210,"date":994,"chapterOrder":1211,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","using","2000-0300",{"path":1213,"stem":1214,"title":1215,"date":994,"chapterOrder":1216,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0400-enum-class","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0400-enum-class","enum class","2000-0400",{"path":1218,"stem":1219,"title":1220,"date":994,"chapterOrder":1221,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0500-fan-wei-for-xun-huan","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0500-范围for循环","range-based for loop","2000-0500",{"path":1223,"stem":1224,"title":1225,"date":994,"chapterOrder":1226,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","structured binding","2000-0600",{"path":1228,"stem":1229,"title":1230,"date":994,"chapterOrder":1231,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","constexpr","2000-0700",{"path":1233,"stem":1234,"title":1235,"date":994,"chapterOrder":1236,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII","2000-0800",{"path":1238,"stem":1239,"title":1240,"date":994,"chapterOrder":1241,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","Smart pointer","2000-0900",{"path":1243,"stem":1244,"title":1245,"date":994,"chapterOrder":1246,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义","Rvalue references and move semantics","2000-1000",{"path":1248,"stem":1249,"title":1250,"date":994,"chapterOrder":1251,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","Lambda expression","2000-1100",{"path":1253,"stem":1254,"title":1255,"date":994,"chapterOrder":1256,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","std::function","2000-1200",{"path":1258,"stem":1259,"title":19,"date":994,"chapterOrder":1260,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","2000-1300",{"path":1262,"stem":1263,"title":1264,"date":994,"chapterOrder":1265,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional","std::optional","2000-1400",{"path":1267,"stem":1268,"title":1269,"date":994,"chapterOrder":1270,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1500-std-variant","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1500-std-variant","std::variant","2000-1500",{"path":1272,"stem":1273,"title":1274,"date":994,"chapterOrder":1275,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1600-std-span","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1600-std-span","std::span","2000-1600",{"path":1277,"stem":1278,"title":1279,"date":994,"chapterOrder":1280,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1700-std-format-print","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1700-std-format-print","std::format \u002F std::print","2000-1700",{"path":1282,"stem":1283,"title":1284,"date":994,"chapterOrder":1285,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1800-std-chrono","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1800-std-chrono","std::chrono","2000-1800",{"path":1287,"stem":1288,"title":1289,"date":994,"chapterOrder":1290,"chapterDepth":121,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0100-std-thread","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0100-std-thread","std::thread and join","2000-1900-0100",{"path":1292,"stem":1293,"title":1294,"date":994,"chapterOrder":1295,"chapterDepth":121,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-mutex-lock-guard","mutex 与 lock_guard","2000-1900-0200",{"path":1297,"stem":1298,"title":1299,"date":994,"chapterOrder":1300,"chapterDepth":121,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0300-std-atomic","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0300-std-atomic","std::atomic","2000-1900-0300",{"path":1302,"stem":1303,"title":1304,"date":994,"chapterOrder":1305,"chapterDepth":121,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0400-condition-variable","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0400-condition-variable","condition_variable","2000-1900-0400",{"path":1307,"stem":1308,"title":1309,"date":994,"chapterOrder":1310,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bian-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发编程","Concurrent programming","2000-1900",{"path":1312,"stem":1313,"title":1314,"date":994,"chapterOrder":1315,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2000-std-filesystem","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2000-std-filesystem","std::filesystem","2000-2000",{"path":1317,"stem":1318,"title":1319,"date":994,"chapterOrder":1320,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","Modules Introduction","2000-2100",{"path":1322,"stem":1323,"title":1324,"date":994,"chapterOrder":1325,"chapterDepth":1016,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","Modern C++","2000",{"path":1327,"stem":1328,"title":1329,"date":994,"chapterOrder":1330,"chapterDepth":121,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0100-ding-shi-qi-yu-yi-bu-io","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0100-定时器与异步IO","Timers and Asynchronous I\u002FO","2100-0100-0100",{"path":1332,"stem":1333,"title":1334,"date":994,"chapterOrder":1335,"chapterDepth":121,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0200-boost-asio-ji-chu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0200-Boost.Asio基础","Boost.Asio Basics","2100-0100-0200",{"path":1337,"stem":1338,"title":1339,"date":994,"chapterOrder":1340,"chapterDepth":121,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0300-chuan-kou-tong-xin","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0300-串口通信","serial communication","2100-0100-0300",{"path":1342,"stem":1343,"title":1344,"date":994,"chapterOrder":1345,"chapterDepth":121,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0400-tcp-tong-xin","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0400-TCP通信","TCP communication","2100-0100-0400",{"path":1347,"stem":1348,"title":1349,"date":994,"chapterOrder":1350,"chapterDepth":121,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0500-udp-tong-xin","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0500-UDP通信","UDP communication","2100-0100-0500",{"path":1352,"stem":1353,"title":1354,"date":994,"chapterOrder":1355,"chapterDepth":121,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0600-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0600-机器人工程写法与ROS2集成","Robot Engineering Approach and ROS2 Integration","2100-0100-0600",{"path":992,"stem":1008,"title":5,"date":994,"chapterOrder":993,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},{"path":1358,"stem":1359,"title":1360,"date":994,"chapterOrder":1361,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0200-eigen-xian-xing-dai-shu-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0200-Eigen线性代数库","Eigen linear algebra library","2100-0200",{"path":1363,"stem":1364,"title":1365,"date":994,"chapterOrder":1366,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0300-opencv-ji-suan-ji-shi-jue-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0300-OpenCV计算机视觉库","OpenCV Computer Vision Library","2100-0300",{"path":1368,"stem":1369,"title":1370,"date":994,"chapterOrder":1371,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0400-pcl-dian-yun-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0400-PCL点云库","PCL Point Cloud Library","2100-0400",{"path":1373,"stem":1374,"title":1375,"date":994,"chapterOrder":1376,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0500-sophus-li-qun-li-dai-shu-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0500-Sophus李群李代数库","Sophus Lie group and Lie algebra library","2100-0500",{"path":1378,"stem":1379,"title":1380,"date":994,"chapterOrder":1381,"chapterDepth":1016,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","Learning Common Libraries","2100",{"path":1383,"stem":1384,"title":1385,"date":994,"chapterOrder":1386,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0100-cmakepresets-yu-gou-jian-an-zhuang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0100-CMakePresets与构建安装","CMakePresets and Build Installation","2200-0100",{"path":1388,"stem":1389,"title":1390,"date":994,"chapterOrder":1391,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项","Top-level CMake and Public Compilation Options","2200-0200",{"path":1393,"stem":1394,"title":1395,"date":994,"chapterOrder":1396,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0300-src-yu-lib-mo-kuai-cmake-xiang-jie","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0300-src与lib模块CMake详解","Detailed CMake Explanation for src and lib Modules","2200-0300",{"path":1398,"stem":1399,"title":1400,"date":994,"chapterOrder":1401,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法","How to write third-party library dependencies","2200-0400",{"path":1403,"stem":1404,"title":1405,"date":994,"chapterOrder":1406,"chapterDepth":110,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0500-mu-ban-kuo-zhan-yu-chang-jian-wen-ti","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0500-模板扩展与常见问题","Template Extensions and FAQ","2200-0500",{"path":1408,"stem":1409,"title":1410,"date":994,"chapterOrder":1411,"chapterDepth":1016,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":1001},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake Project Template","2200",{"path":997,"stem":1413,"title":1414,"date":994,"chapterOrder":1002,"chapterDepth":1016,"docKey":996,"docRoot":997,"docTitle":998,"isWikiDoc":568,"isWikiIndex":568},"_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++ tutorial",{"variants":1416},[1417,1418,1421,1424,1427],{"path":992,"localeSlug":1004,"i18nKey":1000},{"path":1419,"localeSlug":1420,"i18nKey":1000},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","zh-hant",{"path":1422,"localeSlug":1423,"i18nKey":1000},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","zh-hk",{"path":1425,"localeSlug":1426,"i18nKey":1000},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","zh-tw",{"path":1428,"localeSlug":1429,"i18nKey":1000},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","zh-cn",[992,1007,1419,1007,1422,1007,1425,1007,1428,1007],1784646870418]