[{"data":1,"prerenderedAt":2415},["ShallowReactive",2],{"wiki-page-/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-21-modules-jian-jie":3,"wiki-doc-items-/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-21-modules-jian-jie":1988,"language-switcher-data-/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-21-modules-jian-jie":2399,"wiki-i18n-paths-/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-21-modules-jian-jie":2414},{"id":4,"title":5,"body":6,"canonicalPath":1970,"chapter":1971,"chapterSort":1972,"date":1973,"description":99,"docI18nKey":1974,"docKey":1975,"docRoot":1976,"docTitle":1977,"extension":1978,"i18nKey":1979,"isBlogPost":1980,"isWikiDoc":133,"isWikiIndex":1980,"layout":1981,"legacyPath":1982,"locale":1983,"localeSlug":1984,"meta":1985,"navigation":133,"path":1970,"seo":1986,"sourcePath":1982,"sourceStem":1979,"stem":1979,"wikiDepth":106,"__hash__":1987},"content/wiki/2023-10-05-Cplusplus教学/ch18-21-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","// math_module.cppm —— 模块接口文件\nexport module math;           // 声明模块名\n\nexport int add(int a, int b)  // export：对外可见\n{\n    return a + b;\n}\n\nint multiply(int a, int b)    // 没有 export：模块内部可见\n{\n    return a * b;\n}\n\n// main.cpp —— 使用模块\nimport math;                  // 导入模块（替代 #include）\n\nint main()\n{\n    int x = add(3, 5);        // ✅ 可以访问\n    // int y = multiply(3, 5); // ❌ 不可访问（没有 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","// 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},"           // 声明模块名\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},"  // 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},"    // 没有 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},"// main.cpp —— 使用模块\n",[103,260,262,265],{"class":105,"line":261},15,[103,263,264],{"class":123},"import math;",[103,266,267],{"class":109},"                  // 导入模块（替代 #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},"        // ✅ 可以访问\n",[103,321,323,326],{"class":105,"line":322},20,[103,324,325],{"class":109},"    // int y = multiply(3, 5);",[103,327,328],{"class":109}," // ❌ 不可访问（没有 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},"标记对外可见的函数/类/变量",[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// 内部函数，不对外暴露\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},"// 内部函数，不对外暴露\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    // internal_helper();  // ❌ 编译错误！没有 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},"    // internal_helper();",[103,810,811],{"class":109},"  // ❌ 编译错误！没有 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    // p.name_ = \"Bob\";  // ❌ 编译错误！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},"    // p.name_ = \"Bob\";",[103,1220,1221],{"class":109},"  // ❌ 编译错误！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    // 程序从 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    // 返回 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},"    // 程序从 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},"    // 返回 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/private 仍然有效",[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/Clang），MSVC 用 ",[18,1714,1715],{},"/std: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},"// module.cppm\nexport module my_module;\nint func() { return 42; }  // ❌ 没有 export，外部看不到！\n",[18,1727,1728,1733,1742],{"__ignoreMap":99},[103,1729,1730],{"class":105,"line":106},[103,1731,1732],{"class":109},"// 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},"  // ❌ 没有 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(); // 没有 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}," // 没有 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/构建系统管理更稳。",[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},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-21-modules-jian-jie","18.21",18210000,"2023-10-05","wiki/2023-10-05-cplusplus-jiao-xue","zh-cn:2023-10-05-cplusplus-jiao-xue","/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md","wiki/2023-10-05-Cplusplus教学/ch18-21-modules简介",false,null,"/wiki/2023-10-05-cplusplus-jiao-xue/ch18-21-modules-jian-jie","zh-CN","zh-cn",{},{"title":5,"description":99},"jHTJ6H7I-9fVK6UDpCg_rlHNbjsgUKvQTBFGNnq4NXA",[1989,1995,2000,2006,2012,2018,2024,2030,2036,2042,2048,2054,2060,2066,2072,2078,2084,2090,2096,2102,2108,2114,2120,2126,2132,2138,2144,2150,2156,2162,2168,2174,2180,2186,2192,2198,2204,2210,2216,2222,2228,2229,2235,2241,2247,2253,2259,2265,2271,2277,2283,2289,2295,2301,2307,2313,2319,2325,2331,2337,2343,2349,2355,2360,2366,2371,2377,2383,2389,2395],{"path":1990,"stem":1991,"title":1992,"date":1973,"chapter":1993,"chapterSort":1994,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch1-c-ji-chu-chu-shi","wiki/2023-10-05-Cplusplus教学/ch1-C++基础初识","C++基础初识","1",1000000,{"path":1996,"stem":1997,"title":1998,"date":1973,"chapter":787,"chapterSort":1999,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch10-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","wiki/2023-10-05-Cplusplus教学/ch10-内存分区与生命周期","内存分区与生命周期",10000000,{"path":2001,"stem":2002,"title":2003,"date":1973,"chapter":2004,"chapterSort":2005,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch11-yin-yong","wiki/2023-10-05-Cplusplus教学/ch11-引用","引用","11",11000000,{"path":2007,"stem":2008,"title":2009,"date":1973,"chapter":2010,"chapterSort":2011,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch12-han-shu-ti-gao-yu-ming-ming-kong-jian","wiki/2023-10-05-Cplusplus教学/ch12-函数提高与命名空间","函数提高与命名空间","12",12000000,{"path":2013,"stem":2014,"title":2015,"date":1973,"chapter":2016,"chapterSort":2017,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-1-feng-zhuang","wiki/2023-10-05-Cplusplus教学/ch13-1-封装","封装","13.1",13010000,{"path":2019,"stem":2020,"title":2021,"date":1973,"chapter":2022,"chapterSort":2023,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-2-dui-xiang-chu-shi-hua-he-qing-li","wiki/2023-10-05-Cplusplus教学/ch13-2-对象初始化和清理","对象初始化和清理","13.2",13020000,{"path":2025,"stem":2026,"title":2027,"date":1973,"chapter":2028,"chapterSort":2029,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-3-dui-xiang-mo-xing-yu-this-zhi-zhen","wiki/2023-10-05-Cplusplus教学/ch13-3-对象模型与this指针","对象模型与this指针","13.3",13030000,{"path":2031,"stem":2032,"title":2033,"date":1973,"chapter":2034,"chapterSort":2035,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-4-you-yuan-yu-yun-suan-fu-zhong-zai","wiki/2023-10-05-Cplusplus教学/ch13-4-友元与运算符重载","友元与运算符重载","13.4",13040000,{"path":2037,"stem":2038,"title":2039,"date":1973,"chapter":2040,"chapterSort":2041,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-5-ji-cheng","wiki/2023-10-05-Cplusplus教学/ch13-5-继承","继承","13.5",13050000,{"path":2043,"stem":2044,"title":2045,"date":1973,"chapter":2046,"chapterSort":2047,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-6-duo-tai","wiki/2023-10-05-Cplusplus教学/ch13-6-多态","多态","13.6",13060000,{"path":2049,"stem":2050,"title":2051,"date":1973,"chapter":2052,"chapterSort":2053,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch13-lei-he-dui-xiang","wiki/2023-10-05-Cplusplus教学/ch13-类和对象","类和对象","13",13000000,{"path":2055,"stem":2056,"title":2057,"date":1973,"chapter":2058,"chapterSort":2059,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch14-wen-jian-cao-zuo","wiki/2023-10-05-Cplusplus教学/ch14-文件操作","文件操作","14",14000000,{"path":2061,"stem":2062,"title":2063,"date":1973,"chapter":2064,"chapterSort":2065,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch15-mu-ban","wiki/2023-10-05-Cplusplus教学/ch15-模板","模板","15",15000000,{"path":2067,"stem":2068,"title":2069,"date":1973,"chapter":2070,"chapterSort":2071,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-1-stl-chu-shi","wiki/2023-10-05-Cplusplus教学/ch16-1-STL初识","STL初识","16.1",16010000,{"path":2073,"stem":2074,"title":2075,"date":1973,"chapter":2076,"chapterSort":2077,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-2-std-array","wiki/2023-10-05-Cplusplus教学/ch16-2-std-array","std::array","16.2",16020000,{"path":2079,"stem":2080,"title":2081,"date":1973,"chapter":2082,"chapterSort":2083,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-3-string-rong-qi","wiki/2023-10-05-Cplusplus教学/ch16-3-string容器","string容器","16.3",16030000,{"path":2085,"stem":2086,"title":2087,"date":1973,"chapter":2088,"chapterSort":2089,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-4-vector-yu-deque-rong-qi","wiki/2023-10-05-Cplusplus教学/ch16-4-vector与deque容器","vector与deque容器","16.4",16040000,{"path":2091,"stem":2092,"title":2093,"date":1973,"chapter":2094,"chapterSort":2095,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-5-stack-queue-list-rong-qi","wiki/2023-10-05-Cplusplus教学/ch16-5-stack-queue-list容器","stack / queue / list 容器","16.5",16050000,{"path":2097,"stem":2098,"title":2099,"date":1973,"chapter":2100,"chapterSort":2101,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-6-set-map-rong-qi","wiki/2023-10-05-Cplusplus教学/ch16-6-set-map容器","set / map 容器","16.6",16060000,{"path":2103,"stem":2104,"title":2105,"date":1973,"chapter":2106,"chapterSort":2107,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-7-han-shu-dui-xiang-yu-wei-ci","wiki/2023-10-05-Cplusplus教学/ch16-7-函数对象与谓词","函数对象与谓词","16.7",16070000,{"path":2109,"stem":2110,"title":2111,"date":1973,"chapter":2112,"chapterSort":2113,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-8-chang-yong-suan-fa","wiki/2023-10-05-Cplusplus教学/ch16-8-常用算法","常用算法","16.8",16080000,{"path":2115,"stem":2116,"title":2117,"date":1973,"chapter":2118,"chapterSort":2119,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch16-stl-ti-gao-bian-cheng","wiki/2023-10-05-Cplusplus教学/ch16-STL提高编程","STL提高编程","16",16000000,{"path":2121,"stem":2122,"title":2123,"date":1973,"chapter":2124,"chapterSort":2125,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch17-c-lei-xing-zhuan-huan","wiki/2023-10-05-Cplusplus教学/ch17-C++类型转换","C++类型转换","17",17000000,{"path":2127,"stem":2128,"title":2129,"date":1973,"chapter":2130,"chapterSort":2131,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-1-auto","wiki/2023-10-05-Cplusplus教学/ch18-1-auto","auto","18.1",18010000,{"path":2133,"stem":2134,"title":2135,"date":1973,"chapter":2136,"chapterSort":2137,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-10-you-zhi-yin-yong-he-yi-dong-yu-yi","wiki/2023-10-05-Cplusplus教学/ch18-10-右值引用和移动语义","右值引用和移动语义","18.10",18100000,{"path":2139,"stem":2140,"title":2141,"date":1973,"chapter":2142,"chapterSort":2143,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-11-lambda-biao-da-shi","wiki/2023-10-05-Cplusplus教学/ch18-11-Lambda表达式","Lambda 表达式","18.11",18110000,{"path":2145,"stem":2146,"title":2147,"date":1973,"chapter":2148,"chapterSort":2149,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-12-std-function","wiki/2023-10-05-Cplusplus教学/ch18-12-std-function","std::function","18.12",18120000,{"path":2151,"stem":2152,"title":2153,"date":1973,"chapter":2154,"chapterSort":2155,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-13-std-bind","wiki/2023-10-05-Cplusplus教学/ch18-13-std-bind","std::bind","18.13",18130000,{"path":2157,"stem":2158,"title":2159,"date":1973,"chapter":2160,"chapterSort":2161,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-14-std-optional","wiki/2023-10-05-Cplusplus教学/ch18-14-std-optional","std::optional","18.14",18140000,{"path":2163,"stem":2164,"title":2165,"date":1973,"chapter":2166,"chapterSort":2167,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-15-std-variant","wiki/2023-10-05-Cplusplus教学/ch18-15-std-variant","std::variant","18.15",18150000,{"path":2169,"stem":2170,"title":2171,"date":1973,"chapter":2172,"chapterSort":2173,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-16-std-span","wiki/2023-10-05-Cplusplus教学/ch18-16-std-span","std::span","18.16",18160000,{"path":2175,"stem":2176,"title":2177,"date":1973,"chapter":2178,"chapterSort":2179,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-17-std-format-print","wiki/2023-10-05-Cplusplus教学/ch18-17-std-format-print","std::format / std::print","18.17",18170000,{"path":2181,"stem":2182,"title":2183,"date":1973,"chapter":2184,"chapterSort":2185,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-18-std-chrono","wiki/2023-10-05-Cplusplus教学/ch18-18-std-chrono","std::chrono","18.18",18180000,{"path":2187,"stem":2188,"title":2189,"date":1973,"chapter":2190,"chapterSort":2191,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-1-std-thread","wiki/2023-10-05-Cplusplus教学/ch18-19-1-std-thread","std::thread 与 join","18.19.1",18190100,{"path":2193,"stem":2194,"title":2195,"date":1973,"chapter":2196,"chapterSort":2197,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-2-mutex-lock-guard","wiki/2023-10-05-Cplusplus教学/ch18-19-2-mutex-lock-guard","mutex 与 lock_guard","18.19.2",18190200,{"path":2199,"stem":2200,"title":2201,"date":1973,"chapter":2202,"chapterSort":2203,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-3-std-atomic","wiki/2023-10-05-Cplusplus教学/ch18-19-3-std-atomic","std::atomic","18.19.3",18190300,{"path":2205,"stem":2206,"title":2207,"date":1973,"chapter":2208,"chapterSort":2209,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-4-condition-variable","wiki/2023-10-05-Cplusplus教学/ch18-19-4-condition-variable","condition_variable","18.19.4",18190400,{"path":2211,"stem":2212,"title":2213,"date":1973,"chapter":2214,"chapterSort":2215,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-19-bing-fa-bian-cheng","wiki/2023-10-05-Cplusplus教学/ch18-19-并发编程","并发编程","18.19",18190000,{"path":2217,"stem":2218,"title":2219,"date":1973,"chapter":2220,"chapterSort":2221,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-2-nullptr","wiki/2023-10-05-Cplusplus教学/ch18-2-nullptr","nullptr","18.2",18020000,{"path":2223,"stem":2224,"title":2225,"date":1973,"chapter":2226,"chapterSort":2227,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-20-std-filesystem","wiki/2023-10-05-Cplusplus教学/ch18-20-std-filesystem","std::filesystem","18.20",18200000,{"path":1970,"stem":1979,"title":5,"date":1973,"chapter":1971,"chapterSort":1972,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},{"path":2230,"stem":2231,"title":2232,"date":1973,"chapter":2233,"chapterSort":2234,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-3-using","wiki/2023-10-05-Cplusplus教学/ch18-3-using","using","18.3",18030000,{"path":2236,"stem":2237,"title":2238,"date":1973,"chapter":2239,"chapterSort":2240,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-4-enum-class","wiki/2023-10-05-Cplusplus教学/ch18-4-enum-class","enum class","18.4",18040000,{"path":2242,"stem":2243,"title":2244,"date":1973,"chapter":2245,"chapterSort":2246,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-5-fan-wei-for-xun-huan","wiki/2023-10-05-Cplusplus教学/ch18-5-范围for循环","范围 for 循环","18.5",18050000,{"path":2248,"stem":2249,"title":2250,"date":1973,"chapter":2251,"chapterSort":2252,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-6-jie-gou-hua-bang-ding","wiki/2023-10-05-Cplusplus教学/ch18-6-结构化绑定","结构化绑定","18.6",18060000,{"path":2254,"stem":2255,"title":2256,"date":1973,"chapter":2257,"chapterSort":2258,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-7-constexpr","wiki/2023-10-05-Cplusplus教学/ch18-7-constexpr","constexpr","18.7",18070000,{"path":2260,"stem":2261,"title":2262,"date":1973,"chapter":2263,"chapterSort":2264,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-8-raii","wiki/2023-10-05-Cplusplus教学/ch18-8-RAII","RAII","18.8",18080000,{"path":2266,"stem":2267,"title":2268,"date":1973,"chapter":2269,"chapterSort":2270,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-9-zhi-neng-zhi-zhen","wiki/2023-10-05-Cplusplus教学/ch18-9-智能指针","智能指针","18.9",18090000,{"path":2272,"stem":2273,"title":2274,"date":1973,"chapter":2275,"chapterSort":2276,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch18-xian-dai-c","wiki/2023-10-05-Cplusplus教学/ch18-现代C++","现代C++","18",18000000,{"path":2278,"stem":2279,"title":2280,"date":1973,"chapter":2281,"chapterSort":2282,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-1-ding-shi-qi-yu-yi-bu-io","wiki/2023-10-05-Cplusplus教学/ch19-1-1-定时器与异步IO","定时器与异步 IO","19.1.1",19010100,{"path":2284,"stem":2285,"title":2286,"date":1973,"chapter":2287,"chapterSort":2288,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-2-boost-asio-ji-chu","wiki/2023-10-05-Cplusplus教学/ch19-1-2-Boost.Asio基础","Boost.Asio 基础","19.1.2",19010200,{"path":2290,"stem":2291,"title":2292,"date":1973,"chapter":2293,"chapterSort":2294,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-3-chuan-kou-tong-xin","wiki/2023-10-05-Cplusplus教学/ch19-1-3-串口通信","串口通信","19.1.3",19010300,{"path":2296,"stem":2297,"title":2298,"date":1973,"chapter":2299,"chapterSort":2300,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-4-tcp-tong-xin","wiki/2023-10-05-Cplusplus教学/ch19-1-4-TCP通信","TCP 通信","19.1.4",19010400,{"path":2302,"stem":2303,"title":2304,"date":1973,"chapter":2305,"chapterSort":2306,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-5-udp-tong-xin","wiki/2023-10-05-Cplusplus教学/ch19-1-5-UDP通信","UDP 通信","19.1.5",19010500,{"path":2308,"stem":2309,"title":2310,"date":1973,"chapter":2311,"chapterSort":2312,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-6-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","wiki/2023-10-05-Cplusplus教学/ch19-1-6-机器人工程写法与ROS2集成","机器人工程写法与 ROS2 集成","19.1.6",19010600,{"path":2314,"stem":2315,"title":2316,"date":1973,"chapter":2317,"chapterSort":2318,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-1-boost-asio-yi-bu-io-ku","wiki/2023-10-05-Cplusplus教学/ch19-1-Boost.Asio异步IO库","Boost.Asio异步IO库","19.1",19010000,{"path":2320,"stem":2321,"title":2322,"date":1973,"chapter":2323,"chapterSort":2324,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-2-eigen-xian-xing-dai-shu-ku","wiki/2023-10-05-Cplusplus教学/ch19-2-Eigen线性代数库","Eigen线性代数库","19.2",19020000,{"path":2326,"stem":2327,"title":2328,"date":1973,"chapter":2329,"chapterSort":2330,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-3-opencv-ji-suan-ji-shi-jue-ku","wiki/2023-10-05-Cplusplus教学/ch19-3-OpenCV计算机视觉库","OpenCV计算机视觉库","19.3",19030000,{"path":2332,"stem":2333,"title":2334,"date":1973,"chapter":2335,"chapterSort":2336,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-4-pcl-dian-yun-ku","wiki/2023-10-05-Cplusplus教学/ch19-4-PCL点云库","PCL点云库","19.4",19040000,{"path":2338,"stem":2339,"title":2340,"date":1973,"chapter":2341,"chapterSort":2342,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-5-sophus-li-qun-li-dai-shu-ku","wiki/2023-10-05-Cplusplus教学/ch19-5-Sophus李群李代数库","Sophus 李群李代数库","19.5",19050000,{"path":2344,"stem":2345,"title":2346,"date":1973,"chapter":2347,"chapterSort":2348,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch19-chang-yong-ku","wiki/2023-10-05-Cplusplus教学/ch19-常用库","常用库学习","19",19000000,{"path":2350,"stem":2351,"title":2352,"date":1973,"chapter":2353,"chapterSort":2354,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch2-shu-ju-lei-xing-yu-shu-ju-cun-fang","wiki/2023-10-05-Cplusplus教学/ch2-数据类型与数据存放","数据类型与数据存放","2",2000000,{"path":2356,"stem":2357,"title":2358,"date":1973,"chapter":308,"chapterSort":2359,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch3-shu-ru-shu-chu","wiki/2023-10-05-Cplusplus教学/ch3-输入输出","输入输出",3000000,{"path":2361,"stem":2362,"title":2363,"date":1973,"chapter":2364,"chapterSort":2365,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch4-yun-suan-fu","wiki/2023-10-05-Cplusplus教学/ch4-运算符","运算符","4",4000000,{"path":2367,"stem":2368,"title":2369,"date":1973,"chapter":313,"chapterSort":2370,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch5-cheng-xu-liu-cheng-jie-gou","wiki/2023-10-05-Cplusplus教学/ch5-程序流程结构","程序流程结构",5000000,{"path":2372,"stem":2373,"title":2374,"date":1973,"chapter":2375,"chapterSort":2376,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch6-shu-zu","wiki/2023-10-05-Cplusplus教学/ch6-数组","数组","6",6000000,{"path":2378,"stem":2379,"title":2380,"date":1973,"chapter":2381,"chapterSort":2382,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch7-han-shu-yu-tou-wen-jian","wiki/2023-10-05-Cplusplus教学/ch7-函数与头文件","函数与头文件","7",7000000,{"path":2384,"stem":2385,"title":2386,"date":1973,"chapter":2387,"chapterSort":2388,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch8-zhi-zhen","wiki/2023-10-05-Cplusplus教学/ch8-指针","指针","8",8000000,{"path":2390,"stem":2391,"title":2392,"date":1973,"chapter":2393,"chapterSort":2394,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":1980},"/zh-cn/wiki/2023-10-05-cplusplus-jiao-xue/ch9-jie-gou-ti-yu-gong-yong-ti","wiki/2023-10-05-Cplusplus教学/ch9-结构体与共用体","结构体与共用体","9",9000000,{"path":1976,"stem":2396,"title":2397,"date":1973,"chapter":1981,"chapterSort":2398,"docKey":1975,"docRoot":1976,"docTitle":1977,"isWikiDoc":133,"isWikiIndex":133},"wiki/2023-10-05-Cplusplus教学/index","C/C++教程",0,{"variants":2400},[2401,2404,2407,2410,2413],{"path":2402,"localeSlug":2403,"i18nKey":1979},"/en-us/wiki/2023-10-05-cplusplus-jiao-xue/ch18-21-modules-jian-jie","en-us",{"path":2405,"localeSlug":2406,"i18nKey":1979},"/zh-hant/wiki/2023-10-05-cplusplus-jiao-xue/ch18-21-modules-jian-jie","zh-hant",{"path":2408,"localeSlug":2409,"i18nKey":1979},"/zh-hk/wiki/2023-10-05-cplusplus-jiao-xue/ch18-21-modules-jian-jie","zh-hk",{"path":2411,"localeSlug":2412,"i18nKey":1979},"/zh-tw/wiki/2023-10-05-cplusplus-jiao-xue/ch18-21-modules-jian-jie","zh-tw",{"path":1970,"localeSlug":1984,"i18nKey":1979},[2402,1982,2405,1982,2408,1982,2411,1982,1970,1982],1780663038800]