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