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