[{"data":1,"prerenderedAt":3177},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr":3,"wiki-doc-items-2023-10-05-cplusplus-jiao-xue":2617,"wiki:author-members":3165},{"id":4,"title":5,"authors":6,"body":8,"chapterDepth":134,"chapterOrder":2605,"date":2606,"description":127,"docKey":2607,"docRoot":2608,"docTitle":2609,"extension":2610,"isWikiDoc":167,"isWikiIndex":2611,"meta":2612,"navigation":167,"path":2613,"seo":2614,"stem":2615,"wikiDepth":134,"__hash__":2616},"wiki\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr.md","constexpr",[7],"董佳辉",{"type":9,"value":10,"toc":2584},"minimark",[11,15,19,30,33,38,102,106,109,112,118,121,316,320,395,399,412,464,476,479,484,684,690,698,702,991,995,1001,1005,1566,1570,1576,1580,1777,1781,1787,1791,2076,2080,2086,2088,2091,2094,2208,2211,2216,2248,2255,2260,2341,2344,2349,2415,2418,2423,2486,2498,2501,2538,2541,2580],[12,13,14],"h2",{"id":14},"本节解决什么问题",[16,17,18],"p",{},"有些计算在编译时就已经知道结果，但如果用普通函数，却要等到运行时才计算——浪费了 CPU 时间。此外，某些场景（数组大小、模板参数、static_assert）必须使用编译期常量，普通变量做不到。",[16,20,21,24,25,29],{},[22,23,5],"code",{}," 让函数和变量在",[26,27,28],"strong",{},"编译期就能求值","，把运行时开销转移到编译期，还能用在\"必须编译期常量\"的地方。",[12,31,32],{"id":32},"这个特性是什么",[16,34,35,37],{},[22,36,5],{}," 声明一个变量或函数可以在编译期求值。从 C++11 开始引入，后续标准不断增强。",[39,40,41,55],"table",{},[42,43,44],"thead",{},[45,46,47,52],"tr",{},[48,49,51],"th",{"align":50},"left","C++ 版本",[48,53,54],{"align":50},"支持",[56,57,58,67,75,83,94],"tbody",{},[45,59,60,64],{},[61,62,63],"td",{"align":50},"C++11",[61,65,66],{"align":50},"简单 constexpr 函数（一条 return 语句）、constexpr 变量",[45,68,69,72],{},[61,70,71],{"align":50},"C++14",[61,73,74],{"align":50},"constexpr 函数支持多条语句、循环",[45,76,77,80],{},[61,78,79],{"align":50},"C++17",[61,81,82],{"align":50},"constexpr lambda",[45,84,85,88],{},[61,86,87],{"align":50},"C++20",[61,89,90,93],{"align":50},[22,91,92],{},"consteval","（必须在编译期执行）、更强的 constexpr",[45,95,96,99],{},[61,97,98],{"align":50},"C++23",[61,100,101],{"align":50},"constexpr 支持更多标准库",[12,103,105],{"id":104},"c-标准版本","C++ 标准版本",[16,107,108],{},"C++11（随后的每个版本都有增强）",[12,110,111],{"id":111},"需要的头文件",[16,113,114,115,117],{},"不需要额外头文件。",[22,116,5],{}," 是语言关键字。",[12,119,120],{"id":120},"基本语法",[122,123,128],"pre",{"className":124,"code":125,"language":126,"meta":127,"style":127},"language-cpp shiki shiki-themes github-light github-dark","\u002F\u002F constexpr 变量：值在编译期确定\nconstexpr int size = 100;\n\n\u002F\u002F constexpr 函数：可以在编译期执行\nconstexpr int square(int n)\n{\n    return n * n;\n}\n\n\u002F\u002F constexpr 变量可以用编译期函数初始化\nconstexpr int val = square(5);  \u002F\u002F 编译期计算\n\n\u002F\u002F C++20 consteval：必须在编译期执行（不能运行时调用）\nconsteval int cube(int n)\n{\n    return n * n * n;\n}\n","cpp","",[22,129,130,139,162,169,175,199,205,220,226,231,237,262,267,273,291,296,311],{"__ignoreMap":127},[131,132,135],"span",{"class":133,"line":134},"line",1,[131,136,138],{"class":137},"sJ8bj","\u002F\u002F constexpr 变量：值在编译期确定\n",[131,140,142,145,148,152,155,159],{"class":133,"line":141},2,[131,143,5],{"class":144},"szBVR",[131,146,147],{"class":144}," int",[131,149,151],{"class":150},"sVt8B"," size ",[131,153,154],{"class":144},"=",[131,156,158],{"class":157},"sj4cs"," 100",[131,160,161],{"class":150},";\n",[131,163,165],{"class":133,"line":164},3,[131,166,168],{"emptyLinePlaceholder":167},true,"\n",[131,170,172],{"class":133,"line":171},4,[131,173,174],{"class":137},"\u002F\u002F constexpr 函数：可以在编译期执行\n",[131,176,178,180,182,186,189,192,196],{"class":133,"line":177},5,[131,179,5],{"class":144},[131,181,147],{"class":144},[131,183,185],{"class":184},"sScJk"," square",[131,187,188],{"class":150},"(",[131,190,191],{"class":144},"int",[131,193,195],{"class":194},"s4XuR"," n",[131,197,198],{"class":150},")\n",[131,200,202],{"class":133,"line":201},6,[131,203,204],{"class":150},"{\n",[131,206,208,211,214,217],{"class":133,"line":207},7,[131,209,210],{"class":144},"    return",[131,212,213],{"class":150}," n ",[131,215,216],{"class":144},"*",[131,218,219],{"class":150}," n;\n",[131,221,223],{"class":133,"line":222},8,[131,224,225],{"class":150},"}\n",[131,227,229],{"class":133,"line":228},9,[131,230,168],{"emptyLinePlaceholder":167},[131,232,234],{"class":133,"line":233},10,[131,235,236],{"class":137},"\u002F\u002F constexpr 变量可以用编译期函数初始化\n",[131,238,240,242,244,247,249,251,253,256,259],{"class":133,"line":239},11,[131,241,5],{"class":144},[131,243,147],{"class":144},[131,245,246],{"class":150}," val ",[131,248,154],{"class":144},[131,250,185],{"class":184},[131,252,188],{"class":150},[131,254,255],{"class":157},"5",[131,257,258],{"class":150},");",[131,260,261],{"class":137},"  \u002F\u002F 编译期计算\n",[131,263,265],{"class":133,"line":264},12,[131,266,168],{"emptyLinePlaceholder":167},[131,268,270],{"class":133,"line":269},13,[131,271,272],{"class":137},"\u002F\u002F C++20 consteval：必须在编译期执行（不能运行时调用）\n",[131,274,276,278,280,283,285,287,289],{"class":133,"line":275},14,[131,277,92],{"class":144},[131,279,147],{"class":144},[131,281,282],{"class":184}," cube",[131,284,188],{"class":150},[131,286,191],{"class":144},[131,288,195],{"class":194},[131,290,198],{"class":150},[131,292,294],{"class":133,"line":293},15,[131,295,204],{"class":150},[131,297,299,301,303,305,307,309],{"class":133,"line":298},16,[131,300,210],{"class":144},[131,302,213],{"class":150},[131,304,216],{"class":144},[131,306,213],{"class":150},[131,308,216],{"class":144},[131,310,219],{"class":150},[131,312,314],{"class":133,"line":313},17,[131,315,225],{"class":150},[12,317,319],{"id":318},"const-vs-constexpr","const vs constexpr",[39,321,322,334],{},[42,323,324],{},[45,325,326,329,332],{},[48,327,328],{"align":50},"方面",[48,330,331],{"align":50},"const",[48,333,5],{"align":50},[56,335,336,347,358,369,380],{},[45,337,338,341,344],{},[61,339,340],{"align":50},"含义",[61,342,343],{"align":50},"变量不可修改",[61,345,346],{"align":50},"变量或函数可在编译期求值",[45,348,349,352,355],{},[61,350,351],{"align":50},"初始化",[61,353,354],{"align":50},"可在运行时初始化",[61,356,357],{"align":50},"必须在编译期初始化",[45,359,360,363,366],{},[61,361,362],{"align":50},"函数",[61,364,365],{"align":50},"只能修饰成员函数",[61,367,368],{"align":50},"函数可在编译期执行",[45,370,371,374,377],{},[61,372,373],{"align":50},"用途",[61,375,376],{"align":50},"防止变量被修改",[61,378,379],{"align":50},"编译期计算，提高效率",[45,381,382,385,390],{},[61,383,384],{"align":50},"示例",[61,386,387],{"align":50},[22,388,389],{},"const int x = get_value();",[61,391,392],{"align":50},[22,393,394],{},"constexpr int x = 5 * 3;",[12,396,398],{"id":397},"constexprconstevalconstinit-的区别","constexpr、consteval、constinit 的区别",[16,400,401,402,404,405,407,408,411],{},"这三个词看起来都和\"常量\"有关，但解决的问题不同。初学时先掌握 ",[22,403,5],{},"，再理解 C++20 的 ",[22,406,92],{}," 和 ",[22,409,410],{},"constinit","。",[39,413,414,426],{},[42,415,416],{},[45,417,418,421,423],{},[48,419,420],{"align":50},"关键字",[48,422,340],{"align":50},[48,424,425],{"align":50},"典型场景",[56,427,428,440,452],{},[45,429,430,434,437],{},[61,431,432],{"align":50},[22,433,5],{},[61,435,436],{"align":50},"可以在编译期求值，也可以在运行期调用",[61,438,439],{"align":50},"通用编译期函数、常量表达式",[45,441,442,446,449],{},[61,443,444],{"align":50},[22,445,92],{},[61,447,448],{"align":50},"必须在编译期求值",[61,450,451],{"align":50},"生成编译期 ID、编译期校验",[45,453,454,458,461],{},[61,455,456],{"align":50},[22,457,410],{},[61,459,460],{"align":50},"保证静态对象在编译期初始化，但对象不一定是 const",[61,462,463],{"align":50},"避免全局变量动态初始化顺序问题",[16,465,466,467,469,470,472,473,475],{},"一句话区分：",[22,468,5],{}," 偏\"能不能算\"，",[22,471,92],{}," 偏\"必须现在算\"，",[22,474,410],{}," 偏\"初始化时机必须早\"。",[12,477,478],{"id":478},"示例代码",[480,481,483],"h3",{"id":482},"示例-1constexpr-变量必须编译期确定","示例 1：constexpr 变量——必须编译期确定",[122,485,487],{"className":124,"code":486,"language":126,"meta":127,"style":127},"#include \u003Ciostream>\n\nint main()\n{\n    constexpr int size = 10;        \u002F\u002F 编译期常量\n    int arr[size];                  \u002F\u002F ✅ 可以用作数组大小\n\n    const int runtime_size = size;  \u002F\u002F const 可以用编译期常量初始化\n    int arr2[runtime_size];         \u002F\u002F ✅ 也可以用作数组大小（因为初始化值是 constexpr）\n\n    int n = 5;\n    \u002F\u002F constexpr int s2 = n;        \u002F\u002F ❌ n 是运行时变量，不能初始化 constexpr\n    const int s3 = n;               \u002F\u002F ✅ const 可以在运行时初始化\n    \u002F\u002F int arr3[s3];                \u002F\u002F ❌ s3 不是编译期常量，不能用作数组大小\n\n    std::cout \u003C\u003C \"size = \" \u003C\u003C size \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[22,488,489,498,502,512,516,536,547,551,569,579,583,596,604,621,629,633,665,669,679],{"__ignoreMap":127},[131,490,491,494],{"class":133,"line":134},[131,492,493],{"class":144},"#include",[131,495,497],{"class":496},"sZZnC"," \u003Ciostream>\n",[131,499,500],{"class":133,"line":141},[131,501,168],{"emptyLinePlaceholder":167},[131,503,504,506,509],{"class":133,"line":164},[131,505,191],{"class":144},[131,507,508],{"class":184}," main",[131,510,511],{"class":150},"()\n",[131,513,514],{"class":133,"line":171},[131,515,204],{"class":150},[131,517,518,521,523,525,527,530,533],{"class":133,"line":177},[131,519,520],{"class":144},"    constexpr",[131,522,147],{"class":144},[131,524,151],{"class":150},[131,526,154],{"class":144},[131,528,529],{"class":157}," 10",[131,531,532],{"class":150},";",[131,534,535],{"class":137},"        \u002F\u002F 编译期常量\n",[131,537,538,541,544],{"class":133,"line":201},[131,539,540],{"class":144},"    int",[131,542,543],{"class":150}," arr[size];",[131,545,546],{"class":137},"                  \u002F\u002F ✅ 可以用作数组大小\n",[131,548,549],{"class":133,"line":207},[131,550,168],{"emptyLinePlaceholder":167},[131,552,553,556,558,561,563,566],{"class":133,"line":222},[131,554,555],{"class":144},"    const",[131,557,147],{"class":144},[131,559,560],{"class":150}," runtime_size ",[131,562,154],{"class":144},[131,564,565],{"class":150}," size;",[131,567,568],{"class":137},"  \u002F\u002F const 可以用编译期常量初始化\n",[131,570,571,573,576],{"class":133,"line":228},[131,572,540],{"class":144},[131,574,575],{"class":150}," arr2[runtime_size];",[131,577,578],{"class":137},"         \u002F\u002F ✅ 也可以用作数组大小（因为初始化值是 constexpr）\n",[131,580,581],{"class":133,"line":233},[131,582,168],{"emptyLinePlaceholder":167},[131,584,585,587,589,591,594],{"class":133,"line":239},[131,586,540],{"class":144},[131,588,213],{"class":150},[131,590,154],{"class":144},[131,592,593],{"class":157}," 5",[131,595,161],{"class":150},[131,597,598,601],{"class":133,"line":264},[131,599,600],{"class":137},"    \u002F\u002F constexpr int s2 = n;",[131,602,603],{"class":137},"        \u002F\u002F ❌ n 是运行时变量，不能初始化 constexpr\n",[131,605,606,608,610,613,615,618],{"class":133,"line":269},[131,607,555],{"class":144},[131,609,147],{"class":144},[131,611,612],{"class":150}," s3 ",[131,614,154],{"class":144},[131,616,617],{"class":150}," n;",[131,619,620],{"class":137},"               \u002F\u002F ✅ const 可以在运行时初始化\n",[131,622,623,626],{"class":133,"line":275},[131,624,625],{"class":137},"    \u002F\u002F int arr3[s3];",[131,627,628],{"class":137},"                \u002F\u002F ❌ s3 不是编译期常量，不能用作数组大小\n",[131,630,631],{"class":133,"line":293},[131,632,168],{"emptyLinePlaceholder":167},[131,634,635,638,641,644,647,650,652,654,657,660,663],{"class":133,"line":298},[131,636,637],{"class":184},"    std",[131,639,640],{"class":150},"::cout ",[131,642,643],{"class":144},"\u003C\u003C",[131,645,646],{"class":496}," \"size = \"",[131,648,649],{"class":144}," \u003C\u003C",[131,651,151],{"class":150},[131,653,643],{"class":144},[131,655,656],{"class":496}," \"",[131,658,659],{"class":157},"\\n",[131,661,662],{"class":496},"\"",[131,664,161],{"class":150},[131,666,667],{"class":133,"line":313},[131,668,168],{"emptyLinePlaceholder":167},[131,670,672,674,677],{"class":133,"line":671},18,[131,673,210],{"class":144},[131,675,676],{"class":157}," 0",[131,678,161],{"class":150},[131,680,682],{"class":133,"line":681},19,[131,683,225],{"class":150},[16,685,686,689],{},[26,687,688],{},"运行结果","：",[122,691,696],{"className":692,"code":694,"language":695},[693],"language-text","size = 10\n","text",[22,697,694],{"__ignoreMap":127},[480,699,701],{"id":700},"示例-2在示例-1-基础上constexpr-函数","示例 2：在示例 1 基础上，constexpr 函数",[122,703,705],{"className":124,"code":704,"language":126,"meta":127,"style":127},"#include \u003Ciostream>\n\n\u002F\u002F constexpr 函数：编译期可执行\nconstexpr int factorial(int n)\n{\n    int result = 1;\n    for (int i = 1; i \u003C= n; ++i)  \u002F\u002F C++14 起支持循环\n    {\n        result *= i;\n    }\n    return result;\n}\n\nint main()\n{\n    \u002F\u002F 编译期计算：factorial(5) 在编译时就得到 120\n    constexpr int f5 = factorial(5);\n    std::cout \u003C\u003C \"factorial(5) = \" \u003C\u003C f5 \u003C\u003C \"\\n\";\n\n    \u002F\u002F 也可运行时调用\n    int n;\n    std::cout \u003C\u003C \"Enter a number: \";\n    std::cin >> n;\n    std::cout \u003C\u003C \"factorial(\" \u003C\u003C n \u003C\u003C \") = \" \u003C\u003C factorial(n) \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[22,706,707,713,717,722,739,743,757,792,797,808,813,820,824,828,836,840,845,865,890,894,900,907,921,934,972,977,986],{"__ignoreMap":127},[131,708,709,711],{"class":133,"line":134},[131,710,493],{"class":144},[131,712,497],{"class":496},[131,714,715],{"class":133,"line":141},[131,716,168],{"emptyLinePlaceholder":167},[131,718,719],{"class":133,"line":164},[131,720,721],{"class":137},"\u002F\u002F constexpr 函数：编译期可执行\n",[131,723,724,726,728,731,733,735,737],{"class":133,"line":171},[131,725,5],{"class":144},[131,727,147],{"class":144},[131,729,730],{"class":184}," factorial",[131,732,188],{"class":150},[131,734,191],{"class":144},[131,736,195],{"class":194},[131,738,198],{"class":150},[131,740,741],{"class":133,"line":177},[131,742,204],{"class":150},[131,744,745,747,750,752,755],{"class":133,"line":201},[131,746,540],{"class":144},[131,748,749],{"class":150}," result ",[131,751,154],{"class":144},[131,753,754],{"class":157}," 1",[131,756,161],{"class":150},[131,758,759,762,765,767,770,772,774,777,780,783,786,789],{"class":133,"line":207},[131,760,761],{"class":144},"    for",[131,763,764],{"class":150}," (",[131,766,191],{"class":144},[131,768,769],{"class":150}," i ",[131,771,154],{"class":144},[131,773,754],{"class":157},[131,775,776],{"class":150},"; i ",[131,778,779],{"class":144},"\u003C=",[131,781,782],{"class":150}," n; ",[131,784,785],{"class":144},"++",[131,787,788],{"class":150},"i)",[131,790,791],{"class":137},"  \u002F\u002F C++14 起支持循环\n",[131,793,794],{"class":133,"line":222},[131,795,796],{"class":150},"    {\n",[131,798,799,802,805],{"class":133,"line":228},[131,800,801],{"class":150},"        result ",[131,803,804],{"class":144},"*=",[131,806,807],{"class":150}," i;\n",[131,809,810],{"class":133,"line":233},[131,811,812],{"class":150},"    }\n",[131,814,815,817],{"class":133,"line":239},[131,816,210],{"class":144},[131,818,819],{"class":150}," result;\n",[131,821,822],{"class":133,"line":264},[131,823,225],{"class":150},[131,825,826],{"class":133,"line":269},[131,827,168],{"emptyLinePlaceholder":167},[131,829,830,832,834],{"class":133,"line":275},[131,831,191],{"class":144},[131,833,508],{"class":184},[131,835,511],{"class":150},[131,837,838],{"class":133,"line":293},[131,839,204],{"class":150},[131,841,842],{"class":133,"line":298},[131,843,844],{"class":137},"    \u002F\u002F 编译期计算：factorial(5) 在编译时就得到 120\n",[131,846,847,849,851,854,856,858,860,862],{"class":133,"line":313},[131,848,520],{"class":144},[131,850,147],{"class":144},[131,852,853],{"class":150}," f5 ",[131,855,154],{"class":144},[131,857,730],{"class":184},[131,859,188],{"class":150},[131,861,255],{"class":157},[131,863,864],{"class":150},");\n",[131,866,867,869,871,873,876,878,880,882,884,886,888],{"class":133,"line":671},[131,868,637],{"class":184},[131,870,640],{"class":150},[131,872,643],{"class":144},[131,874,875],{"class":496}," \"factorial(5) = \"",[131,877,649],{"class":144},[131,879,853],{"class":150},[131,881,643],{"class":144},[131,883,656],{"class":496},[131,885,659],{"class":157},[131,887,662],{"class":496},[131,889,161],{"class":150},[131,891,892],{"class":133,"line":681},[131,893,168],{"emptyLinePlaceholder":167},[131,895,897],{"class":133,"line":896},20,[131,898,899],{"class":137},"    \u002F\u002F 也可运行时调用\n",[131,901,903,905],{"class":133,"line":902},21,[131,904,540],{"class":144},[131,906,219],{"class":150},[131,908,910,912,914,916,919],{"class":133,"line":909},22,[131,911,637],{"class":184},[131,913,640],{"class":150},[131,915,643],{"class":144},[131,917,918],{"class":496}," \"Enter a number: \"",[131,920,161],{"class":150},[131,922,924,926,929,932],{"class":133,"line":923},23,[131,925,637],{"class":184},[131,927,928],{"class":150},"::cin ",[131,930,931],{"class":144},">>",[131,933,219],{"class":150},[131,935,937,939,941,943,946,948,950,952,955,957,959,962,964,966,968,970],{"class":133,"line":936},24,[131,938,637],{"class":184},[131,940,640],{"class":150},[131,942,643],{"class":144},[131,944,945],{"class":496}," \"factorial(\"",[131,947,649],{"class":144},[131,949,213],{"class":150},[131,951,643],{"class":144},[131,953,954],{"class":496}," \") = \"",[131,956,649],{"class":144},[131,958,730],{"class":184},[131,960,961],{"class":150},"(n) ",[131,963,643],{"class":144},[131,965,656],{"class":496},[131,967,659],{"class":157},[131,969,662],{"class":496},[131,971,161],{"class":150},[131,973,975],{"class":133,"line":974},25,[131,976,168],{"emptyLinePlaceholder":167},[131,978,980,982,984],{"class":133,"line":979},26,[131,981,210],{"class":144},[131,983,676],{"class":157},[131,985,161],{"class":150},[131,987,989],{"class":133,"line":988},27,[131,990,225],{"class":150},[16,992,993,689],{},[26,994,688],{},[122,996,999],{"className":997,"code":998,"language":695},[693],"factorial(5) = 120\nEnter a number: 4\nfactorial(4) = 24\n",[22,1000,998],{"__ignoreMap":127},[480,1002,1004],{"id":1003},"示例-3在示例-2-基础上constexpr-用于模板和编译期检查","示例 3：在示例 2 基础上，constexpr 用于模板和编译期检查",[122,1006,1008],{"className":124,"code":1007,"language":126,"meta":127,"style":127},"#include \u003Ciostream>\n\n\u002F\u002F constexpr 函数：编译期判断是否为质数\nconstexpr bool is_prime(int n)\n{\n    if (n \u003C= 1) return false;\n    for (int i = 2; i * i \u003C= n; ++i)\n    {\n        if (n % i == 0) return false;\n    }\n    return true;\n}\n\n\u002F\u002F 编译期静态断言\nstatic_assert(is_prime(2), \"2 is prime\");\nstatic_assert(is_prime(7), \"7 is prime\");\nstatic_assert(!is_prime(9), \"9 is NOT prime\");\n\n\u002F\u002F 编译期生成质数数组\nconstexpr int get_nth_prime(int n)\n{\n    int count = 0;\n    int num = 1;\n    while (count \u003C n)\n    {\n        ++num;\n        if (is_prime(num))\n        {\n            ++count;\n        }\n    }\n    return num;\n}\n\nint main()\n{\n    constexpr int primes[] = {\n        get_nth_prime(1),  \u002F\u002F 2\n        get_nth_prime(2),  \u002F\u002F 3\n        get_nth_prime(3),  \u002F\u002F 5\n        get_nth_prime(4),  \u002F\u002F 7\n        get_nth_prime(5)   \u002F\u002F 11\n    };\n\n    std::cout \u003C\u003C \"First 5 primes: \";\n    for (int p : primes)\n    {\n        std::cout \u003C\u003C p \u003C\u003C \" \";\n    }\n    std::cout \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[22,1009,1010,1016,1020,1025,1043,1047,1070,1100,1104,1129,1133,1142,1146,1150,1155,1178,1198,1221,1225,1230,1247,1251,1264,1277,1291,1295,1303,1314,1320,1329,1335,1340,1348,1353,1358,1367,1372,1387,1404,1418,1433,1448,1463,1469,1474,1488,1500,1505,1525,1530,1547,1552,1561],{"__ignoreMap":127},[131,1011,1012,1014],{"class":133,"line":134},[131,1013,493],{"class":144},[131,1015,497],{"class":496},[131,1017,1018],{"class":133,"line":141},[131,1019,168],{"emptyLinePlaceholder":167},[131,1021,1022],{"class":133,"line":164},[131,1023,1024],{"class":137},"\u002F\u002F constexpr 函数：编译期判断是否为质数\n",[131,1026,1027,1029,1032,1035,1037,1039,1041],{"class":133,"line":171},[131,1028,5],{"class":144},[131,1030,1031],{"class":144}," bool",[131,1033,1034],{"class":184}," is_prime",[131,1036,188],{"class":150},[131,1038,191],{"class":144},[131,1040,195],{"class":194},[131,1042,198],{"class":150},[131,1044,1045],{"class":133,"line":177},[131,1046,204],{"class":150},[131,1048,1049,1052,1055,1057,1059,1062,1065,1068],{"class":133,"line":201},[131,1050,1051],{"class":144},"    if",[131,1053,1054],{"class":150}," (n ",[131,1056,779],{"class":144},[131,1058,754],{"class":157},[131,1060,1061],{"class":150},") ",[131,1063,1064],{"class":144},"return",[131,1066,1067],{"class":157}," false",[131,1069,161],{"class":150},[131,1071,1072,1074,1076,1078,1080,1082,1085,1087,1089,1091,1093,1095,1097],{"class":133,"line":207},[131,1073,761],{"class":144},[131,1075,764],{"class":150},[131,1077,191],{"class":144},[131,1079,769],{"class":150},[131,1081,154],{"class":144},[131,1083,1084],{"class":157}," 2",[131,1086,776],{"class":150},[131,1088,216],{"class":144},[131,1090,769],{"class":150},[131,1092,779],{"class":144},[131,1094,782],{"class":150},[131,1096,785],{"class":144},[131,1098,1099],{"class":150},"i)\n",[131,1101,1102],{"class":133,"line":222},[131,1103,796],{"class":150},[131,1105,1106,1109,1111,1114,1116,1119,1121,1123,1125,1127],{"class":133,"line":228},[131,1107,1108],{"class":144},"        if",[131,1110,1054],{"class":150},[131,1112,1113],{"class":144},"%",[131,1115,769],{"class":150},[131,1117,1118],{"class":144},"==",[131,1120,676],{"class":157},[131,1122,1061],{"class":150},[131,1124,1064],{"class":144},[131,1126,1067],{"class":157},[131,1128,161],{"class":150},[131,1130,1131],{"class":133,"line":233},[131,1132,812],{"class":150},[131,1134,1135,1137,1140],{"class":133,"line":239},[131,1136,210],{"class":144},[131,1138,1139],{"class":157}," true",[131,1141,161],{"class":150},[131,1143,1144],{"class":133,"line":264},[131,1145,225],{"class":150},[131,1147,1148],{"class":133,"line":269},[131,1149,168],{"emptyLinePlaceholder":167},[131,1151,1152],{"class":133,"line":275},[131,1153,1154],{"class":137},"\u002F\u002F 编译期静态断言\n",[131,1156,1157,1160,1162,1165,1167,1170,1173,1176],{"class":133,"line":293},[131,1158,1159],{"class":144},"static_assert",[131,1161,188],{"class":150},[131,1163,1164],{"class":184},"is_prime",[131,1166,188],{"class":150},[131,1168,1169],{"class":157},"2",[131,1171,1172],{"class":150},"), ",[131,1174,1175],{"class":496},"\"2 is prime\"",[131,1177,864],{"class":150},[131,1179,1180,1182,1184,1186,1188,1191,1193,1196],{"class":133,"line":298},[131,1181,1159],{"class":144},[131,1183,188],{"class":150},[131,1185,1164],{"class":184},[131,1187,188],{"class":150},[131,1189,1190],{"class":157},"7",[131,1192,1172],{"class":150},[131,1194,1195],{"class":496},"\"7 is prime\"",[131,1197,864],{"class":150},[131,1199,1200,1202,1204,1207,1209,1211,1214,1216,1219],{"class":133,"line":313},[131,1201,1159],{"class":144},[131,1203,188],{"class":150},[131,1205,1206],{"class":144},"!",[131,1208,1164],{"class":184},[131,1210,188],{"class":150},[131,1212,1213],{"class":157},"9",[131,1215,1172],{"class":150},[131,1217,1218],{"class":496},"\"9 is NOT prime\"",[131,1220,864],{"class":150},[131,1222,1223],{"class":133,"line":671},[131,1224,168],{"emptyLinePlaceholder":167},[131,1226,1227],{"class":133,"line":681},[131,1228,1229],{"class":137},"\u002F\u002F 编译期生成质数数组\n",[131,1231,1232,1234,1236,1239,1241,1243,1245],{"class":133,"line":896},[131,1233,5],{"class":144},[131,1235,147],{"class":144},[131,1237,1238],{"class":184}," get_nth_prime",[131,1240,188],{"class":150},[131,1242,191],{"class":144},[131,1244,195],{"class":194},[131,1246,198],{"class":150},[131,1248,1249],{"class":133,"line":902},[131,1250,204],{"class":150},[131,1252,1253,1255,1258,1260,1262],{"class":133,"line":909},[131,1254,540],{"class":144},[131,1256,1257],{"class":150}," count ",[131,1259,154],{"class":144},[131,1261,676],{"class":157},[131,1263,161],{"class":150},[131,1265,1266,1268,1271,1273,1275],{"class":133,"line":923},[131,1267,540],{"class":144},[131,1269,1270],{"class":150}," num ",[131,1272,154],{"class":144},[131,1274,754],{"class":157},[131,1276,161],{"class":150},[131,1278,1279,1282,1285,1288],{"class":133,"line":936},[131,1280,1281],{"class":144},"    while",[131,1283,1284],{"class":150}," (count ",[131,1286,1287],{"class":144},"\u003C",[131,1289,1290],{"class":150}," n)\n",[131,1292,1293],{"class":133,"line":974},[131,1294,796],{"class":150},[131,1296,1297,1300],{"class":133,"line":979},[131,1298,1299],{"class":144},"        ++",[131,1301,1302],{"class":150},"num;\n",[131,1304,1305,1307,1309,1311],{"class":133,"line":988},[131,1306,1108],{"class":144},[131,1308,764],{"class":150},[131,1310,1164],{"class":184},[131,1312,1313],{"class":150},"(num))\n",[131,1315,1317],{"class":133,"line":1316},28,[131,1318,1319],{"class":150},"        {\n",[131,1321,1323,1326],{"class":133,"line":1322},29,[131,1324,1325],{"class":144},"            ++",[131,1327,1328],{"class":150},"count;\n",[131,1330,1332],{"class":133,"line":1331},30,[131,1333,1334],{"class":150},"        }\n",[131,1336,1338],{"class":133,"line":1337},31,[131,1339,812],{"class":150},[131,1341,1343,1345],{"class":133,"line":1342},32,[131,1344,210],{"class":144},[131,1346,1347],{"class":150}," num;\n",[131,1349,1351],{"class":133,"line":1350},33,[131,1352,225],{"class":150},[131,1354,1356],{"class":133,"line":1355},34,[131,1357,168],{"emptyLinePlaceholder":167},[131,1359,1361,1363,1365],{"class":133,"line":1360},35,[131,1362,191],{"class":144},[131,1364,508],{"class":184},[131,1366,511],{"class":150},[131,1368,1370],{"class":133,"line":1369},36,[131,1371,204],{"class":150},[131,1373,1375,1377,1379,1382,1384],{"class":133,"line":1374},37,[131,1376,520],{"class":144},[131,1378,147],{"class":144},[131,1380,1381],{"class":150}," primes[] ",[131,1383,154],{"class":144},[131,1385,1386],{"class":150}," {\n",[131,1388,1390,1393,1395,1398,1401],{"class":133,"line":1389},38,[131,1391,1392],{"class":184},"        get_nth_prime",[131,1394,188],{"class":150},[131,1396,1397],{"class":157},"1",[131,1399,1400],{"class":150},"),",[131,1402,1403],{"class":137},"  \u002F\u002F 2\n",[131,1405,1407,1409,1411,1413,1415],{"class":133,"line":1406},39,[131,1408,1392],{"class":184},[131,1410,188],{"class":150},[131,1412,1169],{"class":157},[131,1414,1400],{"class":150},[131,1416,1417],{"class":137},"  \u002F\u002F 3\n",[131,1419,1421,1423,1425,1428,1430],{"class":133,"line":1420},40,[131,1422,1392],{"class":184},[131,1424,188],{"class":150},[131,1426,1427],{"class":157},"3",[131,1429,1400],{"class":150},[131,1431,1432],{"class":137},"  \u002F\u002F 5\n",[131,1434,1436,1438,1440,1443,1445],{"class":133,"line":1435},41,[131,1437,1392],{"class":184},[131,1439,188],{"class":150},[131,1441,1442],{"class":157},"4",[131,1444,1400],{"class":150},[131,1446,1447],{"class":137},"  \u002F\u002F 7\n",[131,1449,1451,1453,1455,1457,1460],{"class":133,"line":1450},42,[131,1452,1392],{"class":184},[131,1454,188],{"class":150},[131,1456,255],{"class":157},[131,1458,1459],{"class":150},")",[131,1461,1462],{"class":137},"   \u002F\u002F 11\n",[131,1464,1466],{"class":133,"line":1465},43,[131,1467,1468],{"class":150},"    };\n",[131,1470,1472],{"class":133,"line":1471},44,[131,1473,168],{"emptyLinePlaceholder":167},[131,1475,1477,1479,1481,1483,1486],{"class":133,"line":1476},45,[131,1478,637],{"class":184},[131,1480,640],{"class":150},[131,1482,643],{"class":144},[131,1484,1485],{"class":496}," \"First 5 primes: \"",[131,1487,161],{"class":150},[131,1489,1491,1493,1495,1497],{"class":133,"line":1490},46,[131,1492,761],{"class":144},[131,1494,764],{"class":150},[131,1496,191],{"class":144},[131,1498,1499],{"class":150}," p : primes)\n",[131,1501,1503],{"class":133,"line":1502},47,[131,1504,796],{"class":150},[131,1506,1508,1511,1513,1515,1518,1520,1523],{"class":133,"line":1507},48,[131,1509,1510],{"class":184},"        std",[131,1512,640],{"class":150},[131,1514,643],{"class":144},[131,1516,1517],{"class":150}," p ",[131,1519,643],{"class":144},[131,1521,1522],{"class":496}," \" \"",[131,1524,161],{"class":150},[131,1526,1528],{"class":133,"line":1527},49,[131,1529,812],{"class":150},[131,1531,1533,1535,1537,1539,1541,1543,1545],{"class":133,"line":1532},50,[131,1534,637],{"class":184},[131,1536,640],{"class":150},[131,1538,643],{"class":144},[131,1540,656],{"class":496},[131,1542,659],{"class":157},[131,1544,662],{"class":496},[131,1546,161],{"class":150},[131,1548,1550],{"class":133,"line":1549},51,[131,1551,168],{"emptyLinePlaceholder":167},[131,1553,1555,1557,1559],{"class":133,"line":1554},52,[131,1556,210],{"class":144},[131,1558,676],{"class":157},[131,1560,161],{"class":150},[131,1562,1564],{"class":133,"line":1563},53,[131,1565,225],{"class":150},[16,1567,1568,689],{},[26,1569,688],{},[122,1571,1574],{"className":1572,"code":1573,"language":695},[693],"First 5 primes: 2 3 5 7 11 \n",[22,1575,1573],{"__ignoreMap":127},[480,1577,1579],{"id":1578},"示例-4c17-constexpr-lambda","示例 4：C++17 constexpr lambda",[122,1581,1583],{"className":124,"code":1582,"language":126,"meta":127,"style":127},"#include \u003Ciostream>\n\nint main()\n{\n    \u002F\u002F constexpr lambda：编译期可调用\n    constexpr auto square = [](int x) constexpr {\n        return x * x;\n    };\n\n    constexpr int result = square(5);  \u002F\u002F 编译期计算\n    std::cout \u003C\u003C \"square(5) = \" \u003C\u003C result \u003C\u003C \"\\n\";\n\n    \u002F\u002F constexpr lambda 也可运行时调用\n    int n = 7;\n    std::cout \u003C\u003C \"square(\" \u003C\u003C n \u003C\u003C \") = \" \u003C\u003C square(n) \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[22,1584,1585,1591,1595,1603,1607,1612,1638,1651,1655,1659,1679,1704,1708,1713,1726,1761,1765,1773],{"__ignoreMap":127},[131,1586,1587,1589],{"class":133,"line":134},[131,1588,493],{"class":144},[131,1590,497],{"class":496},[131,1592,1593],{"class":133,"line":141},[131,1594,168],{"emptyLinePlaceholder":167},[131,1596,1597,1599,1601],{"class":133,"line":164},[131,1598,191],{"class":144},[131,1600,508],{"class":184},[131,1602,511],{"class":150},[131,1604,1605],{"class":133,"line":171},[131,1606,204],{"class":150},[131,1608,1609],{"class":133,"line":177},[131,1610,1611],{"class":137},"    \u002F\u002F constexpr lambda：编译期可调用\n",[131,1613,1614,1616,1619,1622,1624,1627,1629,1632,1634,1636],{"class":133,"line":201},[131,1615,520],{"class":144},[131,1617,1618],{"class":144}," auto",[131,1620,1621],{"class":150}," square ",[131,1623,154],{"class":144},[131,1625,1626],{"class":150}," [](",[131,1628,191],{"class":144},[131,1630,1631],{"class":194}," x",[131,1633,1061],{"class":150},[131,1635,5],{"class":144},[131,1637,1386],{"class":150},[131,1639,1640,1643,1646,1648],{"class":133,"line":207},[131,1641,1642],{"class":144},"        return",[131,1644,1645],{"class":150}," x ",[131,1647,216],{"class":144},[131,1649,1650],{"class":150}," x;\n",[131,1652,1653],{"class":133,"line":222},[131,1654,1468],{"class":150},[131,1656,1657],{"class":133,"line":228},[131,1658,168],{"emptyLinePlaceholder":167},[131,1660,1661,1663,1665,1667,1669,1671,1673,1675,1677],{"class":133,"line":233},[131,1662,520],{"class":144},[131,1664,147],{"class":144},[131,1666,749],{"class":150},[131,1668,154],{"class":144},[131,1670,185],{"class":184},[131,1672,188],{"class":150},[131,1674,255],{"class":157},[131,1676,258],{"class":150},[131,1678,261],{"class":137},[131,1680,1681,1683,1685,1687,1690,1692,1694,1696,1698,1700,1702],{"class":133,"line":239},[131,1682,637],{"class":184},[131,1684,640],{"class":150},[131,1686,643],{"class":144},[131,1688,1689],{"class":496}," \"square(5) = \"",[131,1691,649],{"class":144},[131,1693,749],{"class":150},[131,1695,643],{"class":144},[131,1697,656],{"class":496},[131,1699,659],{"class":157},[131,1701,662],{"class":496},[131,1703,161],{"class":150},[131,1705,1706],{"class":133,"line":264},[131,1707,168],{"emptyLinePlaceholder":167},[131,1709,1710],{"class":133,"line":269},[131,1711,1712],{"class":137},"    \u002F\u002F constexpr lambda 也可运行时调用\n",[131,1714,1715,1717,1719,1721,1724],{"class":133,"line":275},[131,1716,540],{"class":144},[131,1718,213],{"class":150},[131,1720,154],{"class":144},[131,1722,1723],{"class":157}," 7",[131,1725,161],{"class":150},[131,1727,1728,1730,1732,1734,1737,1739,1741,1743,1745,1747,1749,1751,1753,1755,1757,1759],{"class":133,"line":293},[131,1729,637],{"class":184},[131,1731,640],{"class":150},[131,1733,643],{"class":144},[131,1735,1736],{"class":496}," \"square(\"",[131,1738,649],{"class":144},[131,1740,213],{"class":150},[131,1742,643],{"class":144},[131,1744,954],{"class":496},[131,1746,649],{"class":144},[131,1748,185],{"class":184},[131,1750,961],{"class":150},[131,1752,643],{"class":144},[131,1754,656],{"class":496},[131,1756,659],{"class":157},[131,1758,662],{"class":496},[131,1760,161],{"class":150},[131,1762,1763],{"class":133,"line":298},[131,1764,168],{"emptyLinePlaceholder":167},[131,1766,1767,1769,1771],{"class":133,"line":313},[131,1768,210],{"class":144},[131,1770,676],{"class":157},[131,1772,161],{"class":150},[131,1774,1775],{"class":133,"line":671},[131,1776,225],{"class":150},[16,1778,1779,689],{},[26,1780,688],{},[122,1782,1785],{"className":1783,"code":1784,"language":695},[693],"square(5) = 25\nsquare(7) = 49\n",[22,1786,1784],{"__ignoreMap":127},[480,1788,1790],{"id":1789},"示例-5在示例-4-基础上constexpr-可以运行期调用consteval-不行","示例 5：在示例 4 基础上，constexpr 可以运行期调用，consteval 不行",[122,1792,1794],{"className":124,"code":1793,"language":126,"meta":127,"style":127},"#include \u003Ciostream>\n\nconstexpr int square(int x)\n{\n    return x * x;\n}\n\nconsteval int compile_time_square(int x)\n{\n    return x * x;\n}\n\nint main()\n{\n    constexpr int a = square(5);              \u002F\u002F 编译期计算\n    int n = 7;\n    int b = square(n);                        \u002F\u002F 运行期调用，也允许\n\n    constexpr int c = compile_time_square(6); \u002F\u002F 必须编译期计算\n    \u002F\u002F int d = compile_time_square(n);        \u002F\u002F ❌ 编译错误：n 不是编译期常量\n\n    std::cout \u003C\u003C \"a = \" \u003C\u003C a \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"b = \" \u003C\u003C b \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"c = \" \u003C\u003C c \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[22,1795,1796,1802,1806,1822,1826,1836,1840,1844,1861,1865,1875,1879,1883,1891,1895,1917,1929,1946,1950,1973,1981,1985,2010,2035,2060,2064,2072],{"__ignoreMap":127},[131,1797,1798,1800],{"class":133,"line":134},[131,1799,493],{"class":144},[131,1801,497],{"class":496},[131,1803,1804],{"class":133,"line":141},[131,1805,168],{"emptyLinePlaceholder":167},[131,1807,1808,1810,1812,1814,1816,1818,1820],{"class":133,"line":164},[131,1809,5],{"class":144},[131,1811,147],{"class":144},[131,1813,185],{"class":184},[131,1815,188],{"class":150},[131,1817,191],{"class":144},[131,1819,1631],{"class":194},[131,1821,198],{"class":150},[131,1823,1824],{"class":133,"line":171},[131,1825,204],{"class":150},[131,1827,1828,1830,1832,1834],{"class":133,"line":177},[131,1829,210],{"class":144},[131,1831,1645],{"class":150},[131,1833,216],{"class":144},[131,1835,1650],{"class":150},[131,1837,1838],{"class":133,"line":201},[131,1839,225],{"class":150},[131,1841,1842],{"class":133,"line":207},[131,1843,168],{"emptyLinePlaceholder":167},[131,1845,1846,1848,1850,1853,1855,1857,1859],{"class":133,"line":222},[131,1847,92],{"class":144},[131,1849,147],{"class":144},[131,1851,1852],{"class":184}," compile_time_square",[131,1854,188],{"class":150},[131,1856,191],{"class":144},[131,1858,1631],{"class":194},[131,1860,198],{"class":150},[131,1862,1863],{"class":133,"line":228},[131,1864,204],{"class":150},[131,1866,1867,1869,1871,1873],{"class":133,"line":233},[131,1868,210],{"class":144},[131,1870,1645],{"class":150},[131,1872,216],{"class":144},[131,1874,1650],{"class":150},[131,1876,1877],{"class":133,"line":239},[131,1878,225],{"class":150},[131,1880,1881],{"class":133,"line":264},[131,1882,168],{"emptyLinePlaceholder":167},[131,1884,1885,1887,1889],{"class":133,"line":269},[131,1886,191],{"class":144},[131,1888,508],{"class":184},[131,1890,511],{"class":150},[131,1892,1893],{"class":133,"line":275},[131,1894,204],{"class":150},[131,1896,1897,1899,1901,1904,1906,1908,1910,1912,1914],{"class":133,"line":293},[131,1898,520],{"class":144},[131,1900,147],{"class":144},[131,1902,1903],{"class":150}," a ",[131,1905,154],{"class":144},[131,1907,185],{"class":184},[131,1909,188],{"class":150},[131,1911,255],{"class":157},[131,1913,258],{"class":150},[131,1915,1916],{"class":137},"              \u002F\u002F 编译期计算\n",[131,1918,1919,1921,1923,1925,1927],{"class":133,"line":298},[131,1920,540],{"class":144},[131,1922,213],{"class":150},[131,1924,154],{"class":144},[131,1926,1723],{"class":157},[131,1928,161],{"class":150},[131,1930,1931,1933,1936,1938,1940,1943],{"class":133,"line":313},[131,1932,540],{"class":144},[131,1934,1935],{"class":150}," b ",[131,1937,154],{"class":144},[131,1939,185],{"class":184},[131,1941,1942],{"class":150},"(n);",[131,1944,1945],{"class":137},"                        \u002F\u002F 运行期调用，也允许\n",[131,1947,1948],{"class":133,"line":671},[131,1949,168],{"emptyLinePlaceholder":167},[131,1951,1952,1954,1956,1959,1961,1963,1965,1968,1970],{"class":133,"line":681},[131,1953,520],{"class":144},[131,1955,147],{"class":144},[131,1957,1958],{"class":150}," c ",[131,1960,154],{"class":144},[131,1962,1852],{"class":184},[131,1964,188],{"class":150},[131,1966,1967],{"class":157},"6",[131,1969,258],{"class":150},[131,1971,1972],{"class":137}," \u002F\u002F 必须编译期计算\n",[131,1974,1975,1978],{"class":133,"line":896},[131,1976,1977],{"class":137},"    \u002F\u002F int d = compile_time_square(n);",[131,1979,1980],{"class":137},"        \u002F\u002F ❌ 编译错误：n 不是编译期常量\n",[131,1982,1983],{"class":133,"line":902},[131,1984,168],{"emptyLinePlaceholder":167},[131,1986,1987,1989,1991,1993,1996,1998,2000,2002,2004,2006,2008],{"class":133,"line":909},[131,1988,637],{"class":184},[131,1990,640],{"class":150},[131,1992,643],{"class":144},[131,1994,1995],{"class":496}," \"a = \"",[131,1997,649],{"class":144},[131,1999,1903],{"class":150},[131,2001,643],{"class":144},[131,2003,656],{"class":496},[131,2005,659],{"class":157},[131,2007,662],{"class":496},[131,2009,161],{"class":150},[131,2011,2012,2014,2016,2018,2021,2023,2025,2027,2029,2031,2033],{"class":133,"line":923},[131,2013,637],{"class":184},[131,2015,640],{"class":150},[131,2017,643],{"class":144},[131,2019,2020],{"class":496}," \"b = \"",[131,2022,649],{"class":144},[131,2024,1935],{"class":150},[131,2026,643],{"class":144},[131,2028,656],{"class":496},[131,2030,659],{"class":157},[131,2032,662],{"class":496},[131,2034,161],{"class":150},[131,2036,2037,2039,2041,2043,2046,2048,2050,2052,2054,2056,2058],{"class":133,"line":936},[131,2038,637],{"class":184},[131,2040,640],{"class":150},[131,2042,643],{"class":144},[131,2044,2045],{"class":496}," \"c = \"",[131,2047,649],{"class":144},[131,2049,1958],{"class":150},[131,2051,643],{"class":144},[131,2053,656],{"class":496},[131,2055,659],{"class":157},[131,2057,662],{"class":496},[131,2059,161],{"class":150},[131,2061,2062],{"class":133,"line":974},[131,2063,168],{"emptyLinePlaceholder":167},[131,2065,2066,2068,2070],{"class":133,"line":979},[131,2067,210],{"class":144},[131,2069,676],{"class":157},[131,2071,161],{"class":150},[131,2073,2074],{"class":133,"line":988},[131,2075,225],{"class":150},[16,2077,2078,689],{},[26,2079,688],{},[122,2081,2084],{"className":2082,"code":2083,"language":695},[693],"a = 25\nb = 49\nc = 36\n",[22,2085,2083],{"__ignoreMap":127},[12,2087,688],{"id":688},[16,2089,2090],{},"见上方每个示例的\"运行结果\"。",[12,2092,2093],{"id":2093},"示例中的关键语法解释",[39,2095,2096,2114],{},[42,2097,2098],{},[45,2099,2100,2102,2105,2108,2111],{},[48,2101,384],{"align":50},[48,2103,2104],{"align":50},"讲了什么",[48,2106,2107],{"align":50},"新出现的语法",[48,2109,2110],{"align":50},"为什么这样写",[48,2112,2113],{"align":50},"注意事项",[56,2115,2116,2136,2153,2172,2190],{},[45,2117,2118,2121,2124,2130,2133],{},[61,2119,2120],{"align":50},"示例 1",[61,2122,2123],{"align":50},"constexpr vs const",[61,2125,2126,2129],{"align":50},[22,2127,2128],{},"constexpr int size = 10;","、数组大小",[61,2131,2132],{"align":50},"constexpr 必须编译期初始化，可以用作数组大小",[61,2134,2135],{"align":50},"const 可以在运行时初始化，不保证编译期",[45,2137,2138,2141,2144,2147,2150],{},[61,2139,2140],{"align":50},"示例 2",[61,2142,2143],{"align":50},"constexpr 函数",[61,2145,2146],{"align":50},"循环在 constexpr 函数中",[61,2148,2149],{"align":50},"同一个函数可编译期调用也可运行时调用",[61,2151,2152],{"align":50},"编译期调用时所有参数也必须是编译期常量",[45,2154,2155,2158,2161,2166,2169],{},[61,2156,2157],{"align":50},"示例 3",[61,2159,2160],{"align":50},"constexpr 用于 static_assert",[61,2162,2163],{"align":50},[22,2164,2165],{},"static_assert()",[61,2167,2168],{"align":50},"编译期检查，不通过直接编译失败",[61,2170,2171],{"align":50},"static_assert 的参数必须是编译期常量",[45,2173,2174,2177,2179,2184,2187],{},[61,2175,2176],{"align":50},"示例 4",[61,2178,82],{"align":50},[61,2180,2181],{"align":50},[22,2182,2183],{},"constexpr auto f = [](int x) constexpr {...};",[61,2185,2186],{"align":50},"lambda 也能编译期求值",[61,2188,2189],{"align":50},"C++17 起支持，两个 constexpr 都要写",[45,2191,2192,2195,2198,2202,2205],{},[61,2193,2194],{"align":50},"示例 5",[61,2196,2197],{"align":50},"constexpr vs consteval",[61,2199,2200],{"align":50},[22,2201,92],{},[61,2203,2204],{"align":50},"consteval 函数只能编译期调用",[61,2206,2207],{"align":50},"C++20 才有 consteval",[12,2209,2210],{"id":2210},"常见错误",[16,2212,2213],{},[26,2214,2215],{},"错误 1：把运行时变量赋给 constexpr",[122,2217,2219],{"className":124,"code":2218,"language":126,"meta":127,"style":127},"int n = 5;\nconstexpr int x = n;  \u002F\u002F ❌ n 不是编译期常量\n",[22,2220,2221,2233],{"__ignoreMap":127},[131,2222,2223,2225,2227,2229,2231],{"class":133,"line":134},[131,2224,191],{"class":144},[131,2226,213],{"class":150},[131,2228,154],{"class":144},[131,2230,593],{"class":157},[131,2232,161],{"class":150},[131,2234,2235,2237,2239,2241,2243,2245],{"class":133,"line":141},[131,2236,5],{"class":144},[131,2238,147],{"class":144},[131,2240,1645],{"class":150},[131,2242,154],{"class":144},[131,2244,617],{"class":150},[131,2246,2247],{"class":137},"  \u002F\u002F ❌ n 不是编译期常量\n",[16,2249,2250,2251,2254],{},"正确做法：",[22,2252,2253],{},"const int x = n;","（用 const 而不是 constexpr）。",[16,2256,2257],{},[26,2258,2259],{},"错误 2：constexpr 函数假设所有情况都能编译期求值",[122,2261,2263],{"className":124,"code":2262,"language":126,"meta":127,"style":127},"constexpr int divide(int a, int b)\n{\n    return a \u002F b;  \u002F\u002F 编译期 b=0 会导致编译错误\n}\nconstexpr int x = divide(10, 0);  \u002F\u002F ❌ 编译错误！\n",[22,2264,2265,2291,2295,2310,2314],{"__ignoreMap":127},[131,2266,2267,2269,2271,2274,2276,2278,2281,2284,2286,2289],{"class":133,"line":134},[131,2268,5],{"class":144},[131,2270,147],{"class":144},[131,2272,2273],{"class":184}," divide",[131,2275,188],{"class":150},[131,2277,191],{"class":144},[131,2279,2280],{"class":194}," a",[131,2282,2283],{"class":150},", ",[131,2285,191],{"class":144},[131,2287,2288],{"class":194}," b",[131,2290,198],{"class":150},[131,2292,2293],{"class":133,"line":141},[131,2294,204],{"class":150},[131,2296,2297,2299,2301,2304,2307],{"class":133,"line":164},[131,2298,210],{"class":144},[131,2300,1903],{"class":150},[131,2302,2303],{"class":144},"\u002F",[131,2305,2306],{"class":150}," b;",[131,2308,2309],{"class":137},"  \u002F\u002F 编译期 b=0 会导致编译错误\n",[131,2311,2312],{"class":133,"line":171},[131,2313,225],{"class":150},[131,2315,2316,2318,2320,2322,2324,2326,2328,2331,2333,2336,2338],{"class":133,"line":177},[131,2317,5],{"class":144},[131,2319,147],{"class":144},[131,2321,1645],{"class":150},[131,2323,154],{"class":144},[131,2325,2273],{"class":184},[131,2327,188],{"class":150},[131,2329,2330],{"class":157},"10",[131,2332,2283],{"class":150},[131,2334,2335],{"class":157},"0",[131,2337,258],{"class":150},[131,2339,2340],{"class":137},"  \u002F\u002F ❌ 编译错误！\n",[16,2342,2343],{},"正确做法：编译期调用时注意参数合法性。",[16,2345,2346],{},[26,2347,2348],{},"错误 3：constexpr 函数内部有未定义行为",[122,2350,2352],{"className":124,"code":2351,"language":126,"meta":127,"style":127},"constexpr int get(int* p)\n{\n    return *p;  \u002F\u002F 编译期不能解引用空指针\n}\nconstexpr int x = get(nullptr);  \u002F\u002F ❌ 编译错误！\n",[22,2353,2354,2373,2377,2390,2394],{"__ignoreMap":127},[131,2355,2356,2358,2360,2363,2365,2368,2371],{"class":133,"line":134},[131,2357,5],{"class":144},[131,2359,147],{"class":144},[131,2361,2362],{"class":184}," get",[131,2364,188],{"class":150},[131,2366,2367],{"class":144},"int*",[131,2369,2370],{"class":194}," p",[131,2372,198],{"class":150},[131,2374,2375],{"class":133,"line":141},[131,2376,204],{"class":150},[131,2378,2379,2381,2384,2387],{"class":133,"line":164},[131,2380,210],{"class":144},[131,2382,2383],{"class":144}," *",[131,2385,2386],{"class":150},"p;",[131,2388,2389],{"class":137},"  \u002F\u002F 编译期不能解引用空指针\n",[131,2391,2392],{"class":133,"line":171},[131,2393,225],{"class":150},[131,2395,2396,2398,2400,2402,2404,2406,2408,2411,2413],{"class":133,"line":177},[131,2397,5],{"class":144},[131,2399,147],{"class":144},[131,2401,1645],{"class":150},[131,2403,154],{"class":144},[131,2405,2362],{"class":184},[131,2407,188],{"class":150},[131,2409,2410],{"class":157},"nullptr",[131,2412,258],{"class":150},[131,2414,2340],{"class":137},[16,2416,2417],{},"正确做法：constexpr 函数中避免未定义行为。",[16,2419,2420],{},[26,2421,2422],{},"错误 4：以为 constexpr 函数一定在编译期执行",[122,2424,2426],{"className":124,"code":2425,"language":126,"meta":127,"style":127},"constexpr int square(int x) { return x * x; }\n\nint n = 5;\nint y = square(n);  \u002F\u002F ✅ 这是运行期调用，不是编译期调用\n",[22,2427,2428,2454,2458,2470],{"__ignoreMap":127},[131,2429,2430,2432,2434,2436,2438,2440,2442,2445,2447,2449,2451],{"class":133,"line":134},[131,2431,5],{"class":144},[131,2433,147],{"class":144},[131,2435,185],{"class":184},[131,2437,188],{"class":150},[131,2439,191],{"class":144},[131,2441,1631],{"class":194},[131,2443,2444],{"class":150},") { ",[131,2446,1064],{"class":144},[131,2448,1645],{"class":150},[131,2450,216],{"class":144},[131,2452,2453],{"class":150}," x; }\n",[131,2455,2456],{"class":133,"line":141},[131,2457,168],{"emptyLinePlaceholder":167},[131,2459,2460,2462,2464,2466,2468],{"class":133,"line":164},[131,2461,191],{"class":144},[131,2463,213],{"class":150},[131,2465,154],{"class":144},[131,2467,593],{"class":157},[131,2469,161],{"class":150},[131,2471,2472,2474,2477,2479,2481,2483],{"class":133,"line":171},[131,2473,191],{"class":144},[131,2475,2476],{"class":150}," y ",[131,2478,154],{"class":144},[131,2480,185],{"class":184},[131,2482,1942],{"class":150},[131,2484,2485],{"class":137},"  \u002F\u002F ✅ 这是运行期调用，不是编译期调用\n",[16,2487,2488,2489,2491,2492,2494,2495,2497],{},"正确做法：需要强制编译期时，把结果放进 ",[22,2490,5],{}," 变量、",[22,2493,1159],{},"、模板参数中；C++20 起也可以使用 ",[22,2496,92],{}," 函数。",[12,2499,2500],{"id":2500},"使用建议",[2502,2503,2504,2511,2517,2526,2532],"ol",{},[2505,2506,2507,2510],"li",{},[26,2508,2509],{},"能用 constexpr 表达的就用 constexpr","：把运行时计算移到编译期，程序性能更好。",[2505,2512,2513,2516],{},[26,2514,2515],{},"constexpr 函数既编译期又运行期","：不必写两份代码。",[2505,2518,2519,2525],{},[26,2520,2521,2522,2524],{},"用 ",[22,2523,1159],{}," 做编译期检查","：配合 constexpr 函数非常强大。",[2505,2527,2528,2531],{},[26,2529,2530],{},"constexpr 不是\"更快\"的魔法","：对于小函数，编译器本来就会优化。但对于常量表、预计算等场景很有用。",[2505,2533,2534,2537],{},[26,2535,2536],{},"需要\"必须编译期\"才考虑 consteval","：普通工具函数优先写 constexpr，限制更少。",[12,2539,2540],{"id":2540},"小结",[2542,2543,2544,2549,2554,2562,2570,2575],"ul",{},[2505,2545,2546,2548],{},[22,2547,5],{}," 变量必须在编译期确定，可以用作数组大小、模板参数等。",[2505,2550,2551,2553],{},[22,2552,5],{}," 函数可以在编译期执行（参数也都是 constexpr 时）。",[2505,2555,2556,2558,2559,2561],{},[22,2557,5],{}," 函数也可以运行期调用；",[22,2560,92],{}," 才是必须编译期调用。",[2505,2563,2564,2566,2567,2569],{},[22,2565,331],{}," 强调\"不可修改\"，",[22,2568,5],{}," 强调\"编译期求值\"。",[2505,2571,2572,2573,411],{},"C++17 起 lambda 可以用 ",[22,2574,5],{},[2505,2576,2577,2579],{},[22,2578,1159],{}," + constexpr 函数 = 编译期安全网。",[2581,2582,2583],"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 .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .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":127,"searchDepth":141,"depth":141,"links":2585},[2586,2587,2588,2589,2590,2591,2592,2593,2600,2601,2602,2603,2604],{"id":14,"depth":141,"text":14},{"id":32,"depth":141,"text":32},{"id":104,"depth":141,"text":105},{"id":111,"depth":141,"text":111},{"id":120,"depth":141,"text":120},{"id":318,"depth":141,"text":319},{"id":397,"depth":141,"text":398},{"id":478,"depth":141,"text":478,"children":2594},[2595,2596,2597,2598,2599],{"id":482,"depth":164,"text":483},{"id":700,"depth":164,"text":701},{"id":1003,"depth":164,"text":1004},{"id":1578,"depth":164,"text":1579},{"id":1789,"depth":164,"text":1790},{"id":688,"depth":141,"text":688},{"id":2093,"depth":141,"text":2093},{"id":2210,"depth":141,"text":2210},{"id":2500,"depth":141,"text":2500},{"id":2540,"depth":141,"text":2540},"2000-0700","2023-10-05","2023-10-05-cplusplus-jiao-xue","\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md",false,{},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr",{"title":5,"description":127},"wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","M6nKjp87u1Cz9FRh4eeBff5dpL9rBIhAZQVepTR1Ijw",[2618,2625,2631,2637,2643,2649,2655,2661,2667,2673,2679,2685,2691,2697,2703,2709,2715,2721,2727,2733,2739,2745,2751,2757,2763,2769,2775,2781,2787,2793,2799,2805,2811,2817,2823,2829,2835,2841,2847,2853,2859,2864,2870,2876,2882,2888,2890,2896,2902,2908,2914,2920,2926,2932,2938,2944,2950,2956,2962,2968,2974,2980,2986,2992,2998,3004,3010,3016,3022,3028,3034,3040,3046,3052,3058,3064,3070,3076,3082,3088,3094,3100,3106,3112,3118,3124,3130,3136,3142,3148,3154,3160],{"path":2619,"stem":2620,"title":2621,"authors":2622,"date":2606,"chapterOrder":2623,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F0100-C++开发环境搭建与测试","C++开发环境搭建与测试",[7],"0100",0,{"path":2626,"stem":2627,"title":2628,"authors":2629,"date":2606,"chapterOrder":2630,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++基础初识",[7],"0200",{"path":2632,"stem":2633,"title":2634,"authors":2635,"date":2606,"chapterOrder":2636,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0300-shu-ju-lei-xing-yu-shu-ju-cun-fang","wiki\u002F2023-10-05-Cplusplus教学\u002F0300-数据类型与数据存放","数据类型与数据存放",[7],"0300",{"path":2638,"stem":2639,"title":2640,"authors":2641,"date":2606,"chapterOrder":2642,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","wiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","输入输出",[7],"0400",{"path":2644,"stem":2645,"title":2646,"authors":2647,"date":2606,"chapterOrder":2648,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","wiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","运算符",[7],"0500",{"path":2650,"stem":2651,"title":2652,"authors":2653,"date":2606,"chapterOrder":2654,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","wiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","程序流程结构",[7],"0600",{"path":2656,"stem":2657,"title":2658,"authors":2659,"date":2606,"chapterOrder":2660,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","wiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","数组",[7],"0700",{"path":2662,"stem":2663,"title":2664,"authors":2665,"date":2606,"chapterOrder":2666,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","函数与头文件",[7],"0800",{"path":2668,"stem":2669,"title":2670,"authors":2671,"date":2606,"chapterOrder":2672,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","指针",[7],"0900",{"path":2674,"stem":2675,"title":2676,"authors":2677,"date":2606,"chapterOrder":2678,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","wiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","结构体与共用体",[7],"1000",{"path":2680,"stem":2681,"title":2682,"authors":2683,"date":2606,"chapterOrder":2684,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1100-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1100-内存分区与生命周期","内存分区与生命周期",[7],"1100",{"path":2686,"stem":2687,"title":2688,"authors":2689,"date":2606,"chapterOrder":2690,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","wiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","引用",[7],"1200",{"path":2692,"stem":2693,"title":2694,"authors":2695,"date":2606,"chapterOrder":2696,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao","wiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高","函数提高",[7],"1300",{"path":2698,"stem":2699,"title":2700,"authors":2701,"date":2606,"chapterOrder":2702,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1350-ming-ming-kong-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F1350-命名空间","命名空间",[7],"1350",{"path":2704,"stem":2705,"title":2706,"authors":2707,"date":2606,"chapterOrder":2708,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","封装",[7],"1400-0100",{"path":2710,"stem":2711,"title":2712,"authors":2713,"date":2606,"chapterOrder":2714,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0200-dui-xiang-chu-shi-hua-he-qing-li","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0200-对象初始化和清理","对象初始化和清理",[7],"1400-0200",{"path":2716,"stem":2717,"title":2718,"authors":2719,"date":2606,"chapterOrder":2720,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0300-dui-xiang-mo-xing-yu-this-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0300-对象模型与this指针","对象模型与this指针",[7],"1400-0300",{"path":2722,"stem":2723,"title":2724,"authors":2725,"date":2606,"chapterOrder":2726,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0400-you-yuan-yu-yun-suan-fu-zhong-zai","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0400-友元与运算符重载","友元与运算符重载",[7],"1400-0400",{"path":2728,"stem":2729,"title":2730,"authors":2731,"date":2606,"chapterOrder":2732,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","继承",[7],"1400-0500",{"path":2734,"stem":2735,"title":2736,"authors":2737,"date":2606,"chapterOrder":2738,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","多态",[7],"1400-0600",{"path":2740,"stem":2741,"title":2742,"authors":2743,"date":2606,"chapterOrder":2744,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","类和对象",[7],"1400",{"path":2746,"stem":2747,"title":2748,"authors":2749,"date":2606,"chapterOrder":2750,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1450-han-shu-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F1450-函数指针","函数指针",[7],"1450",{"path":2752,"stem":2753,"title":2754,"authors":2755,"date":2606,"chapterOrder":2756,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","wiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","文件操作",[7],"1500",{"path":2758,"stem":2759,"title":2760,"authors":2761,"date":2606,"chapterOrder":2762,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","wiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","异常处理",[7],"1600",{"path":2764,"stem":2765,"title":2766,"authors":2767,"date":2606,"chapterOrder":2768,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","模板",[7],"1700",{"path":2770,"stem":2771,"title":2772,"authors":2773,"date":2606,"chapterOrder":2774,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","STL初识",[7],"1800-0100",{"path":2776,"stem":2777,"title":2778,"authors":2779,"date":2606,"chapterOrder":2780,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0200-std-array","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0200-std-array","std::array",[7],"1800-0200",{"path":2782,"stem":2783,"title":2784,"authors":2785,"date":2606,"chapterOrder":2786,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string容器",[7],"1800-0300",{"path":2788,"stem":2789,"title":2790,"authors":2791,"date":2606,"chapterOrder":2792,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector容器","vector 容器",[7],"1800-0400",{"path":2794,"stem":2795,"title":2796,"authors":2797,"date":2606,"chapterOrder":2798,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-deque-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-deque容器","deque 容器",[7],"1800-0500",{"path":2800,"stem":2801,"title":2802,"authors":2803,"date":2606,"chapterOrder":2804,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-stack-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-stack容器","stack 容器",[7],"1800-0600",{"path":2806,"stem":2807,"title":2808,"authors":2809,"date":2606,"chapterOrder":2810,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-queue-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-queue容器","queue 容器",[7],"1800-0700",{"path":2812,"stem":2813,"title":2814,"authors":2815,"date":2606,"chapterOrder":2816,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-list-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-list容器","list 容器",[7],"1800-0800",{"path":2818,"stem":2819,"title":2820,"authors":2821,"date":2606,"chapterOrder":2822,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0900-set-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0900-set容器","set \u002F multiset 容器",[7],"1800-0900",{"path":2824,"stem":2825,"title":2826,"authors":2827,"date":2606,"chapterOrder":2828,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1000-map-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-1000-map容器","map \u002F multimap 容器",[7],"1800-1000",{"path":2830,"stem":2831,"title":2832,"authors":2833,"date":2606,"chapterOrder":2834,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1100-han-shu-dui-xiang-yu-wei-ci","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-1100-函数对象与谓词","函数对象与谓词",[7],"1800-1100",{"path":2836,"stem":2837,"title":2838,"authors":2839,"date":2606,"chapterOrder":2840,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1200-chang-yong-suan-fa","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-1200-常用算法","常用算法",[7],"1800-1200",{"path":2842,"stem":2843,"title":2844,"authors":2845,"date":2606,"chapterOrder":2846,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","STL提高编程",[7],"1800",{"path":2848,"stem":2849,"title":2850,"authors":2851,"date":2606,"chapterOrder":2852,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","wiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++类型转换",[7],"1900",{"path":2854,"stem":2855,"title":2856,"authors":2857,"date":2606,"chapterOrder":2858,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","auto",[7],"2000-0100",{"path":2860,"stem":2861,"title":2410,"authors":2862,"date":2606,"chapterOrder":2863,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr",[7],"2000-0200",{"path":2865,"stem":2866,"title":2867,"authors":2868,"date":2606,"chapterOrder":2869,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","using",[7],"2000-0300",{"path":2871,"stem":2872,"title":2873,"authors":2874,"date":2606,"chapterOrder":2875,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0400-enum-class","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0400-enum-class","enum class",[7],"2000-0400",{"path":2877,"stem":2878,"title":2879,"authors":2880,"date":2606,"chapterOrder":2881,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0500-fan-wei-for-xun-huan","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0500-范围for循环","范围 for 循环",[7],"2000-0500",{"path":2883,"stem":2884,"title":2885,"authors":2886,"date":2606,"chapterOrder":2887,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","结构化绑定",[7],"2000-0600",{"path":2613,"stem":2615,"title":5,"authors":2889,"date":2606,"chapterOrder":2605,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},[7],{"path":2891,"stem":2892,"title":2893,"authors":2894,"date":2606,"chapterOrder":2895,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII",[7],"2000-0800",{"path":2897,"stem":2898,"title":2899,"authors":2900,"date":2606,"chapterOrder":2901,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","智能指针",[7],"2000-0900",{"path":2903,"stem":2904,"title":2905,"authors":2906,"date":2606,"chapterOrder":2907,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义","右值引用和移动语义",[7],"2000-1000",{"path":2909,"stem":2910,"title":2911,"authors":2912,"date":2606,"chapterOrder":2913,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","Lambda 表达式",[7],"2000-1100",{"path":2915,"stem":2916,"title":2917,"authors":2918,"date":2606,"chapterOrder":2919,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","std::function",[7],"2000-1200",{"path":2921,"stem":2922,"title":2923,"authors":2924,"date":2606,"chapterOrder":2925,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","std::bind",[7],"2000-1300",{"path":2927,"stem":2928,"title":2929,"authors":2930,"date":2606,"chapterOrder":2931,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional","std::optional",[7],"2000-1400",{"path":2933,"stem":2934,"title":2935,"authors":2936,"date":2606,"chapterOrder":2937,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1500-std-variant","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1500-std-variant","std::variant",[7],"2000-1500",{"path":2939,"stem":2940,"title":2941,"authors":2942,"date":2606,"chapterOrder":2943,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1600-std-span","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1600-std-span","std::span",[7],"2000-1600",{"path":2945,"stem":2946,"title":2947,"authors":2948,"date":2606,"chapterOrder":2949,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1700-std-format-print","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1700-std-format-print","std::format \u002F std::print",[7],"2000-1700",{"path":2951,"stem":2952,"title":2953,"authors":2954,"date":2606,"chapterOrder":2955,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1800-std-chrono","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1800-std-chrono","std::chrono",[7],"2000-1800",{"path":2957,"stem":2958,"title":2959,"authors":2960,"date":2606,"chapterOrder":2961,"chapterDepth":141,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0100-bing-fa-shi-shen-me","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0100-并发是什么","并发是什么",[7],"2000-1900-0100",{"path":2963,"stem":2964,"title":2965,"authors":2966,"date":2606,"chapterOrder":2967,"chapterDepth":141,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-bing-xing-shi-shen-me","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-并行是什么","并行是什么",[7],"2000-1900-0200",{"path":2969,"stem":2970,"title":2971,"authors":2972,"date":2606,"chapterOrder":2973,"chapterDepth":141,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0300-xie-cheng-shi-shen-me","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0300-协程是什么","协程是什么",[7],"2000-1900-0300",{"path":2975,"stem":2976,"title":2977,"authors":2978,"date":2606,"chapterOrder":2979,"chapterDepth":141,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1000-bing-fa-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1000-并发编程","并发编程",[7],"2000-1900-1000",{"path":2981,"stem":2982,"title":2983,"authors":2984,"date":2606,"chapterOrder":2985,"chapterDepth":141,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1100-std-thread","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1100-std-thread","std::thread",[7],"2000-1900-1100",{"path":2987,"stem":2988,"title":2989,"authors":2990,"date":2606,"chapterOrder":2991,"chapterDepth":141,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1200-mutex-lock-guard","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1200-mutex-lock-guard","mutex 与 RAII 锁",[7],"2000-1900-1200",{"path":2993,"stem":2994,"title":2995,"authors":2996,"date":2606,"chapterOrder":2997,"chapterDepth":141,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1300-std-atomic","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1300-std-atomic","std::atomic",[7],"2000-1900-1300",{"path":2999,"stem":3000,"title":3001,"authors":3002,"date":2606,"chapterOrder":3003,"chapterDepth":141,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1400-condition-variable","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1400-condition-variable","condition_variable",[7],"2000-1900-1400",{"path":3005,"stem":3006,"title":3007,"authors":3008,"date":2606,"chapterOrder":3009,"chapterDepth":141,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1500-future-async-promise","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1500-future-async-promise","future、async、promise 与 packaged_task",[7],"2000-1900-1500",{"path":3011,"stem":3012,"title":3013,"authors":3014,"date":2606,"chapterOrder":3015,"chapterDepth":141,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1600-jthread-stop-token","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1600-jthread-stop-token","jthread 与 stop_token",[7],"2000-1900-1600",{"path":3017,"stem":3018,"title":3019,"authors":3020,"date":2606,"chapterOrder":3021,"chapterDepth":141,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1700-semaphore-latch-barrier","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1700-semaphore-latch-barrier","semaphore、latch 与 barrier",[7],"2000-1900-1700",{"path":3023,"stem":3024,"title":3025,"authors":3026,"date":2606,"chapterOrder":3027,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bing-xing-yu-xie-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发并行与协程","并发、并行与协程",[7],"2000-1900",{"path":3029,"stem":3030,"title":3031,"authors":3032,"date":2606,"chapterOrder":3033,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2000-std-filesystem","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-2000-std-filesystem","std::filesystem",[7],"2000-2000",{"path":3035,"stem":3036,"title":3037,"authors":3038,"date":2606,"chapterOrder":3039,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","modules 简介",[7],"2000-2100",{"path":3041,"stem":3042,"title":3043,"authors":3044,"date":2606,"chapterOrder":3045,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","现代C++",[7],"2000",{"path":3047,"stem":3048,"title":3049,"authors":3050,"date":2606,"chapterOrder":3051,"chapterDepth":141,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0100-ding-shi-qi-yu-yi-bu-io","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0100-定时器与异步IO","定时器与异步 IO",[7],"2100-0100-0100",{"path":3053,"stem":3054,"title":3055,"authors":3056,"date":2606,"chapterOrder":3057,"chapterDepth":141,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0200-boost-asio-ji-chu","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0200-Boost.Asio基础","Boost.Asio 基础",[7],"2100-0100-0200",{"path":3059,"stem":3060,"title":3061,"authors":3062,"date":2606,"chapterOrder":3063,"chapterDepth":141,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0300-chuan-kou-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0300-串口通信","串口通信教学",[7],"2100-0100-0300",{"path":3065,"stem":3066,"title":3067,"authors":3068,"date":2606,"chapterOrder":3069,"chapterDepth":141,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0350-chuan-kou-tong-xin-chuan-kou-bao-xie-yi-shi-li","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0350-串口通信串口包协议实例","串口通信串口包协议实例",[7],"2100-0100-0350",{"path":3071,"stem":3072,"title":3073,"authors":3074,"date":2606,"chapterOrder":3075,"chapterDepth":141,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0400-tcp-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0400-TCP通信","TCP 通信",[7],"2100-0100-0400",{"path":3077,"stem":3078,"title":3079,"authors":3080,"date":2606,"chapterOrder":3081,"chapterDepth":141,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0500-udp-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0500-UDP通信","UDP 通信",[7],"2100-0100-0500",{"path":3083,"stem":3084,"title":3085,"authors":3086,"date":2606,"chapterOrder":3087,"chapterDepth":141,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0600-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0600-机器人工程写法与ROS2集成","机器人工程写法与 ROS2 集成",[7],"2100-0100-0600",{"path":3089,"stem":3090,"title":3091,"authors":3092,"date":2606,"chapterOrder":3093,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","Boost.Asio异步IO库",[7],"2100-0100",{"path":3095,"stem":3096,"title":3097,"authors":3098,"date":2606,"chapterOrder":3099,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0200-eigen-xian-xing-dai-shu-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0200-Eigen线性代数库","Eigen线性代数库",[7],"2100-0200",{"path":3101,"stem":3102,"title":3103,"authors":3104,"date":2606,"chapterOrder":3105,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0300-opencv-ji-suan-ji-shi-jue-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0300-OpenCV计算机视觉库","OpenCV计算机视觉库",[7],"2100-0300",{"path":3107,"stem":3108,"title":3109,"authors":3110,"date":2606,"chapterOrder":3111,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0400-pcl-dian-yun-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0400-PCL点云库","PCL点云库",[7],"2100-0400",{"path":3113,"stem":3114,"title":3115,"authors":3116,"date":2606,"chapterOrder":3117,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0500-sophus-li-qun-li-dai-shu-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0500-Sophus李群李代数库","Sophus 李群李代数库",[7],"2100-0500",{"path":3119,"stem":3120,"title":3121,"authors":3122,"date":2606,"chapterOrder":3123,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","常用库学习",[7],"2100",{"path":3125,"stem":3126,"title":3127,"authors":3128,"date":2606,"chapterOrder":3129,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0100-cmakepresets-yu-gou-jian-an-zhuang","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0100-CMakePresets与构建安装","CMakePresets与构建安装",[7],"2200-0100",{"path":3131,"stem":3132,"title":3133,"authors":3134,"date":2606,"chapterOrder":3135,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项","顶层CMake与公共编译选项",[7],"2200-0200",{"path":3137,"stem":3138,"title":3139,"authors":3140,"date":2606,"chapterOrder":3141,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0300-src-yu-lib-mo-kuai-cmake-xiang-jie","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0300-src与lib模块CMake详解","src与lib模块CMake详解",[7],"2200-0300",{"path":3143,"stem":3144,"title":3145,"authors":3146,"date":2606,"chapterOrder":3147,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法","第三方库依赖写法",[7],"2200-0400",{"path":3149,"stem":3150,"title":3151,"authors":3152,"date":2606,"chapterOrder":3153,"chapterDepth":134,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0500-mu-ban-kuo-zhan-yu-chang-jian-wen-ti","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0500-模板扩展与常见问题","模板扩展与常见问题",[7],"2200-0500",{"path":3155,"stem":3156,"title":3157,"authors":3158,"date":2606,"chapterOrder":3159,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":2611},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake工程模板",[7],"2200",{"path":2608,"stem":3161,"title":3162,"authors":3163,"date":2606,"chapterOrder":3164,"chapterDepth":2624,"docKey":2607,"docRoot":2608,"docTitle":2609,"isWikiDoc":167,"isWikiIndex":167},"wiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++教程",[7],null,[3166,3168,3171,3174],{"name":7,"image":3167},"\u002Fimages\u002Fmember_photo\u002F董佳辉.jpg",{"name":3169,"image":3170},"宫金良","\u002Fimages\u002Fmember_photo\u002F宫金良.jpg",{"name":3172,"image":3173},"巩丽","\u002Fimages\u002Fmember_photo\u002F巩丽.png",{"name":3175,"image":3176},"张彦斐","\u002Fimages\u002Fmember_photo\u002F张彦斐.jpg",1792431898230]