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