[{"data":1,"prerenderedAt":2545},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie":3,"wiki-doc-items-2023-10-05-cplusplus-jiao-xue":1984,"wiki:author-members":2533},{"id":4,"title":5,"authors":6,"body":8,"chapterDepth":108,"chapterOrder":1972,"date":1973,"description":101,"docKey":1974,"docRoot":1975,"docTitle":1976,"extension":1977,"isWikiDoc":135,"isWikiIndex":1978,"meta":1979,"navigation":135,"path":1980,"seo":1981,"stem":1982,"wikiDepth":108,"__hash__":1983},"wiki\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介.md","modules 简介",[7],"董佳辉",{"type":9,"value":10,"toc":1953},"minimark",[11,15,24,55,58,61,67,71,78,81,92,95,347,353,356,442,446,456,534,537,540,545,554,685,693,826,834,839,925,929,937,941,949,1149,1155,1240,1244,1250,1254,1257,1265,1349,1357,1447,1454,1572,1576,1582,1584,1587,1590,1683,1686,1691,1708,1718,1725,1766,1772,1777,1783,1786,1791,1854,1863,1866,1912,1915,1949],[12,13,14],"h2",{"id":14},"本节解决什么问题",[16,17,18,19,23],"p",{},"传统的 ",[20,21,22],"code",{},"#include"," 有三大问题：",[25,26,27,39,49],"ol",{},[28,29,30,34,35,38],"li",{},[31,32,33],"strong",{},"编译慢","：每个 ",[20,36,37],{},".cpp"," 文件都要重新解析所有 include 的头文件（可能几万行）。",[28,40,41,44,45,48],{},[31,42,43],{},"宏污染","：",[20,46,47],{},"#define"," 会影响所有 include 之后的代码。",[28,50,51,54],{},[31,52,53],{},"顺序依赖","：include 的顺序可能影响程序行为。",[16,56,57],{},"Modules 是 C++20 引入的新特性，从根本上解决了这些问题——更快编译、隔离性好、无宏泄漏。",[12,59,60],{"id":60},"这个特性是什么",[16,62,63,64,66],{},"Modules 是 C++20 引入的模块系统。和 ",[20,65,22],{},"（文本复制粘贴）不同，模块是预编译的接口声明，只导出你想暴露的部分，内部实现完全隐藏。",[12,68,70],{"id":69},"c-标准版本","C++ 标准版本",[16,72,73,74,77],{},"C++20（正式引入），C++23 增强了 ",[20,75,76],{},"import std;"," 标准库模块。",[12,79,80],{"id":80},"需要的头文件",[16,82,83,84,87,88,91],{},"Modules 不需要头文件。模块文件通常用 ",[20,85,86],{},".cppm"," 扩展名（社区惯例）或 ",[20,89,90],{},".ixx","（MSVC）。",[12,93,94],{"id":94},"基本语法",[96,97,102],"pre",{"className":98,"code":99,"language":100,"meta":101,"style":101},"language-cpp shiki shiki-themes github-light github-dark","\u002F\u002F math_module.cppm —— 模块接口文件\nexport module math;           \u002F\u002F 声明模块名\n\nexport int add(int a, int b)  \u002F\u002F export：对外可见\n{\n    return a + b;\n}\n\nint multiply(int a, int b)    \u002F\u002F 没有 export：模块内部可见\n{\n    return a * b;\n}\n\n\u002F\u002F main.cpp —— 使用模块\nimport math;                  \u002F\u002F 导入模块（替代 #include）\n\nint main()\n{\n    int x = add(3, 5);        \u002F\u002F ✅ 可以访问\n    \u002F\u002F int y = multiply(3, 5); \u002F\u002F ❌ 不可访问（没有 export）\n    return 0;\n}\n","cpp","",[20,103,104,113,130,137,166,172,187,193,198,228,233,245,250,255,261,270,275,286,291,322,331,342],{"__ignoreMap":101},[105,106,109],"span",{"class":107,"line":108},"line",1,[105,110,112],{"class":111},"sJ8bj","\u002F\u002F math_module.cppm —— 模块接口文件\n",[105,114,116,120,123,127],{"class":107,"line":115},2,[105,117,119],{"class":118},"szBVR","export",[105,121,122],{"class":118}," module",[105,124,126],{"class":125},"sVt8B"," math;",[105,128,129],{"class":111},"           \u002F\u002F 声明模块名\n",[105,131,133],{"class":107,"line":132},3,[105,134,136],{"emptyLinePlaceholder":135},true,"\n",[105,138,140,142,145,149,152,155,158,160,163],{"class":107,"line":139},4,[105,141,119],{"class":118},[105,143,144],{"class":118}," int",[105,146,148],{"class":147},"sScJk"," add",[105,150,151],{"class":125},"(",[105,153,154],{"class":118},"int",[105,156,157],{"class":125}," a, ",[105,159,154],{"class":118},[105,161,162],{"class":125}," b)",[105,164,165],{"class":111},"  \u002F\u002F export：对外可见\n",[105,167,169],{"class":107,"line":168},5,[105,170,171],{"class":125},"{\n",[105,173,175,178,181,184],{"class":107,"line":174},6,[105,176,177],{"class":118},"    return",[105,179,180],{"class":125}," a ",[105,182,183],{"class":118},"+",[105,185,186],{"class":125}," b;\n",[105,188,190],{"class":107,"line":189},7,[105,191,192],{"class":125},"}\n",[105,194,196],{"class":107,"line":195},8,[105,197,136],{"emptyLinePlaceholder":135},[105,199,201,203,206,208,210,214,217,219,222,225],{"class":107,"line":200},9,[105,202,154],{"class":118},[105,204,205],{"class":147}," multiply",[105,207,151],{"class":125},[105,209,154],{"class":118},[105,211,213],{"class":212},"s4XuR"," a",[105,215,216],{"class":125},", ",[105,218,154],{"class":118},[105,220,221],{"class":212}," b",[105,223,224],{"class":125},")",[105,226,227],{"class":111},"    \u002F\u002F 没有 export：模块内部可见\n",[105,229,231],{"class":107,"line":230},10,[105,232,171],{"class":125},[105,234,236,238,240,243],{"class":107,"line":235},11,[105,237,177],{"class":118},[105,239,180],{"class":125},[105,241,242],{"class":118},"*",[105,244,186],{"class":125},[105,246,248],{"class":107,"line":247},12,[105,249,192],{"class":125},[105,251,253],{"class":107,"line":252},13,[105,254,136],{"emptyLinePlaceholder":135},[105,256,258],{"class":107,"line":257},14,[105,259,260],{"class":111},"\u002F\u002F main.cpp —— 使用模块\n",[105,262,264,267],{"class":107,"line":263},15,[105,265,266],{"class":125},"import math;",[105,268,269],{"class":111},"                  \u002F\u002F 导入模块（替代 #include）\n",[105,271,273],{"class":107,"line":272},16,[105,274,136],{"emptyLinePlaceholder":135},[105,276,278,280,283],{"class":107,"line":277},17,[105,279,154],{"class":118},[105,281,282],{"class":147}," main",[105,284,285],{"class":125},"()\n",[105,287,289],{"class":107,"line":288},18,[105,290,171],{"class":125},[105,292,294,297,300,303,305,307,311,313,316,319],{"class":107,"line":293},19,[105,295,296],{"class":118},"    int",[105,298,299],{"class":125}," x ",[105,301,302],{"class":118},"=",[105,304,148],{"class":147},[105,306,151],{"class":125},[105,308,310],{"class":309},"sj4cs","3",[105,312,216],{"class":125},[105,314,315],{"class":309},"5",[105,317,318],{"class":125},");",[105,320,321],{"class":111},"        \u002F\u002F ✅ 可以访问\n",[105,323,325,328],{"class":107,"line":324},20,[105,326,327],{"class":111},"    \u002F\u002F int y = multiply(3, 5);",[105,329,330],{"class":111}," \u002F\u002F ❌ 不可访问（没有 export）\n",[105,332,334,336,339],{"class":107,"line":333},21,[105,335,177],{"class":118},[105,337,338],{"class":309}," 0",[105,340,341],{"class":125},";\n",[105,343,345],{"class":107,"line":344},22,[105,346,192],{"class":125},[16,348,349,352],{},[31,350,351],{},"运行结果","：程序正常结束，终端没有额外输出。",[12,354,355],{"id":355},"核心概念",[357,358,359,373],"table",{},[360,361,362],"thead",{},[363,364,365,370],"tr",{},[366,367,369],"th",{"align":368},"left","概念",[366,371,372],{"align":368},"说明",[374,375,376,387,396,406,416,429],"tbody",{},[363,377,378,384],{},[379,380,381],"td",{"align":368},[20,382,383],{},"export module 模块名;",[379,385,386],{"align":368},"声明一个模块（放在模块接口文件中）",[363,388,389,393],{},[379,390,391],{"align":368},[20,392,119],{},[379,394,395],{"align":368},"标记对外可见的函数\u002F类\u002F变量",[363,397,398,403],{},[379,399,400],{"align":368},[20,401,402],{},"import 模块名;",[379,404,405],{"align":368},"导入一个模块",[363,407,408,413],{},[379,409,410],{"align":368},[20,411,412],{},"import \u003C头文件>;",[379,414,415],{"align":368},"导入传统头文件（把它当作模块来用，编译器支持有限）",[363,417,418,421],{},[379,419,420],{"align":368},"模块接口单元",[379,422,423,425,426],{"align":368},[20,424,86],{}," 文件，包含 ",[20,427,428],{},"export module",[363,430,431,434],{},[379,432,433],{"align":368},"模块实现单元",[379,435,436,425,438,441],{"align":368},[20,437,37],{},[20,439,440],{},"module 模块名;","（不带 export）",[12,443,445],{"id":444},"include-和-module-的核心区别","include 和 module 的核心区别",[16,447,448,449,451,452,455],{},"不要把 modules 理解成\"把 ",[20,450,22],{}," 换成 ",[20,453,454],{},"import","\"这么简单。二者的编译模型不同，所以能解决的问题也不同。",[357,457,458,474],{},[360,459,460],{},[363,461,462,465,469],{},[366,463,464],{"align":368},"对比点",[366,466,467],{"align":368},[20,468,22],{},[366,470,471],{"align":368},[20,472,473],{},"import module",[374,475,476,487,501,512,523],{},[363,477,478,481,484],{},[379,479,480],{"align":368},"工作方式",[379,482,483],{"align":368},"文本复制，把头文件内容粘进当前文件",[379,485,486],{"align":368},"导入已经编译好的模块接口",[363,488,489,492,495],{},[379,490,491],{"align":368},"可见性",[379,493,494],{"align":368},"头文件里写了什么，包含者基本都能看到",[379,496,497,498,500],{"align":368},"只有 ",[20,499,119],{}," 的名字对外可见",[363,502,503,506,509],{},[379,504,505],{"align":368},"宏",[379,507,508],{"align":368},"宏容易向后污染",[379,510,511],{"align":368},"模块接口不会像文本包含那样传播宏",[363,513,514,517,520],{},[379,515,516],{"align":368},"编译依赖",[379,518,519],{"align":368},"include 顺序可能影响结果",[379,521,522],{"align":368},"模块依赖更明确",[363,524,525,528,531],{},[379,526,527],{"align":368},"构建要求",[379,529,530],{"align":368},"所有编译器和构建系统都成熟支持",[379,532,533],{"align":368},"需要较新的编译器和构建系统",[16,535,536],{},"所以现阶段学习 modules，重点是理解\"接口和实现分离得更彻底\"。真正项目中是否迁移，要看工具链是否稳定支持。",[12,538,539],{"id":539},"示例代码",[541,542,544],"h3",{"id":543},"示例-1最简单的模块","示例 1：最简单的模块",[16,546,547,553],{},[31,548,549,550],{},"文件 1：",[20,551,552],{},"math_module.cppm","（模块接口）",[96,555,557],{"className":98,"code":556,"language":100,"meta":101,"style":101},"export module math;\n\nexport int add(int a, int b)\n{\n    return a + b;\n}\n\nexport int subtract(int a, int b)\n{\n    return a - b;\n}\n\n\u002F\u002F 内部函数，不对外暴露\nint internal_helper()\n{\n    return 0;\n}\n",[20,558,559,568,572,591,595,605,609,613,632,636,647,651,655,660,669,673,681],{"__ignoreMap":101},[105,560,561,563,565],{"class":107,"line":108},[105,562,119],{"class":118},[105,564,122],{"class":118},[105,566,567],{"class":125}," math;\n",[105,569,570],{"class":107,"line":115},[105,571,136],{"emptyLinePlaceholder":135},[105,573,574,576,578,580,582,584,586,588],{"class":107,"line":132},[105,575,119],{"class":118},[105,577,144],{"class":118},[105,579,148],{"class":147},[105,581,151],{"class":125},[105,583,154],{"class":118},[105,585,157],{"class":125},[105,587,154],{"class":118},[105,589,590],{"class":125}," b)\n",[105,592,593],{"class":107,"line":139},[105,594,171],{"class":125},[105,596,597,599,601,603],{"class":107,"line":168},[105,598,177],{"class":118},[105,600,180],{"class":125},[105,602,183],{"class":118},[105,604,186],{"class":125},[105,606,607],{"class":107,"line":174},[105,608,192],{"class":125},[105,610,611],{"class":107,"line":189},[105,612,136],{"emptyLinePlaceholder":135},[105,614,615,617,619,622,624,626,628,630],{"class":107,"line":195},[105,616,119],{"class":118},[105,618,144],{"class":118},[105,620,621],{"class":147}," subtract",[105,623,151],{"class":125},[105,625,154],{"class":118},[105,627,157],{"class":125},[105,629,154],{"class":118},[105,631,590],{"class":125},[105,633,634],{"class":107,"line":200},[105,635,171],{"class":125},[105,637,638,640,642,645],{"class":107,"line":230},[105,639,177],{"class":118},[105,641,180],{"class":125},[105,643,644],{"class":118},"-",[105,646,186],{"class":125},[105,648,649],{"class":107,"line":235},[105,650,192],{"class":125},[105,652,653],{"class":107,"line":247},[105,654,136],{"emptyLinePlaceholder":135},[105,656,657],{"class":107,"line":252},[105,658,659],{"class":111},"\u002F\u002F 内部函数，不对外暴露\n",[105,661,662,664,667],{"class":107,"line":257},[105,663,154],{"class":118},[105,665,666],{"class":147}," internal_helper",[105,668,285],{"class":125},[105,670,671],{"class":107,"line":263},[105,672,171],{"class":125},[105,674,675,677,679],{"class":107,"line":272},[105,676,177],{"class":118},[105,678,338],{"class":309},[105,680,341],{"class":125},[105,682,683],{"class":107,"line":277},[105,684,192],{"class":125},[16,686,687],{},[31,688,689,690],{},"文件 2：",[20,691,692],{},"main.cpp",[96,694,696],{"className":98,"code":695,"language":100,"meta":101,"style":101},"import math;\n#include \u003Ciostream>\n\nint main()\n{\n    std::cout \u003C\u003C \"add(3, 5) = \" \u003C\u003C add(3, 5) \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"subtract(10, 3) = \" \u003C\u003C subtract(10, 3) \u003C\u003C \"\\n\";\n    \u002F\u002F internal_helper();  \u002F\u002F ❌ 编译错误！没有 export\n    return 0;\n}\n",[20,697,698,703,711,715,723,727,770,806,814,822],{"__ignoreMap":101},[105,699,700],{"class":107,"line":108},[105,701,702],{"class":125},"import math;\n",[105,704,705,707],{"class":107,"line":115},[105,706,22],{"class":118},[105,708,710],{"class":709},"sZZnC"," \u003Ciostream>\n",[105,712,713],{"class":107,"line":132},[105,714,136],{"emptyLinePlaceholder":135},[105,716,717,719,721],{"class":107,"line":139},[105,718,154],{"class":118},[105,720,282],{"class":147},[105,722,285],{"class":125},[105,724,725],{"class":107,"line":168},[105,726,171],{"class":125},[105,728,729,732,735,738,741,744,746,748,750,752,754,757,759,762,765,768],{"class":107,"line":174},[105,730,731],{"class":147},"    std",[105,733,734],{"class":125},"::cout ",[105,736,737],{"class":118},"\u003C\u003C",[105,739,740],{"class":709}," \"add(3, 5) = \"",[105,742,743],{"class":118}," \u003C\u003C",[105,745,148],{"class":147},[105,747,151],{"class":125},[105,749,310],{"class":309},[105,751,216],{"class":125},[105,753,315],{"class":309},[105,755,756],{"class":125},") ",[105,758,737],{"class":118},[105,760,761],{"class":709}," \"",[105,763,764],{"class":309},"\\n",[105,766,767],{"class":709},"\"",[105,769,341],{"class":125},[105,771,772,774,776,778,781,783,785,787,790,792,794,796,798,800,802,804],{"class":107,"line":189},[105,773,731],{"class":147},[105,775,734],{"class":125},[105,777,737],{"class":118},[105,779,780],{"class":709}," \"subtract(10, 3) = \"",[105,782,743],{"class":118},[105,784,621],{"class":147},[105,786,151],{"class":125},[105,788,789],{"class":309},"10",[105,791,216],{"class":125},[105,793,310],{"class":309},[105,795,756],{"class":125},[105,797,737],{"class":118},[105,799,761],{"class":709},[105,801,764],{"class":309},[105,803,767],{"class":709},[105,805,341],{"class":125},[105,807,808,811],{"class":107,"line":195},[105,809,810],{"class":111},"    \u002F\u002F internal_helper();",[105,812,813],{"class":111},"  \u002F\u002F ❌ 编译错误！没有 export\n",[105,815,816,818,820],{"class":107,"line":200},[105,817,177],{"class":118},[105,819,338],{"class":309},[105,821,341],{"class":125},[105,823,824],{"class":107,"line":230},[105,825,192],{"class":125},[16,827,828,830,831,833],{},[31,829,351],{},"：见下方“运行结果”；模块示例需要先按编译命令生成模块接口，再运行 ",[20,832,692],{},"。",[16,835,836,44],{},[31,837,838],{},"编译命令（以 GCC 为例）",[96,840,844],{"className":841,"code":842,"language":843,"meta":101,"style":101},"language-bash shiki shiki-themes github-light github-dark","# 先编译模块接口\ng++ -std=c++20 -fmodules-ts -c math_module.cppm -o math_module.o\n\n# 再编译主程序\ng++ -std=c++20 -fmodules-ts -c main.cpp -o main.o\n\n# 链接\ng++ math_module.o main.o -o program\n","bash",[20,845,846,851,874,878,883,901,905,910],{"__ignoreMap":101},[105,847,848],{"class":107,"line":108},[105,849,850],{"class":111},"# 先编译模块接口\n",[105,852,853,856,859,862,865,868,871],{"class":107,"line":115},[105,854,855],{"class":147},"g++",[105,857,858],{"class":309}," -std=c++20",[105,860,861],{"class":309}," -fmodules-ts",[105,863,864],{"class":309}," -c",[105,866,867],{"class":709}," math_module.cppm",[105,869,870],{"class":309}," -o",[105,872,873],{"class":709}," math_module.o\n",[105,875,876],{"class":107,"line":132},[105,877,136],{"emptyLinePlaceholder":135},[105,879,880],{"class":107,"line":139},[105,881,882],{"class":111},"# 再编译主程序\n",[105,884,885,887,889,891,893,896,898],{"class":107,"line":168},[105,886,855],{"class":147},[105,888,858],{"class":309},[105,890,861],{"class":309},[105,892,864],{"class":309},[105,894,895],{"class":709}," main.cpp",[105,897,870],{"class":309},[105,899,900],{"class":709}," main.o\n",[105,902,903],{"class":107,"line":174},[105,904,136],{"emptyLinePlaceholder":135},[105,906,907],{"class":107,"line":189},[105,908,909],{"class":111},"# 链接\n",[105,911,912,914,917,920,922],{"class":107,"line":195},[105,913,855],{"class":147},[105,915,916],{"class":709}," math_module.o",[105,918,919],{"class":709}," main.o",[105,921,870],{"class":309},[105,923,924],{"class":709}," program\n",[16,926,927,44],{},[31,928,351],{},[96,930,935],{"className":931,"code":933,"language":934},[932],"language-text","add(3, 5) = 8\nsubtract(10, 3) = 7\n","text",[20,936,933],{"__ignoreMap":101},[541,938,940],{"id":939},"示例-2模块-类","示例 2：模块 + 类",[16,942,943],{},[31,944,945,946],{},"文件：",[20,947,948],{},"person_module.cppm",[96,950,952],{"className":98,"code":951,"language":100,"meta":101,"style":101},"export module person;\n\nimport \u003Cstring>;\nimport \u003Ciostream>;\n\nexport class Person\n{\n    std::string name_;\n    int age_;\npublic:\n    Person(const std::string& name, int age)\n        : name_(name), age_(age) {}\n\n    void print() const\n    {\n        std::cout \u003C\u003C name_ \u003C\u003C \", age \" \u003C\u003C age_ \u003C\u003C \"\\n\";\n    }\n};\n",[20,953,954,963,967,983,996,1000,1010,1014,1021,1028,1033,1067,1084,1088,1102,1107,1139,1144],{"__ignoreMap":101},[105,955,956,958,960],{"class":107,"line":108},[105,957,119],{"class":118},[105,959,122],{"class":118},[105,961,962],{"class":125}," person;\n",[105,964,965],{"class":107,"line":115},[105,966,136],{"emptyLinePlaceholder":135},[105,968,969,972,975,978,981],{"class":107,"line":132},[105,970,971],{"class":125},"import ",[105,973,974],{"class":118},"\u003C",[105,976,977],{"class":125},"string",[105,979,980],{"class":118},">",[105,982,341],{"class":125},[105,984,985,987,989,992,994],{"class":107,"line":139},[105,986,971],{"class":125},[105,988,974],{"class":118},[105,990,991],{"class":125},"iostream",[105,993,980],{"class":118},[105,995,341],{"class":125},[105,997,998],{"class":107,"line":168},[105,999,136],{"emptyLinePlaceholder":135},[105,1001,1002,1004,1007],{"class":107,"line":174},[105,1003,119],{"class":118},[105,1005,1006],{"class":118}," class",[105,1008,1009],{"class":147}," Person\n",[105,1011,1012],{"class":107,"line":189},[105,1013,171],{"class":125},[105,1015,1016,1018],{"class":107,"line":195},[105,1017,731],{"class":147},[105,1019,1020],{"class":125},"::string name_;\n",[105,1022,1023,1025],{"class":107,"line":200},[105,1024,296],{"class":118},[105,1026,1027],{"class":125}," age_;\n",[105,1029,1030],{"class":107,"line":230},[105,1031,1032],{"class":118},"public:\n",[105,1034,1035,1038,1040,1043,1046,1049,1051,1054,1057,1059,1061,1064],{"class":107,"line":235},[105,1036,1037],{"class":147},"    Person",[105,1039,151],{"class":125},[105,1041,1042],{"class":118},"const",[105,1044,1045],{"class":147}," std",[105,1047,1048],{"class":125},"::",[105,1050,977],{"class":147},[105,1052,1053],{"class":118},"&",[105,1055,1056],{"class":212}," name",[105,1058,216],{"class":125},[105,1060,154],{"class":118},[105,1062,1063],{"class":212}," age",[105,1065,1066],{"class":125},")\n",[105,1068,1069,1072,1075,1078,1081],{"class":107,"line":247},[105,1070,1071],{"class":125},"        : ",[105,1073,1074],{"class":147},"name_",[105,1076,1077],{"class":125},"(name), ",[105,1079,1080],{"class":147},"age_",[105,1082,1083],{"class":125},"(age) {}\n",[105,1085,1086],{"class":107,"line":252},[105,1087,136],{"emptyLinePlaceholder":135},[105,1089,1090,1093,1096,1099],{"class":107,"line":257},[105,1091,1092],{"class":118},"    void",[105,1094,1095],{"class":147}," print",[105,1097,1098],{"class":125},"() ",[105,1100,1101],{"class":118},"const\n",[105,1103,1104],{"class":107,"line":263},[105,1105,1106],{"class":125},"    {\n",[105,1108,1109,1112,1114,1116,1119,1121,1124,1126,1129,1131,1133,1135,1137],{"class":107,"line":272},[105,1110,1111],{"class":147},"        std",[105,1113,734],{"class":125},[105,1115,737],{"class":118},[105,1117,1118],{"class":125}," name_ ",[105,1120,737],{"class":118},[105,1122,1123],{"class":709}," \", age \"",[105,1125,743],{"class":118},[105,1127,1128],{"class":125}," age_ ",[105,1130,737],{"class":118},[105,1132,761],{"class":709},[105,1134,764],{"class":309},[105,1136,767],{"class":709},[105,1138,341],{"class":125},[105,1140,1141],{"class":107,"line":277},[105,1142,1143],{"class":125},"    }\n",[105,1145,1146],{"class":107,"line":288},[105,1147,1148],{"class":125},"};\n",[16,1150,1151],{},[31,1152,945,1153],{},[20,1154,692],{},[96,1156,1158],{"className":98,"code":1157,"language":100,"meta":101,"style":101},"import person;\n\nint main()\n{\n    Person p(\"Alice\", 25);\n    p.print();\n\n    \u002F\u002F p.name_ = \"Bob\";  \u002F\u002F ❌ 编译错误！name_ 是 private\n\n    return 0;\n}\n",[20,1159,1160,1165,1169,1177,1181,1201,1212,1216,1224,1228,1236],{"__ignoreMap":101},[105,1161,1162],{"class":107,"line":108},[105,1163,1164],{"class":125},"import person;\n",[105,1166,1167],{"class":107,"line":115},[105,1168,136],{"emptyLinePlaceholder":135},[105,1170,1171,1173,1175],{"class":107,"line":132},[105,1172,154],{"class":118},[105,1174,282],{"class":147},[105,1176,285],{"class":125},[105,1178,1179],{"class":107,"line":139},[105,1180,171],{"class":125},[105,1182,1183,1186,1188,1190,1193,1195,1198],{"class":107,"line":168},[105,1184,1185],{"class":125},"    Person ",[105,1187,16],{"class":147},[105,1189,151],{"class":125},[105,1191,1192],{"class":709},"\"Alice\"",[105,1194,216],{"class":125},[105,1196,1197],{"class":309},"25",[105,1199,1200],{"class":125},");\n",[105,1202,1203,1206,1209],{"class":107,"line":174},[105,1204,1205],{"class":125},"    p.",[105,1207,1208],{"class":147},"print",[105,1210,1211],{"class":125},"();\n",[105,1213,1214],{"class":107,"line":189},[105,1215,136],{"emptyLinePlaceholder":135},[105,1217,1218,1221],{"class":107,"line":195},[105,1219,1220],{"class":111},"    \u002F\u002F p.name_ = \"Bob\";",[105,1222,1223],{"class":111},"  \u002F\u002F ❌ 编译错误！name_ 是 private\n",[105,1225,1226],{"class":107,"line":200},[105,1227,136],{"emptyLinePlaceholder":135},[105,1229,1230,1232,1234],{"class":107,"line":230},[105,1231,177],{"class":118},[105,1233,338],{"class":309},[105,1235,341],{"class":125},[105,1237,1238],{"class":107,"line":235},[105,1239,192],{"class":125},[16,1241,1242,44],{},[31,1243,351],{},[96,1245,1248],{"className":1246,"code":1247,"language":934},[932],"Alice, age 25\n",[20,1249,1247],{"__ignoreMap":101},[541,1251,1253],{"id":1252},"示例-3在示例-2-基础上把接口和实现拆开","示例 3：在示例 2 基础上，把接口和实现拆开",[16,1255,1256],{},"示例 1 和示例 2 为了直观，把实现直接写在模块接口里。真实项目里更常见的写法是：接口单元只导出声明，实现单元放函数体。",[16,1258,1259,1264],{},[31,1260,549,1261],{},[20,1262,1263],{},"counter.cppm","（模块接口单元）",[96,1266,1268],{"className":98,"code":1267,"language":100,"meta":101,"style":101},"export module counter;\n\nexport class Counter\n{\n    int value_ = 0;\n\npublic:\n    void add(int n);\n    int value() const;\n};\n",[20,1269,1270,1279,1283,1292,1296,1309,1313,1317,1332,1345],{"__ignoreMap":101},[105,1271,1272,1274,1276],{"class":107,"line":108},[105,1273,119],{"class":118},[105,1275,122],{"class":118},[105,1277,1278],{"class":125}," counter;\n",[105,1280,1281],{"class":107,"line":115},[105,1282,136],{"emptyLinePlaceholder":135},[105,1284,1285,1287,1289],{"class":107,"line":132},[105,1286,119],{"class":118},[105,1288,1006],{"class":118},[105,1290,1291],{"class":147}," Counter\n",[105,1293,1294],{"class":107,"line":139},[105,1295,171],{"class":125},[105,1297,1298,1300,1303,1305,1307],{"class":107,"line":168},[105,1299,296],{"class":118},[105,1301,1302],{"class":125}," value_ ",[105,1304,302],{"class":118},[105,1306,338],{"class":309},[105,1308,341],{"class":125},[105,1310,1311],{"class":107,"line":174},[105,1312,136],{"emptyLinePlaceholder":135},[105,1314,1315],{"class":107,"line":189},[105,1316,1032],{"class":118},[105,1318,1319,1321,1323,1325,1327,1330],{"class":107,"line":195},[105,1320,1092],{"class":118},[105,1322,148],{"class":147},[105,1324,151],{"class":125},[105,1326,154],{"class":118},[105,1328,1329],{"class":212}," n",[105,1331,1200],{"class":125},[105,1333,1334,1336,1339,1341,1343],{"class":107,"line":200},[105,1335,296],{"class":118},[105,1337,1338],{"class":147}," value",[105,1340,1098],{"class":125},[105,1342,1042],{"class":118},[105,1344,341],{"class":125},[105,1346,1347],{"class":107,"line":230},[105,1348,1148],{"class":125},[16,1350,1351,1356],{},[31,1352,689,1353],{},[20,1354,1355],{},"counter.cpp","（模块实现单元）",[96,1358,1360],{"className":98,"code":1359,"language":100,"meta":101,"style":101},"module counter;\n\nvoid Counter::add(int n)\n{\n    value_ += n;\n}\n\nint Counter::value() const\n{\n    return value_;\n}\n",[20,1361,1362,1369,1373,1394,1398,1409,1413,1417,1432,1436,1443],{"__ignoreMap":101},[105,1363,1364,1367],{"class":107,"line":108},[105,1365,1366],{"class":118},"module",[105,1368,1278],{"class":125},[105,1370,1371],{"class":107,"line":115},[105,1372,136],{"emptyLinePlaceholder":135},[105,1374,1375,1378,1381,1383,1386,1388,1390,1392],{"class":107,"line":132},[105,1376,1377],{"class":118},"void",[105,1379,1380],{"class":147}," Counter",[105,1382,1048],{"class":125},[105,1384,1385],{"class":147},"add",[105,1387,151],{"class":125},[105,1389,154],{"class":118},[105,1391,1329],{"class":212},[105,1393,1066],{"class":125},[105,1395,1396],{"class":107,"line":139},[105,1397,171],{"class":125},[105,1399,1400,1403,1406],{"class":107,"line":168},[105,1401,1402],{"class":125},"    value_ ",[105,1404,1405],{"class":118},"+=",[105,1407,1408],{"class":125}," n;\n",[105,1410,1411],{"class":107,"line":174},[105,1412,192],{"class":125},[105,1414,1415],{"class":107,"line":189},[105,1416,136],{"emptyLinePlaceholder":135},[105,1418,1419,1421,1423,1425,1428,1430],{"class":107,"line":195},[105,1420,154],{"class":118},[105,1422,1380],{"class":147},[105,1424,1048],{"class":125},[105,1426,1427],{"class":147},"value",[105,1429,1098],{"class":125},[105,1431,1101],{"class":118},[105,1433,1434],{"class":107,"line":200},[105,1435,171],{"class":125},[105,1437,1438,1440],{"class":107,"line":230},[105,1439,177],{"class":118},[105,1441,1442],{"class":125}," value_;\n",[105,1444,1445],{"class":107,"line":235},[105,1446,192],{"class":125},[16,1448,1449],{},[31,1450,1451,1452],{},"文件 3：",[20,1453,692],{},[96,1455,1457],{"className":98,"code":1456,"language":100,"meta":101,"style":101},"import counter;\n#include \u003Ciostream>\n\nint main()\n{\n    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    Counter c;\n    c.add(3);\n    c.add(5);\n\n    std::cout \u003C\u003C \"counter = \" \u003C\u003C c.value() \u003C\u003C \"\\n\";\n    \u002F\u002F 返回 0 表示程序正常结束。\n    return 0;\n}\n",[20,1458,1459,1464,1470,1474,1482,1486,1491,1496,1509,1521,1525,1555,1560,1568],{"__ignoreMap":101},[105,1460,1461],{"class":107,"line":108},[105,1462,1463],{"class":125},"import counter;\n",[105,1465,1466,1468],{"class":107,"line":115},[105,1467,22],{"class":118},[105,1469,710],{"class":709},[105,1471,1472],{"class":107,"line":132},[105,1473,136],{"emptyLinePlaceholder":135},[105,1475,1476,1478,1480],{"class":107,"line":139},[105,1477,154],{"class":118},[105,1479,282],{"class":147},[105,1481,285],{"class":125},[105,1483,1484],{"class":107,"line":168},[105,1485,171],{"class":125},[105,1487,1488],{"class":107,"line":174},[105,1489,1490],{"class":111},"    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n",[105,1492,1493],{"class":107,"line":189},[105,1494,1495],{"class":125},"    Counter c;\n",[105,1497,1498,1501,1503,1505,1507],{"class":107,"line":195},[105,1499,1500],{"class":125},"    c.",[105,1502,1385],{"class":147},[105,1504,151],{"class":125},[105,1506,310],{"class":309},[105,1508,1200],{"class":125},[105,1510,1511,1513,1515,1517,1519],{"class":107,"line":200},[105,1512,1500],{"class":125},[105,1514,1385],{"class":147},[105,1516,151],{"class":125},[105,1518,315],{"class":309},[105,1520,1200],{"class":125},[105,1522,1523],{"class":107,"line":230},[105,1524,136],{"emptyLinePlaceholder":135},[105,1526,1527,1529,1531,1533,1536,1538,1541,1543,1545,1547,1549,1551,1553],{"class":107,"line":235},[105,1528,731],{"class":147},[105,1530,734],{"class":125},[105,1532,737],{"class":118},[105,1534,1535],{"class":709}," \"counter = \"",[105,1537,743],{"class":118},[105,1539,1540],{"class":125}," c.",[105,1542,1427],{"class":147},[105,1544,1098],{"class":125},[105,1546,737],{"class":118},[105,1548,761],{"class":709},[105,1550,764],{"class":309},[105,1552,767],{"class":709},[105,1554,341],{"class":125},[105,1556,1557],{"class":107,"line":247},[105,1558,1559],{"class":111},"    \u002F\u002F 返回 0 表示程序正常结束。\n",[105,1561,1562,1564,1566],{"class":107,"line":252},[105,1563,177],{"class":118},[105,1565,338],{"class":309},[105,1567,341],{"class":125},[105,1569,1570],{"class":107,"line":257},[105,1571,192],{"class":125},[16,1573,1574,44],{},[31,1575,351],{},[96,1577,1580],{"className":1578,"code":1579,"language":934},[932],"counter = 8\n",[20,1581,1579],{"__ignoreMap":101},[12,1583,351],{"id":351},[16,1585,1586],{},"见上方每个示例的\"运行结果\"。",[12,1588,1589],{"id":1589},"示例中的关键语法解释",[357,1591,1592,1611],{},[360,1593,1594],{},[363,1595,1596,1599,1602,1605,1608],{},[366,1597,1598],{"align":368},"示例",[366,1600,1601],{"align":368},"讲了什么",[366,1603,1604],{"align":368},"新出现的语法",[366,1606,1607],{"align":368},"为什么这样写",[366,1609,1610],{"align":368},"注意事项",[374,1612,1613,1639,1664],{},[363,1614,1615,1618,1621,1630,1633],{},[379,1616,1617],{"align":368},"示例 1",[379,1619,1620],{"align":368},"基础模块定义和导入",[379,1622,1623,1625,1626,1625,1628],{"align":368},[20,1624,428],{},"、",[20,1627,454],{},[20,1629,119],{},[379,1631,1632],{"align":368},"模块只暴露 export 的内容",[379,1634,1635,1636,1638],{"align":368},"模块文件名没有硬性规定，",[20,1637,86],{}," 是社区惯例",[363,1640,1641,1644,1647,1655,1658],{},[379,1642,1643],{"align":368},"示例 2",[379,1645,1646],{"align":368},"模块中导出类",[379,1648,1649,1625,1652],{"align":368},[20,1650,1651],{},"export class",[20,1653,1654],{},"import \u003Cstring>",[379,1656,1657],{"align":368},"类的 public\u002Fprivate 仍然有效",[379,1659,1660,1663],{"align":368},[20,1661,1662],{},"import \u003Cheader>"," 属于 header unit，工具链支持差异较大",[363,1665,1666,1669,1672,1677,1680],{},[379,1667,1668],{"align":368},"示例 3",[379,1670,1671],{"align":368},"接口单元和实现单元分离",[379,1673,1674],{"align":368},[20,1675,1676],{},"module counter;",[379,1678,1679],{"align":368},"接口只暴露声明，实现放到单独文件",[379,1681,1682],{"align":368},"构建系统要知道模块依赖关系",[12,1684,1685],{"id":1685},"常见错误",[16,1687,1688],{},[31,1689,1690],{},"错误 1：编译器不支持或未启用",[96,1692,1694],{"className":841,"code":1693,"language":843,"meta":101,"style":101},"g++ -std=c++17 main.cpp  # ❌ C++17 没有 modules\n",[20,1695,1696],{"__ignoreMap":101},[105,1697,1698,1700,1703,1705],{"class":107,"line":108},[105,1699,855],{"class":147},[105,1701,1702],{"class":309}," -std=c++17",[105,1704,895],{"class":709},[105,1706,1707],{"class":111},"  # ❌ C++17 没有 modules\n",[16,1709,1710,1711,1714,1715,833],{},"正确做法：用 ",[20,1712,1713],{},"-std=c++20 -fmodules-ts","（GCC\u002FClang），MSVC 用 ",[20,1716,1717],{},"\u002Fstd:c++20",[16,1719,1720],{},[31,1721,1722,1723],{},"错误 2：忘记了 ",[20,1724,119],{},[96,1726,1728],{"className":98,"code":1727,"language":100,"meta":101,"style":101},"\u002F\u002F module.cppm\nexport module my_module;\nint func() { return 42; }  \u002F\u002F ❌ 没有 export，外部看不到！\n",[20,1729,1730,1735,1744],{"__ignoreMap":101},[105,1731,1732],{"class":107,"line":108},[105,1733,1734],{"class":111},"\u002F\u002F module.cppm\n",[105,1736,1737,1739,1741],{"class":107,"line":115},[105,1738,119],{"class":118},[105,1740,122],{"class":118},[105,1742,1743],{"class":125}," my_module;\n",[105,1745,1746,1748,1751,1754,1757,1760,1763],{"class":107,"line":132},[105,1747,154],{"class":118},[105,1749,1750],{"class":147}," func",[105,1752,1753],{"class":125},"() { ",[105,1755,1756],{"class":118},"return",[105,1758,1759],{"class":309}," 42",[105,1761,1762],{"class":125},"; }",[105,1764,1765],{"class":111},"  \u002F\u002F ❌ 没有 export，外部看不到！\n",[16,1767,1768,1769],{},"正确做法：",[20,1770,1771],{},"export int func() { return 42; }",[16,1773,1774],{},[31,1775,1776],{},"错误 3：编译顺序不对",[16,1778,1779,1780,1782],{},"必须先编译模块接口单元（",[20,1781,86],{},"），再编译使用模块的文件。",[16,1784,1785],{},"正确做法：用 CMake 3.28+ 或构建系统管理模块依赖。",[16,1787,1788],{},[31,1789,1790],{},"错误 4：把 private 当成模块隐藏的全部",[96,1792,1794],{"className":98,"code":1793,"language":100,"meta":101,"style":101},"export module demo;\n\nexport class A\n{\nprivate:\n    int value_;\n};\n\nint helper(); \u002F\u002F 没有 export，外部看不到\n",[20,1795,1796,1805,1809,1818,1822,1827,1833,1837,1841],{"__ignoreMap":101},[105,1797,1798,1800,1802],{"class":107,"line":108},[105,1799,119],{"class":118},[105,1801,122],{"class":118},[105,1803,1804],{"class":125}," demo;\n",[105,1806,1807],{"class":107,"line":115},[105,1808,136],{"emptyLinePlaceholder":135},[105,1810,1811,1813,1815],{"class":107,"line":132},[105,1812,119],{"class":118},[105,1814,1006],{"class":118},[105,1816,1817],{"class":147}," A\n",[105,1819,1820],{"class":107,"line":139},[105,1821,171],{"class":125},[105,1823,1824],{"class":107,"line":168},[105,1825,1826],{"class":118},"private:\n",[105,1828,1829,1831],{"class":107,"line":174},[105,1830,296],{"class":118},[105,1832,1442],{"class":125},[105,1834,1835],{"class":107,"line":189},[105,1836,1148],{"class":125},[105,1838,1839],{"class":107,"line":195},[105,1840,136],{"emptyLinePlaceholder":135},[105,1842,1843,1845,1848,1851],{"class":107,"line":200},[105,1844,154],{"class":118},[105,1846,1847],{"class":147}," helper",[105,1849,1850],{"class":125},"();",[105,1852,1853],{"class":111}," \u002F\u002F 没有 export，外部看不到\n",[16,1855,1856,1859,1860,1862],{},[20,1857,1858],{},"private"," 控制的是类成员访问权限；",[20,1861,119],{}," 控制的是模块级名字是否对外可见。二者解决的问题不同。",[12,1864,1865],{"id":1865},"使用建议",[25,1867,1868,1877,1883,1891,1900,1906],{},[28,1869,1870,1873,1874,1876],{},[31,1871,1872],{},"现阶段可以了解但不强制迁移","：C++20 modules 的编译器支持仍在完善中，传统 ",[20,1875,22],{}," 在相当长时间内仍是主流。",[28,1878,1879,1882],{},[31,1880,1881],{},"新项目可以尝试","：如果使用最新编译器（GCC 15+、Clang 17+、MSVC 2022+），modules 已比较稳定。",[28,1884,1885,44,1888,833],{},[31,1886,1887],{},"CMake 3.28+ 支持 modules",[20,1889,1890],{},"target_sources(myapp PUBLIC FILE_SET CXX_MODULES FILES ...)",[28,1892,1893,1899],{},[31,1894,1895,1896,1898],{},"标准库模块 ",[20,1897,76],{}," 是 C++23 的特性","：C++20 只能 import 自定义模块。",[28,1901,1902,1905],{},[31,1903,1904],{},"理解 modules 的设计思想很重要","：它代表了 C++ 的未来方向。",[28,1907,1908,1911],{},[31,1909,1910],{},"教程里先学概念，不强背命令","：不同编译器的模块命令差异很大，实际项目交给 CMake\u002F构建系统管理更稳。",[12,1913,1914],{"id":1914},"小结",[1916,1917,1918,1924,1932,1940,1943,1946],"ul",{},[28,1919,1920,1921,1923],{},"Modules 是 C++20 的新编译模型，替代 ",[20,1922,22],{},"，更快、更安全。",[28,1925,1926,1928,1929,1931],{},[20,1927,428],{}," 声明模块名，",[20,1930,119],{}," 标记对外可见的声明。",[28,1933,1934,1936,1937,1939],{},[20,1935,454],{}," 导入模块（替代 ",[20,1938,22],{},"）。",[28,1941,1942],{},"模块接口单元负责暴露 API，模块实现单元负责隐藏实现。",[28,1944,1945],{},"编译器支持在不断完善中，可以了解但现阶段项目中使用需要评估。",[28,1947,1948],{},"学习 modules 的设计有助于理解大型 C++ 项目的模块化思想。",[1950,1951,1952],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":101,"searchDepth":115,"depth":115,"links":1954},[1955,1956,1957,1958,1959,1960,1961,1962,1967,1968,1969,1970,1971],{"id":14,"depth":115,"text":14},{"id":60,"depth":115,"text":60},{"id":69,"depth":115,"text":70},{"id":80,"depth":115,"text":80},{"id":94,"depth":115,"text":94},{"id":355,"depth":115,"text":355},{"id":444,"depth":115,"text":445},{"id":539,"depth":115,"text":539,"children":1963},[1964,1965,1966],{"id":543,"depth":132,"text":544},{"id":939,"depth":132,"text":940},{"id":1252,"depth":132,"text":1253},{"id":351,"depth":115,"text":351},{"id":1589,"depth":115,"text":1589},{"id":1685,"depth":115,"text":1685},{"id":1865,"depth":115,"text":1865},{"id":1914,"depth":115,"text":1914},"2000-2100","2023-10-05","2023-10-05-cplusplus-jiao-xue","\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md",false,{},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie",{"title":5,"description":101},"wiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","weyyVo_aRp0LfuUzsFDnFhVnMtuLvzQtnkL17x1lJOM",[1985,1992,1998,2004,2010,2016,2022,2028,2034,2040,2046,2052,2058,2064,2070,2076,2082,2088,2094,2100,2106,2112,2118,2124,2130,2136,2142,2148,2154,2160,2166,2172,2178,2184,2190,2196,2202,2208,2214,2220,2226,2232,2238,2244,2250,2256,2262,2268,2274,2280,2286,2292,2298,2304,2310,2316,2322,2328,2334,2340,2346,2352,2358,2364,2370,2376,2382,2388,2394,2400,2406,2408,2414,2420,2426,2432,2438,2444,2450,2456,2462,2468,2474,2480,2486,2492,2498,2504,2510,2516,2522,2528],{"path":1986,"stem":1987,"title":1988,"authors":1989,"date":1973,"chapterOrder":1990,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F0100-C++开发环境搭建与测试","C++开发环境搭建与测试",[7],"0100",0,{"path":1993,"stem":1994,"title":1995,"authors":1996,"date":1973,"chapterOrder":1997,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++基础初识",[7],"0200",{"path":1999,"stem":2000,"title":2001,"authors":2002,"date":1973,"chapterOrder":2003,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0300-shu-ju-lei-xing-yu-shu-ju-cun-fang","wiki\u002F2023-10-05-Cplusplus教学\u002F0300-数据类型与数据存放","数据类型与数据存放",[7],"0300",{"path":2005,"stem":2006,"title":2007,"authors":2008,"date":1973,"chapterOrder":2009,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","wiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","输入输出",[7],"0400",{"path":2011,"stem":2012,"title":2013,"authors":2014,"date":1973,"chapterOrder":2015,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","wiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","运算符",[7],"0500",{"path":2017,"stem":2018,"title":2019,"authors":2020,"date":1973,"chapterOrder":2021,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","wiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","程序流程结构",[7],"0600",{"path":2023,"stem":2024,"title":2025,"authors":2026,"date":1973,"chapterOrder":2027,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","wiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","数组",[7],"0700",{"path":2029,"stem":2030,"title":2031,"authors":2032,"date":1973,"chapterOrder":2033,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","函数与头文件",[7],"0800",{"path":2035,"stem":2036,"title":2037,"authors":2038,"date":1973,"chapterOrder":2039,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","指针",[7],"0900",{"path":2041,"stem":2042,"title":2043,"authors":2044,"date":1973,"chapterOrder":2045,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","wiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","结构体与共用体",[7],"1000",{"path":2047,"stem":2048,"title":2049,"authors":2050,"date":1973,"chapterOrder":2051,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1100-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1100-内存分区与生命周期","内存分区与生命周期",[7],"1100",{"path":2053,"stem":2054,"title":2055,"authors":2056,"date":1973,"chapterOrder":2057,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","wiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","引用",[7],"1200",{"path":2059,"stem":2060,"title":2061,"authors":2062,"date":1973,"chapterOrder":2063,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao","wiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高","函数提高",[7],"1300",{"path":2065,"stem":2066,"title":2067,"authors":2068,"date":1973,"chapterOrder":2069,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1350-ming-ming-kong-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F1350-命名空间","命名空间",[7],"1350",{"path":2071,"stem":2072,"title":2073,"authors":2074,"date":1973,"chapterOrder":2075,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","封装",[7],"1400-0100",{"path":2077,"stem":2078,"title":2079,"authors":2080,"date":1973,"chapterOrder":2081,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0200-dui-xiang-chu-shi-hua-he-qing-li","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0200-对象初始化和清理","对象初始化和清理",[7],"1400-0200",{"path":2083,"stem":2084,"title":2085,"authors":2086,"date":1973,"chapterOrder":2087,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0300-dui-xiang-mo-xing-yu-this-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0300-对象模型与this指针","对象模型与this指针",[7],"1400-0300",{"path":2089,"stem":2090,"title":2091,"authors":2092,"date":1973,"chapterOrder":2093,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0400-you-yuan-yu-yun-suan-fu-zhong-zai","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0400-友元与运算符重载","友元与运算符重载",[7],"1400-0400",{"path":2095,"stem":2096,"title":2097,"authors":2098,"date":1973,"chapterOrder":2099,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","继承",[7],"1400-0500",{"path":2101,"stem":2102,"title":2103,"authors":2104,"date":1973,"chapterOrder":2105,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","多态",[7],"1400-0600",{"path":2107,"stem":2108,"title":2109,"authors":2110,"date":1973,"chapterOrder":2111,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","类和对象",[7],"1400",{"path":2113,"stem":2114,"title":2115,"authors":2116,"date":1973,"chapterOrder":2117,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1450-han-shu-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F1450-函数指针","函数指针",[7],"1450",{"path":2119,"stem":2120,"title":2121,"authors":2122,"date":1973,"chapterOrder":2123,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","wiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","文件操作",[7],"1500",{"path":2125,"stem":2126,"title":2127,"authors":2128,"date":1973,"chapterOrder":2129,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","wiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","异常处理",[7],"1600",{"path":2131,"stem":2132,"title":2133,"authors":2134,"date":1973,"chapterOrder":2135,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","模板",[7],"1700",{"path":2137,"stem":2138,"title":2139,"authors":2140,"date":1973,"chapterOrder":2141,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","STL初识",[7],"1800-0100",{"path":2143,"stem":2144,"title":2145,"authors":2146,"date":1973,"chapterOrder":2147,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0200-std-array","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0200-std-array","std::array",[7],"1800-0200",{"path":2149,"stem":2150,"title":2151,"authors":2152,"date":1973,"chapterOrder":2153,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string容器",[7],"1800-0300",{"path":2155,"stem":2156,"title":2157,"authors":2158,"date":1973,"chapterOrder":2159,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector容器","vector 容器",[7],"1800-0400",{"path":2161,"stem":2162,"title":2163,"authors":2164,"date":1973,"chapterOrder":2165,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-deque-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-deque容器","deque 容器",[7],"1800-0500",{"path":2167,"stem":2168,"title":2169,"authors":2170,"date":1973,"chapterOrder":2171,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-stack-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-stack容器","stack 容器",[7],"1800-0600",{"path":2173,"stem":2174,"title":2175,"authors":2176,"date":1973,"chapterOrder":2177,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-queue-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-queue容器","queue 容器",[7],"1800-0700",{"path":2179,"stem":2180,"title":2181,"authors":2182,"date":1973,"chapterOrder":2183,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-list-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-list容器","list 容器",[7],"1800-0800",{"path":2185,"stem":2186,"title":2187,"authors":2188,"date":1973,"chapterOrder":2189,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0900-set-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0900-set容器","set \u002F multiset 容器",[7],"1800-0900",{"path":2191,"stem":2192,"title":2193,"authors":2194,"date":1973,"chapterOrder":2195,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1000-map-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-1000-map容器","map \u002F multimap 容器",[7],"1800-1000",{"path":2197,"stem":2198,"title":2199,"authors":2200,"date":1973,"chapterOrder":2201,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1100-han-shu-dui-xiang-yu-wei-ci","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-1100-函数对象与谓词","函数对象与谓词",[7],"1800-1100",{"path":2203,"stem":2204,"title":2205,"authors":2206,"date":1973,"chapterOrder":2207,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1200-chang-yong-suan-fa","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-1200-常用算法","常用算法",[7],"1800-1200",{"path":2209,"stem":2210,"title":2211,"authors":2212,"date":1973,"chapterOrder":2213,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","STL提高编程",[7],"1800",{"path":2215,"stem":2216,"title":2217,"authors":2218,"date":1973,"chapterOrder":2219,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","wiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++类型转换",[7],"1900",{"path":2221,"stem":2222,"title":2223,"authors":2224,"date":1973,"chapterOrder":2225,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","auto",[7],"2000-0100",{"path":2227,"stem":2228,"title":2229,"authors":2230,"date":1973,"chapterOrder":2231,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","nullptr",[7],"2000-0200",{"path":2233,"stem":2234,"title":2235,"authors":2236,"date":1973,"chapterOrder":2237,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","using",[7],"2000-0300",{"path":2239,"stem":2240,"title":2241,"authors":2242,"date":1973,"chapterOrder":2243,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0400-enum-class","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0400-enum-class","enum class",[7],"2000-0400",{"path":2245,"stem":2246,"title":2247,"authors":2248,"date":1973,"chapterOrder":2249,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0500-fan-wei-for-xun-huan","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0500-范围for循环","范围 for 循环",[7],"2000-0500",{"path":2251,"stem":2252,"title":2253,"authors":2254,"date":1973,"chapterOrder":2255,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","结构化绑定",[7],"2000-0600",{"path":2257,"stem":2258,"title":2259,"authors":2260,"date":1973,"chapterOrder":2261,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","constexpr",[7],"2000-0700",{"path":2263,"stem":2264,"title":2265,"authors":2266,"date":1973,"chapterOrder":2267,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII",[7],"2000-0800",{"path":2269,"stem":2270,"title":2271,"authors":2272,"date":1973,"chapterOrder":2273,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","智能指针",[7],"2000-0900",{"path":2275,"stem":2276,"title":2277,"authors":2278,"date":1973,"chapterOrder":2279,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义","右值引用和移动语义",[7],"2000-1000",{"path":2281,"stem":2282,"title":2283,"authors":2284,"date":1973,"chapterOrder":2285,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","Lambda 表达式",[7],"2000-1100",{"path":2287,"stem":2288,"title":2289,"authors":2290,"date":1973,"chapterOrder":2291,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","std::function",[7],"2000-1200",{"path":2293,"stem":2294,"title":2295,"authors":2296,"date":1973,"chapterOrder":2297,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","std::bind",[7],"2000-1300",{"path":2299,"stem":2300,"title":2301,"authors":2302,"date":1973,"chapterOrder":2303,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional","std::optional",[7],"2000-1400",{"path":2305,"stem":2306,"title":2307,"authors":2308,"date":1973,"chapterOrder":2309,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1500-std-variant","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1500-std-variant","std::variant",[7],"2000-1500",{"path":2311,"stem":2312,"title":2313,"authors":2314,"date":1973,"chapterOrder":2315,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1600-std-span","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1600-std-span","std::span",[7],"2000-1600",{"path":2317,"stem":2318,"title":2319,"authors":2320,"date":1973,"chapterOrder":2321,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1700-std-format-print","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1700-std-format-print","std::format \u002F std::print",[7],"2000-1700",{"path":2323,"stem":2324,"title":2325,"authors":2326,"date":1973,"chapterOrder":2327,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1800-std-chrono","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1800-std-chrono","std::chrono",[7],"2000-1800",{"path":2329,"stem":2330,"title":2331,"authors":2332,"date":1973,"chapterOrder":2333,"chapterDepth":115,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0100-bing-fa-shi-shen-me","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0100-并发是什么","并发是什么",[7],"2000-1900-0100",{"path":2335,"stem":2336,"title":2337,"authors":2338,"date":1973,"chapterOrder":2339,"chapterDepth":115,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-bing-xing-shi-shen-me","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-并行是什么","并行是什么",[7],"2000-1900-0200",{"path":2341,"stem":2342,"title":2343,"authors":2344,"date":1973,"chapterOrder":2345,"chapterDepth":115,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0300-xie-cheng-shi-shen-me","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0300-协程是什么","协程是什么",[7],"2000-1900-0300",{"path":2347,"stem":2348,"title":2349,"authors":2350,"date":1973,"chapterOrder":2351,"chapterDepth":115,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1000-bing-fa-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1000-并发编程","并发编程",[7],"2000-1900-1000",{"path":2353,"stem":2354,"title":2355,"authors":2356,"date":1973,"chapterOrder":2357,"chapterDepth":115,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1100-std-thread","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1100-std-thread","std::thread",[7],"2000-1900-1100",{"path":2359,"stem":2360,"title":2361,"authors":2362,"date":1973,"chapterOrder":2363,"chapterDepth":115,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1200-mutex-lock-guard","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1200-mutex-lock-guard","mutex 与 RAII 锁",[7],"2000-1900-1200",{"path":2365,"stem":2366,"title":2367,"authors":2368,"date":1973,"chapterOrder":2369,"chapterDepth":115,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1300-std-atomic","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1300-std-atomic","std::atomic",[7],"2000-1900-1300",{"path":2371,"stem":2372,"title":2373,"authors":2374,"date":1973,"chapterOrder":2375,"chapterDepth":115,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1400-condition-variable","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1400-condition-variable","condition_variable",[7],"2000-1900-1400",{"path":2377,"stem":2378,"title":2379,"authors":2380,"date":1973,"chapterOrder":2381,"chapterDepth":115,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1500-future-async-promise","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1500-future-async-promise","future、async、promise 与 packaged_task",[7],"2000-1900-1500",{"path":2383,"stem":2384,"title":2385,"authors":2386,"date":1973,"chapterOrder":2387,"chapterDepth":115,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1600-jthread-stop-token","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1600-jthread-stop-token","jthread 与 stop_token",[7],"2000-1900-1600",{"path":2389,"stem":2390,"title":2391,"authors":2392,"date":1973,"chapterOrder":2393,"chapterDepth":115,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1700-semaphore-latch-barrier","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1700-semaphore-latch-barrier","semaphore、latch 与 barrier",[7],"2000-1900-1700",{"path":2395,"stem":2396,"title":2397,"authors":2398,"date":1973,"chapterOrder":2399,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bing-xing-yu-xie-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发并行与协程","并发、并行与协程",[7],"2000-1900",{"path":2401,"stem":2402,"title":2403,"authors":2404,"date":1973,"chapterOrder":2405,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2000-std-filesystem","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-2000-std-filesystem","std::filesystem",[7],"2000-2000",{"path":1980,"stem":1982,"title":5,"authors":2407,"date":1973,"chapterOrder":1972,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},[7],{"path":2409,"stem":2410,"title":2411,"authors":2412,"date":1973,"chapterOrder":2413,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","现代C++",[7],"2000",{"path":2415,"stem":2416,"title":2417,"authors":2418,"date":1973,"chapterOrder":2419,"chapterDepth":115,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0100-ding-shi-qi-yu-yi-bu-io","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0100-定时器与异步IO","定时器与异步 IO",[7],"2100-0100-0100",{"path":2421,"stem":2422,"title":2423,"authors":2424,"date":1973,"chapterOrder":2425,"chapterDepth":115,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0200-boost-asio-ji-chu","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0200-Boost.Asio基础","Boost.Asio 基础",[7],"2100-0100-0200",{"path":2427,"stem":2428,"title":2429,"authors":2430,"date":1973,"chapterOrder":2431,"chapterDepth":115,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0300-chuan-kou-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0300-串口通信","串口通信教学",[7],"2100-0100-0300",{"path":2433,"stem":2434,"title":2435,"authors":2436,"date":1973,"chapterOrder":2437,"chapterDepth":115,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0350-chuan-kou-tong-xin-chuan-kou-bao-xie-yi-shi-li","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0350-串口通信串口包协议实例","串口通信串口包协议实例",[7],"2100-0100-0350",{"path":2439,"stem":2440,"title":2441,"authors":2442,"date":1973,"chapterOrder":2443,"chapterDepth":115,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0400-tcp-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0400-TCP通信","TCP 通信",[7],"2100-0100-0400",{"path":2445,"stem":2446,"title":2447,"authors":2448,"date":1973,"chapterOrder":2449,"chapterDepth":115,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0500-udp-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0500-UDP通信","UDP 通信",[7],"2100-0100-0500",{"path":2451,"stem":2452,"title":2453,"authors":2454,"date":1973,"chapterOrder":2455,"chapterDepth":115,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0600-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0600-机器人工程写法与ROS2集成","机器人工程写法与 ROS2 集成",[7],"2100-0100-0600",{"path":2457,"stem":2458,"title":2459,"authors":2460,"date":1973,"chapterOrder":2461,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","Boost.Asio异步IO库",[7],"2100-0100",{"path":2463,"stem":2464,"title":2465,"authors":2466,"date":1973,"chapterOrder":2467,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0200-eigen-xian-xing-dai-shu-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0200-Eigen线性代数库","Eigen线性代数库",[7],"2100-0200",{"path":2469,"stem":2470,"title":2471,"authors":2472,"date":1973,"chapterOrder":2473,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0300-opencv-ji-suan-ji-shi-jue-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0300-OpenCV计算机视觉库","OpenCV计算机视觉库",[7],"2100-0300",{"path":2475,"stem":2476,"title":2477,"authors":2478,"date":1973,"chapterOrder":2479,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0400-pcl-dian-yun-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0400-PCL点云库","PCL点云库",[7],"2100-0400",{"path":2481,"stem":2482,"title":2483,"authors":2484,"date":1973,"chapterOrder":2485,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0500-sophus-li-qun-li-dai-shu-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0500-Sophus李群李代数库","Sophus 李群李代数库",[7],"2100-0500",{"path":2487,"stem":2488,"title":2489,"authors":2490,"date":1973,"chapterOrder":2491,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","常用库学习",[7],"2100",{"path":2493,"stem":2494,"title":2495,"authors":2496,"date":1973,"chapterOrder":2497,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0100-cmakepresets-yu-gou-jian-an-zhuang","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0100-CMakePresets与构建安装","CMakePresets与构建安装",[7],"2200-0100",{"path":2499,"stem":2500,"title":2501,"authors":2502,"date":1973,"chapterOrder":2503,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项","顶层CMake与公共编译选项",[7],"2200-0200",{"path":2505,"stem":2506,"title":2507,"authors":2508,"date":1973,"chapterOrder":2509,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0300-src-yu-lib-mo-kuai-cmake-xiang-jie","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0300-src与lib模块CMake详解","src与lib模块CMake详解",[7],"2200-0300",{"path":2511,"stem":2512,"title":2513,"authors":2514,"date":1973,"chapterOrder":2515,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法","第三方库依赖写法",[7],"2200-0400",{"path":2517,"stem":2518,"title":2519,"authors":2520,"date":1973,"chapterOrder":2521,"chapterDepth":108,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0500-mu-ban-kuo-zhan-yu-chang-jian-wen-ti","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0500-模板扩展与常见问题","模板扩展与常见问题",[7],"2200-0500",{"path":2523,"stem":2524,"title":2525,"authors":2526,"date":1973,"chapterOrder":2527,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":1978},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake工程模板",[7],"2200",{"path":1975,"stem":2529,"title":2530,"authors":2531,"date":1973,"chapterOrder":2532,"chapterDepth":1991,"docKey":1974,"docRoot":1975,"docTitle":1976,"isWikiDoc":135,"isWikiIndex":135},"wiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++教程",[7],null,[2534,2536,2539,2542],{"name":7,"image":2535},"\u002Fimages\u002Fmember_photo\u002F董佳辉.jpg",{"name":2537,"image":2538},"宫金良","\u002Fimages\u002Fmember_photo\u002F宫金良.jpg",{"name":2540,"image":2541},"巩丽","\u002Fimages\u002Fmember_photo\u002F巩丽.png",{"name":2543,"image":2544},"张彦斐","\u002Fimages\u002Fmember_photo\u002F张彦斐.jpg",1792431899513]