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