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