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