[{"data":1,"prerenderedAt":4448},["ShallowReactive",2],{"wiki-page-\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi":3,"wiki-doc-items-\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi":4028,"language-switcher-data-\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi":4432,"wiki-i18n-paths-\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi":4447},{"id":4,"title":5,"body":6,"canonicalPath":4010,"chapterDepth":31,"chapterOrder":4011,"date":4012,"description":23,"docI18nKey":4013,"docKey":4014,"docRoot":4015,"docTitle":4016,"extension":4017,"i18nKey":4018,"isBlogPost":4019,"isWikiDoc":268,"isWikiIndex":4019,"layout":4020,"legacyPath":4020,"locale":4021,"localeSlug":4022,"meta":4023,"navigation":268,"path":4010,"seo":4024,"sourcePath":4025,"sourceStem":4018,"stem":4026,"wikiDepth":31,"__hash__":4027},"content\u002F_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义.md","右值引用和移動語義",{"type":7,"value":8,"toc":3988},"minimark",[9,13,17,115,123,126,182,186,189,192,209,212,335,339,437,440,445,775,781,789,793,1436,1440,1446,1457,1460,1484,1490,1497,1506,1568,1571,1615,1618,1637,1640,1657,1664,1722,1725,1779,1787,1823,1826,1835,1853,1859,1867,1870,1929,1932,1948,1959,1966,1976,1979,1999,2004,2025,2028,2088,2091,2097,2100,2115,2118,2122,2125,2139,2142,2202,2205,2219,2222,2228,2231,2234,2237,2252,2255,2282,2285,2291,2294,2306,2309,2316,2322,2325,2338,2349,2357,2363,2399,2408,2423,2443,2446,2449,2480,2483,2486,2489,2582,2585,2653,2656,2661,2664,2763,2766,2769,2800,2810,2812,2861,2864,2887,2893,2913,2916,2926,2947,2951,3374,3378,3384,3386,3389,3392,3480,3484,3496,3548,3562,3566,3647,3650,3655,3728,3731,3736,3792,3795,3800,3864,3871,3876,3897,3904,3907,3950,3953,3978,3981,3984],[10,11,12],"h2",{"id":12},"本節解決什麼問題",[14,15,16],"p",{},"考慮這樣的場景：",[18,19,24],"pre",{"className":20,"code":21,"language":22,"meta":23,"style":23},"language-cpp shiki shiki-themes github-light github-dark","std::vector\u003Cint> create_large_vector()\n{\n    std::vector\u003Cint> v(1000000);\n    \u002F\u002F ... 填充数据 ...\n    return v;  \u002F\u002F C++98 中会拷贝整个 vector！（非常慢）\n}\n","cpp","",[25,26,27,59,65,90,97,109],"code",{"__ignoreMap":23},[28,29,32,36,40,43,46,50,53,56],"span",{"class":30,"line":31},"line",1,[28,33,35],{"class":34},"sScJk","std",[28,37,39],{"class":38},"sVt8B","::",[28,41,42],{"class":34},"vector",[28,44,45],{"class":38},"\u003C",[28,47,49],{"class":48},"szBVR","int",[28,51,52],{"class":38},"> ",[28,54,55],{"class":34},"create_large_vector",[28,57,58],{"class":38},"()\n",[28,60,62],{"class":30,"line":61},2,[28,63,64],{"class":38},"{\n",[28,66,68,71,74,77,80,83,87],{"class":30,"line":67},3,[28,69,70],{"class":34},"    std",[28,72,73],{"class":38},"::vector",[28,75,76],{"class":48},"\u003Cint>",[28,78,79],{"class":34}," v",[28,81,82],{"class":38},"(",[28,84,86],{"class":85},"sj4cs","1000000",[28,88,89],{"class":38},");\n",[28,91,93],{"class":30,"line":92},4,[28,94,96],{"class":95},"sJ8bj","    \u002F\u002F ... 填充数据 ...\n",[28,98,100,103,106],{"class":30,"line":99},5,[28,101,102],{"class":48},"    return",[28,104,105],{"class":38}," v;",[28,107,108],{"class":95},"  \u002F\u002F C++98 中会拷贝整个 vector！（非常慢）\n",[28,110,112],{"class":30,"line":111},6,[28,113,114],{"class":38},"}\n",[14,116,117,118,122],{},"在 C++98 中，函數返回大的對象時會發生",[119,120,121],"strong",{},"深拷貝","，性能很差。C++11 引入了移動語義，把\"拷貝別人的數據\"變成\"偷走別人的數據\"，大幅提高性能。",[10,124,125],{"id":125},"這個特性是什麼",[127,128,129,144,159,168,174],"ul",{},[130,131,132,135,136,139,140,143],"li",{},[119,133,134],{},"左值","：有名字、可以取地址的對象。如變量 ",[25,137,138],{},"x","、",[25,141,142],{},"arr[0]","。",[130,145,146,149,150,139,153,139,156,143],{},[119,147,148],{},"右值","：臨時的、即將銷燬的對象。如 ",[25,151,152],{},"42",[25,154,155],{},"x + y",[25,157,158],{},"std::move(x)",[130,160,161,167],{},[119,162,163,164],{},"右值引用 ",[25,165,166],{},"T&&","：綁定到右值的引用。",[130,169,170,173],{},[119,171,172],{},"移動語義","：通過\"偷\"右值的資源而不是拷貝，來避免不必要的深拷貝。",[130,175,176,181],{},[119,177,178],{},[25,179,180],{},"std::move","：將左值轉為右值引用，告訴編譯器\"這個對象我以後不再用了，你可以偷它的資源\"。",[10,183,185],{"id":184},"c-標準版本","C++ 標準版本",[14,187,188],{},"C++11",[10,190,191],{"id":191},"需要的頭文件",[18,193,195],{"className":20,"code":194,"language":22,"meta":23,"style":23},"#include \u003Cutility>  \u002F\u002F for std::move, std::forward\n",[25,196,197],{"__ignoreMap":23},[28,198,199,202,206],{"class":30,"line":31},[28,200,201],{"class":48},"#include",[28,203,205],{"class":204},"sZZnC"," \u003Cutility>",[28,207,208],{"class":95},"  \u002F\u002F for std::move, std::forward\n",[10,210,211],{"id":211},"基本語法",[18,213,215],{"className":20,"code":214,"language":22,"meta":23,"style":23},"int&& rref = 42;           \u002F\u002F 右值引用绑定到临时值\nstd::string&& sr = s1 + s2;  \u002F\u002F 绑定到表达式结果\n\n\u002F\u002F std::move：把左值转为右值\nstd::vector\u003Cint> v1 = {1, 2, 3};\nstd::vector\u003Cint> v2 = std::move(v1);  \u002F\u002F v1 的数据被\"偷\"到 v2，v1 变成空\n",[25,216,217,237,264,270,275,308],{"__ignoreMap":23},[28,218,219,222,225,228,231,234],{"class":30,"line":31},[28,220,221],{"class":48},"int&&",[28,223,224],{"class":38}," rref ",[28,226,227],{"class":48},"=",[28,229,230],{"class":85}," 42",[28,232,233],{"class":38},";",[28,235,236],{"class":95},"           \u002F\u002F 右值引用绑定到临时值\n",[28,238,239,241,244,247,250,252,255,258,261],{"class":30,"line":61},[28,240,35],{"class":34},[28,242,243],{"class":38},"::string",[28,245,246],{"class":48},"&&",[28,248,249],{"class":38}," sr ",[28,251,227],{"class":48},[28,253,254],{"class":38}," s1 ",[28,256,257],{"class":48},"+",[28,259,260],{"class":38}," s2;",[28,262,263],{"class":95},"  \u002F\u002F 绑定到表达式结果\n",[28,265,266],{"class":30,"line":67},[28,267,269],{"emptyLinePlaceholder":268},true,"\n",[28,271,272],{"class":30,"line":92},[28,273,274],{"class":95},"\u002F\u002F std::move：把左值转为右值\n",[28,276,277,279,281,283,286,288,291,294,297,300,302,305],{"class":30,"line":99},[28,278,35],{"class":34},[28,280,73],{"class":38},[28,282,76],{"class":48},[28,284,285],{"class":38}," v1 ",[28,287,227],{"class":48},[28,289,290],{"class":38}," {",[28,292,293],{"class":85},"1",[28,295,296],{"class":38},", ",[28,298,299],{"class":85},"2",[28,301,296],{"class":38},[28,303,304],{"class":85},"3",[28,306,307],{"class":38},"};\n",[28,309,310,312,314,316,319,321,324,326,329,332],{"class":30,"line":111},[28,311,35],{"class":34},[28,313,73],{"class":38},[28,315,76],{"class":48},[28,317,318],{"class":38}," v2 ",[28,320,227],{"class":48},[28,322,323],{"class":34}," std",[28,325,39],{"class":38},[28,327,328],{"class":34},"move",[28,330,331],{"class":38},"(v1);",[28,333,334],{"class":95},"  \u002F\u002F v1 的数据被\"偷\"到 v2，v1 变成空\n",[10,336,338],{"id":337},"左值-vs-右值速查表","左值 vs 右值速查表",[340,341,342,359],"table",{},[343,344,345],"thead",{},[346,347,348,353,356],"tr",{},[349,350,352],"th",{"align":351},"left","表達式",[349,354,355],{"align":351},"左值\u002F右值",[349,357,358],{"align":351},"說明",[360,361,362,378,389,400,413,425],"tbody",{},[346,363,364,370,375],{},[365,366,367],"td",{"align":351},[25,368,369],{},"int x = 5;",[365,371,372,374],{"align":351},[25,373,138],{}," 是左值",[365,376,377],{"align":351},"有名字，可取地址",[346,379,380,384,386],{},[365,381,382],{"align":351},[25,383,152],{},[365,385,148],{"align":351},[365,387,388],{"align":351},"字面量",[346,390,391,395,397],{},[365,392,393],{"align":351},[25,394,155],{},[365,396,148],{"align":351},[365,398,399],{"align":351},"臨時結果",[346,401,402,408,410],{},[365,403,404,407],{"align":351},[25,405,406],{},"f()"," 返回非引用",[365,409,148],{"align":351},[365,411,412],{"align":351},"臨時對象",[346,414,415,420,422],{},[365,416,417,419],{"align":351},[25,418,406],{}," 返回引用",[365,421,134],{"align":351},[365,423,424],{"align":351},"引用是別名",[346,426,427,431,434],{},[365,428,429],{"align":351},[25,430,158],{},[365,432,433],{"align":351},"右值（將亡值）",[365,435,436],{"align":351},"強制轉為右值引用",[10,438,439],{"id":439},"示例代碼",[441,442,444],"h3",{"id":443},"示例-1拷貝-vs-移動為什麼需要移動語義","示例 1：拷貝 vs 移動——為什麼需要移動語義",[18,446,448],{"className":20,"code":447,"language":22,"meta":23,"style":23},"#include \u003Ciostream>\n#include \u003Cvector>\n\nint main()\n{\n    std::vector\u003Cint> v1 = {1, 2, 3, 4, 5};\n\n    \u002F\u002F 拷贝（两份独立的数据）\n    std::vector\u003Cint> v2 = v1;\n    std::cout \u003C\u003C \"after copy:\\n\";\n    std::cout \u003C\u003C \"  v1 size = \" \u003C\u003C v1.size() \u003C\u003C \"\\n\";  \u002F\u002F 5\n    std::cout \u003C\u003C \"  v2 size = \" \u003C\u003C v2.size() \u003C\u003C \"\\n\";  \u002F\u002F 5\n\n    \u002F\u002F 移动（v1 的数据被\"偷\"到 v3，v1 变成空）\n    std::vector\u003Cint> v3 = std::move(v1);\n    std::cout \u003C\u003C \"after move:\\n\";\n    std::cout \u003C\u003C \"  v1 size = \" \u003C\u003C v1.size() \u003C\u003C \"\\n\";  \u002F\u002F 0\n    std::cout \u003C\u003C \"  v3 size = \" \u003C\u003C v3.size() \u003C\u003C \"\\n\";  \u002F\u002F 5\n\n    return 0;\n}\n",[25,449,450,457,464,468,477,481,517,522,528,544,567,605,638,643,649,672,690,722,755,760,770],{"__ignoreMap":23},[28,451,452,454],{"class":30,"line":31},[28,453,201],{"class":48},[28,455,456],{"class":204}," \u003Ciostream>\n",[28,458,459,461],{"class":30,"line":61},[28,460,201],{"class":48},[28,462,463],{"class":204}," \u003Cvector>\n",[28,465,466],{"class":30,"line":67},[28,467,269],{"emptyLinePlaceholder":268},[28,469,470,472,475],{"class":30,"line":92},[28,471,49],{"class":48},[28,473,474],{"class":34}," main",[28,476,58],{"class":38},[28,478,479],{"class":30,"line":99},[28,480,64],{"class":38},[28,482,483,485,487,489,491,493,495,497,499,501,503,505,507,510,512,515],{"class":30,"line":111},[28,484,70],{"class":34},[28,486,73],{"class":38},[28,488,76],{"class":48},[28,490,285],{"class":38},[28,492,227],{"class":48},[28,494,290],{"class":38},[28,496,293],{"class":85},[28,498,296],{"class":38},[28,500,299],{"class":85},[28,502,296],{"class":38},[28,504,304],{"class":85},[28,506,296],{"class":38},[28,508,509],{"class":85},"4",[28,511,296],{"class":38},[28,513,514],{"class":85},"5",[28,516,307],{"class":38},[28,518,520],{"class":30,"line":519},7,[28,521,269],{"emptyLinePlaceholder":268},[28,523,525],{"class":30,"line":524},8,[28,526,527],{"class":95},"    \u002F\u002F 拷贝（两份独立的数据）\n",[28,529,531,533,535,537,539,541],{"class":30,"line":530},9,[28,532,70],{"class":34},[28,534,73],{"class":38},[28,536,76],{"class":48},[28,538,318],{"class":38},[28,540,227],{"class":48},[28,542,543],{"class":38}," v1;\n",[28,545,547,549,552,555,558,561,564],{"class":30,"line":546},10,[28,548,70],{"class":34},[28,550,551],{"class":38},"::cout ",[28,553,554],{"class":48},"\u003C\u003C",[28,556,557],{"class":204}," \"after copy:",[28,559,560],{"class":85},"\\n",[28,562,563],{"class":204},"\"",[28,565,566],{"class":38},";\n",[28,568,570,572,574,576,579,582,585,588,591,593,596,598,600,602],{"class":30,"line":569},11,[28,571,70],{"class":34},[28,573,551],{"class":38},[28,575,554],{"class":48},[28,577,578],{"class":204}," \"  v1 size = \"",[28,580,581],{"class":48}," \u003C\u003C",[28,583,584],{"class":38}," v1.",[28,586,587],{"class":34},"size",[28,589,590],{"class":38},"() ",[28,592,554],{"class":48},[28,594,595],{"class":204}," \"",[28,597,560],{"class":85},[28,599,563],{"class":204},[28,601,233],{"class":38},[28,603,604],{"class":95},"  \u002F\u002F 5\n",[28,606,608,610,612,614,617,619,622,624,626,628,630,632,634,636],{"class":30,"line":607},12,[28,609,70],{"class":34},[28,611,551],{"class":38},[28,613,554],{"class":48},[28,615,616],{"class":204}," \"  v2 size = \"",[28,618,581],{"class":48},[28,620,621],{"class":38}," v2.",[28,623,587],{"class":34},[28,625,590],{"class":38},[28,627,554],{"class":48},[28,629,595],{"class":204},[28,631,560],{"class":85},[28,633,563],{"class":204},[28,635,233],{"class":38},[28,637,604],{"class":95},[28,639,641],{"class":30,"line":640},13,[28,642,269],{"emptyLinePlaceholder":268},[28,644,646],{"class":30,"line":645},14,[28,647,648],{"class":95},"    \u002F\u002F 移动（v1 的数据被\"偷\"到 v3，v1 变成空）\n",[28,650,652,654,656,658,661,663,665,667,669],{"class":30,"line":651},15,[28,653,70],{"class":34},[28,655,73],{"class":38},[28,657,76],{"class":48},[28,659,660],{"class":38}," v3 ",[28,662,227],{"class":48},[28,664,323],{"class":34},[28,666,39],{"class":38},[28,668,328],{"class":34},[28,670,671],{"class":38},"(v1);\n",[28,673,675,677,679,681,684,686,688],{"class":30,"line":674},16,[28,676,70],{"class":34},[28,678,551],{"class":38},[28,680,554],{"class":48},[28,682,683],{"class":204}," \"after move:",[28,685,560],{"class":85},[28,687,563],{"class":204},[28,689,566],{"class":38},[28,691,693,695,697,699,701,703,705,707,709,711,713,715,717,719],{"class":30,"line":692},17,[28,694,70],{"class":34},[28,696,551],{"class":38},[28,698,554],{"class":48},[28,700,578],{"class":204},[28,702,581],{"class":48},[28,704,584],{"class":38},[28,706,587],{"class":34},[28,708,590],{"class":38},[28,710,554],{"class":48},[28,712,595],{"class":204},[28,714,560],{"class":85},[28,716,563],{"class":204},[28,718,233],{"class":38},[28,720,721],{"class":95},"  \u002F\u002F 0\n",[28,723,725,727,729,731,734,736,739,741,743,745,747,749,751,753],{"class":30,"line":724},18,[28,726,70],{"class":34},[28,728,551],{"class":38},[28,730,554],{"class":48},[28,732,733],{"class":204}," \"  v3 size = \"",[28,735,581],{"class":48},[28,737,738],{"class":38}," v3.",[28,740,587],{"class":34},[28,742,590],{"class":38},[28,744,554],{"class":48},[28,746,595],{"class":204},[28,748,560],{"class":85},[28,750,563],{"class":204},[28,752,233],{"class":38},[28,754,604],{"class":95},[28,756,758],{"class":30,"line":757},19,[28,759,269],{"emptyLinePlaceholder":268},[28,761,763,765,768],{"class":30,"line":762},20,[28,764,102],{"class":48},[28,766,767],{"class":85}," 0",[28,769,566],{"class":38},[28,771,773],{"class":30,"line":772},21,[28,774,114],{"class":38},[14,776,777,780],{},[119,778,779],{},"運行結果","：",[18,782,787],{"className":783,"code":785,"language":786},[784],"language-text","after copy:\n  v1 size = 5\n  v2 size = 5\nafter move:\n  v1 size = 0\n  v3 size = 5\n","text",[25,788,785],{"__ignoreMap":23},[441,790,792],{"id":791},"示例-2在示例-1-基礎上自定義類的移動構造函數","示例 2：在示例 1 基礎上，自定義類的移動構造函數",[18,794,796],{"className":20,"code":795,"language":22,"meta":23,"style":23},"#include \u003Calgorithm> \u002F\u002F for std::copy\n#include \u003Ciostream>\n#include \u003Cstring>\n#include \u003Cutility>  \u002F\u002F for std::move\n\nclass Buffer\n{\n    int* data;\n    size_t size;\n\npublic:\n    \u002F\u002F 构造函数\n    Buffer(size_t n) : data(new int[n]), size(n)\n    {\n        std::cout \u003C\u003C \"Constructor: allocated \" \u003C\u003C n \u003C\u003C \" ints\\n\";\n    }\n\n    \u002F\u002F 拷贝构造函数（深拷贝）\n    Buffer(const Buffer& other) : data(new int[other.size]), size(other.size)\n    {\n        std::copy(other.data, other.data + size, data);\n        std::cout \u003C\u003C \"Copy constructor: deep copied \" \u003C\u003C size \u003C\u003C \" ints\\n\";\n    }\n\n    \u002F\u002F 移动构造函数（偷数据）\n    Buffer(Buffer&& other) noexcept\n        : data(other.data), size(other.size)\n    {\n        other.data = nullptr;  \u002F\u002F 让原对象安全析构\n        other.size = 0;\n        std::cout \u003C\u003C \"Move constructor: stole \" \u003C\u003C size \u003C\u003C \" ints\\n\";\n    }\n\n    ~Buffer()\n    {\n        delete[] data;\n        std::cout \u003C\u003C \"Destructor\\n\";\n    }\n\n    size_t get_size() const { return size; }\n};\n\nint main()\n{\n    Buffer buf1(1000);\n\n    \u002F\u002F 拷贝：会触发深拷贝\n    Buffer buf2 = buf1;\n    std::cout \u003C\u003C \"buf1 size after copy: \" \u003C\u003C buf1.get_size() \u003C\u003C \"\\n\";\n\n    \u002F\u002F 移动：数据被偷走，没有深拷贝！\n    Buffer buf3 = std::move(buf2);\n    std::cout \u003C\u003C \"buf2 size after move: \" \u003C\u003C buf2.get_size() \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"buf3 size after move: \" \u003C\u003C buf3.get_size() \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[25,797,798,808,814,821,830,834,842,846,854,862,866,871,876,912,917,945,950,954,959,995,999,1016,1043,1048,1053,1059,1079,1094,1099,1115,1127,1153,1158,1163,1171,1176,1184,1202,1207,1212,1233,1238,1243,1252,1257,1273,1278,1284,1295,1327,1332,1338,1355,1386,1417,1422,1431],{"__ignoreMap":23},[28,799,800,802,805],{"class":30,"line":31},[28,801,201],{"class":48},[28,803,804],{"class":204}," \u003Calgorithm>",[28,806,807],{"class":95}," \u002F\u002F for std::copy\n",[28,809,810,812],{"class":30,"line":61},[28,811,201],{"class":48},[28,813,456],{"class":204},[28,815,816,818],{"class":30,"line":67},[28,817,201],{"class":48},[28,819,820],{"class":204}," \u003Cstring>\n",[28,822,823,825,827],{"class":30,"line":92},[28,824,201],{"class":48},[28,826,205],{"class":204},[28,828,829],{"class":95},"  \u002F\u002F for std::move\n",[28,831,832],{"class":30,"line":99},[28,833,269],{"emptyLinePlaceholder":268},[28,835,836,839],{"class":30,"line":111},[28,837,838],{"class":48},"class",[28,840,841],{"class":34}," Buffer\n",[28,843,844],{"class":30,"line":519},[28,845,64],{"class":38},[28,847,848,851],{"class":30,"line":524},[28,849,850],{"class":48},"    int*",[28,852,853],{"class":38}," data;\n",[28,855,856,859],{"class":30,"line":530},[28,857,858],{"class":48},"    size_t",[28,860,861],{"class":38}," size;\n",[28,863,864],{"class":30,"line":546},[28,865,269],{"emptyLinePlaceholder":268},[28,867,868],{"class":30,"line":569},[28,869,870],{"class":48},"public:\n",[28,872,873],{"class":30,"line":607},[28,874,875],{"class":95},"    \u002F\u002F 构造函数\n",[28,877,878,881,883,886,890,893,896,898,901,904,907,909],{"class":30,"line":640},[28,879,880],{"class":34},"    Buffer",[28,882,82],{"class":38},[28,884,885],{"class":48},"size_t",[28,887,889],{"class":888},"s4XuR"," n",[28,891,892],{"class":38},") : ",[28,894,895],{"class":34},"data",[28,897,82],{"class":38},[28,899,900],{"class":48},"new",[28,902,903],{"class":48}," int",[28,905,906],{"class":38},"[n]), ",[28,908,587],{"class":34},[28,910,911],{"class":38},"(n)\n",[28,913,914],{"class":30,"line":645},[28,915,916],{"class":38},"    {\n",[28,918,919,922,924,926,929,931,934,936,939,941,943],{"class":30,"line":651},[28,920,921],{"class":34},"        std",[28,923,551],{"class":38},[28,925,554],{"class":48},[28,927,928],{"class":204}," \"Constructor: allocated \"",[28,930,581],{"class":48},[28,932,933],{"class":38}," n ",[28,935,554],{"class":48},[28,937,938],{"class":204}," \" ints",[28,940,560],{"class":85},[28,942,563],{"class":204},[28,944,566],{"class":38},[28,946,947],{"class":30,"line":674},[28,948,949],{"class":38},"    }\n",[28,951,952],{"class":30,"line":692},[28,953,269],{"emptyLinePlaceholder":268},[28,955,956],{"class":30,"line":724},[28,957,958],{"class":95},"    \u002F\u002F 拷贝构造函数（深拷贝）\n",[28,960,961,963,965,968,971,974,977,979,981,983,985,987,990,992],{"class":30,"line":757},[28,962,880],{"class":34},[28,964,82],{"class":38},[28,966,967],{"class":48},"const",[28,969,970],{"class":34}," Buffer",[28,972,973],{"class":48},"&",[28,975,976],{"class":888}," other",[28,978,892],{"class":38},[28,980,895],{"class":34},[28,982,82],{"class":38},[28,984,900],{"class":48},[28,986,903],{"class":48},[28,988,989],{"class":38},"[other.size]), ",[28,991,587],{"class":34},[28,993,994],{"class":38},"(other.size)\n",[28,996,997],{"class":30,"line":762},[28,998,916],{"class":38},[28,1000,1001,1003,1005,1008,1011,1013],{"class":30,"line":772},[28,1002,921],{"class":34},[28,1004,39],{"class":38},[28,1006,1007],{"class":34},"copy",[28,1009,1010],{"class":38},"(other.data, other.data ",[28,1012,257],{"class":48},[28,1014,1015],{"class":38}," size, data);\n",[28,1017,1019,1021,1023,1025,1028,1030,1033,1035,1037,1039,1041],{"class":30,"line":1018},22,[28,1020,921],{"class":34},[28,1022,551],{"class":38},[28,1024,554],{"class":48},[28,1026,1027],{"class":204}," \"Copy constructor: deep copied \"",[28,1029,581],{"class":48},[28,1031,1032],{"class":38}," size ",[28,1034,554],{"class":48},[28,1036,938],{"class":204},[28,1038,560],{"class":85},[28,1040,563],{"class":204},[28,1042,566],{"class":38},[28,1044,1046],{"class":30,"line":1045},23,[28,1047,949],{"class":38},[28,1049,1051],{"class":30,"line":1050},24,[28,1052,269],{"emptyLinePlaceholder":268},[28,1054,1056],{"class":30,"line":1055},25,[28,1057,1058],{"class":95},"    \u002F\u002F 移动构造函数（偷数据）\n",[28,1060,1062,1064,1066,1069,1071,1073,1076],{"class":30,"line":1061},26,[28,1063,880],{"class":34},[28,1065,82],{"class":38},[28,1067,1068],{"class":34},"Buffer",[28,1070,246],{"class":48},[28,1072,976],{"class":888},[28,1074,1075],{"class":38},") ",[28,1077,1078],{"class":48},"noexcept\n",[28,1080,1082,1085,1087,1090,1092],{"class":30,"line":1081},27,[28,1083,1084],{"class":38},"        : ",[28,1086,895],{"class":34},[28,1088,1089],{"class":38},"(other.data), ",[28,1091,587],{"class":34},[28,1093,994],{"class":38},[28,1095,1097],{"class":30,"line":1096},28,[28,1098,916],{"class":38},[28,1100,1102,1105,1107,1110,1112],{"class":30,"line":1101},29,[28,1103,1104],{"class":38},"        other.data ",[28,1106,227],{"class":48},[28,1108,1109],{"class":85}," nullptr",[28,1111,233],{"class":38},[28,1113,1114],{"class":95},"  \u002F\u002F 让原对象安全析构\n",[28,1116,1118,1121,1123,1125],{"class":30,"line":1117},30,[28,1119,1120],{"class":38},"        other.size ",[28,1122,227],{"class":48},[28,1124,767],{"class":85},[28,1126,566],{"class":38},[28,1128,1130,1132,1134,1136,1139,1141,1143,1145,1147,1149,1151],{"class":30,"line":1129},31,[28,1131,921],{"class":34},[28,1133,551],{"class":38},[28,1135,554],{"class":48},[28,1137,1138],{"class":204}," \"Move constructor: stole \"",[28,1140,581],{"class":48},[28,1142,1032],{"class":38},[28,1144,554],{"class":48},[28,1146,938],{"class":204},[28,1148,560],{"class":85},[28,1150,563],{"class":204},[28,1152,566],{"class":38},[28,1154,1156],{"class":30,"line":1155},32,[28,1157,949],{"class":38},[28,1159,1161],{"class":30,"line":1160},33,[28,1162,269],{"emptyLinePlaceholder":268},[28,1164,1166,1169],{"class":30,"line":1165},34,[28,1167,1168],{"class":34},"    ~Buffer",[28,1170,58],{"class":38},[28,1172,1174],{"class":30,"line":1173},35,[28,1175,916],{"class":38},[28,1177,1179,1182],{"class":30,"line":1178},36,[28,1180,1181],{"class":48},"        delete[]",[28,1183,853],{"class":38},[28,1185,1187,1189,1191,1193,1196,1198,1200],{"class":30,"line":1186},37,[28,1188,921],{"class":34},[28,1190,551],{"class":38},[28,1192,554],{"class":48},[28,1194,1195],{"class":204}," \"Destructor",[28,1197,560],{"class":85},[28,1199,563],{"class":204},[28,1201,566],{"class":38},[28,1203,1205],{"class":30,"line":1204},38,[28,1206,949],{"class":38},[28,1208,1210],{"class":30,"line":1209},39,[28,1211,269],{"emptyLinePlaceholder":268},[28,1213,1215,1217,1220,1222,1224,1227,1230],{"class":30,"line":1214},40,[28,1216,858],{"class":48},[28,1218,1219],{"class":34}," get_size",[28,1221,590],{"class":38},[28,1223,967],{"class":48},[28,1225,1226],{"class":38}," { ",[28,1228,1229],{"class":48},"return",[28,1231,1232],{"class":38}," size; }\n",[28,1234,1236],{"class":30,"line":1235},41,[28,1237,307],{"class":38},[28,1239,1241],{"class":30,"line":1240},42,[28,1242,269],{"emptyLinePlaceholder":268},[28,1244,1246,1248,1250],{"class":30,"line":1245},43,[28,1247,49],{"class":48},[28,1249,474],{"class":34},[28,1251,58],{"class":38},[28,1253,1255],{"class":30,"line":1254},44,[28,1256,64],{"class":38},[28,1258,1260,1263,1266,1268,1271],{"class":30,"line":1259},45,[28,1261,1262],{"class":38},"    Buffer ",[28,1264,1265],{"class":34},"buf1",[28,1267,82],{"class":38},[28,1269,1270],{"class":85},"1000",[28,1272,89],{"class":38},[28,1274,1276],{"class":30,"line":1275},46,[28,1277,269],{"emptyLinePlaceholder":268},[28,1279,1281],{"class":30,"line":1280},47,[28,1282,1283],{"class":95},"    \u002F\u002F 拷贝：会触发深拷贝\n",[28,1285,1287,1290,1292],{"class":30,"line":1286},48,[28,1288,1289],{"class":38},"    Buffer buf2 ",[28,1291,227],{"class":48},[28,1293,1294],{"class":38}," buf1;\n",[28,1296,1298,1300,1302,1304,1307,1309,1312,1315,1317,1319,1321,1323,1325],{"class":30,"line":1297},49,[28,1299,70],{"class":34},[28,1301,551],{"class":38},[28,1303,554],{"class":48},[28,1305,1306],{"class":204}," \"buf1 size after copy: \"",[28,1308,581],{"class":48},[28,1310,1311],{"class":38}," buf1.",[28,1313,1314],{"class":34},"get_size",[28,1316,590],{"class":38},[28,1318,554],{"class":48},[28,1320,595],{"class":204},[28,1322,560],{"class":85},[28,1324,563],{"class":204},[28,1326,566],{"class":38},[28,1328,1330],{"class":30,"line":1329},50,[28,1331,269],{"emptyLinePlaceholder":268},[28,1333,1335],{"class":30,"line":1334},51,[28,1336,1337],{"class":95},"    \u002F\u002F 移动：数据被偷走，没有深拷贝！\n",[28,1339,1341,1344,1346,1348,1350,1352],{"class":30,"line":1340},52,[28,1342,1343],{"class":38},"    Buffer buf3 ",[28,1345,227],{"class":48},[28,1347,323],{"class":34},[28,1349,39],{"class":38},[28,1351,328],{"class":34},[28,1353,1354],{"class":38},"(buf2);\n",[28,1356,1358,1360,1362,1364,1367,1369,1372,1374,1376,1378,1380,1382,1384],{"class":30,"line":1357},53,[28,1359,70],{"class":34},[28,1361,551],{"class":38},[28,1363,554],{"class":48},[28,1365,1366],{"class":204}," \"buf2 size after move: \"",[28,1368,581],{"class":48},[28,1370,1371],{"class":38}," buf2.",[28,1373,1314],{"class":34},[28,1375,590],{"class":38},[28,1377,554],{"class":48},[28,1379,595],{"class":204},[28,1381,560],{"class":85},[28,1383,563],{"class":204},[28,1385,566],{"class":38},[28,1387,1389,1391,1393,1395,1398,1400,1403,1405,1407,1409,1411,1413,1415],{"class":30,"line":1388},54,[28,1390,70],{"class":34},[28,1392,551],{"class":38},[28,1394,554],{"class":48},[28,1396,1397],{"class":204}," \"buf3 size after move: \"",[28,1399,581],{"class":48},[28,1401,1402],{"class":38}," buf3.",[28,1404,1314],{"class":34},[28,1406,590],{"class":38},[28,1408,554],{"class":48},[28,1410,595],{"class":204},[28,1412,560],{"class":85},[28,1414,563],{"class":204},[28,1416,566],{"class":38},[28,1418,1420],{"class":30,"line":1419},55,[28,1421,269],{"emptyLinePlaceholder":268},[28,1423,1425,1427,1429],{"class":30,"line":1424},56,[28,1426,102],{"class":48},[28,1428,767],{"class":85},[28,1430,566],{"class":38},[28,1432,1434],{"class":30,"line":1433},57,[28,1435,114],{"class":38},[14,1437,1438,780],{},[119,1439,779],{},[18,1441,1444],{"className":1442,"code":1443,"language":786},[784],"Constructor: allocated 1000 ints\nCopy constructor: deep copied 1000 ints\nbuf1 size after copy: 1000\nMove constructor: stole 1000 ints\nbuf2 size after move: 0\nbuf3 size after move: 1000\nDestructor\nDestructor\nDestructor\n",[25,1445,1443],{"__ignoreMap":23},[1447,1448,1450,1451,139,1454,1456],"h4",{"id":1449},"buffer-示例詳解stdcopystdmove-與對象初始化","Buffer 示例詳解：",[25,1452,1453],{},"std::copy",[25,1455,180],{}," 與對象初始化",[14,1458,1459],{},"示例 2 中最容易混淆的地方主要有三個：",[1461,1462,1463,1468,1473],"ol",{},[130,1464,1465,1467],{},[25,1466,1453],{}," 到底複製了什麼；",[130,1469,1470,1472],{},[25,1471,180],{}," 到底做了什麼；",[130,1474,1475,1476,1479,1480,1483],{},"為什麼 ",[25,1477,1478],{},"Buffer b = a;"," 和 ",[25,1481,1482],{},"Buffer b(a);"," 都會調用拷貝構造函數。",[14,1485,1486,1487,1489],{},"下面結合 ",[25,1488,1068],{}," 類逐一說明。",[1491,1492,1494,1496],"h5",{"id":1493},"stdcopy真正複製一段元素",[25,1495,1453],{},"：真正複製一段元素",[14,1498,1499,1501,1502,1505],{},[25,1500,1453],{}," 定義在 ",[25,1503,1504],{},"\u003Calgorithm>"," 中，常見形式可以簡化寫成：",[18,1507,1509],{"className":20,"code":1508,"language":22,"meta":23,"style":23},"template\u003Cclass InputIt, class OutputIt>\nOutputIt std::copy(InputIt first, InputIt last, OutputIt destination);\n",[25,1510,1511,1533],{"__ignoreMap":23},[28,1512,1513,1516,1518,1520,1523,1525,1527,1530],{"class":30,"line":31},[28,1514,1515],{"class":48},"template",[28,1517,45],{"class":38},[28,1519,838],{"class":48},[28,1521,1522],{"class":34}," InputIt",[28,1524,296],{"class":38},[28,1526,838],{"class":48},[28,1528,1529],{"class":34}," OutputIt",[28,1531,1532],{"class":38},">\n",[28,1534,1535,1538,1540,1542,1544,1546,1549,1552,1554,1556,1559,1561,1563,1566],{"class":30,"line":61},[28,1536,1537],{"class":34},"OutputIt",[28,1539,323],{"class":34},[28,1541,39],{"class":38},[28,1543,1007],{"class":34},[28,1545,82],{"class":38},[28,1547,1548],{"class":34},"InputIt",[28,1550,1551],{"class":888}," first",[28,1553,296],{"class":38},[28,1555,1548],{"class":34},[28,1557,1558],{"class":888}," last",[28,1560,296],{"class":38},[28,1562,1537],{"class":34},[28,1564,1565],{"class":888}," destination",[28,1567,89],{"class":38},[14,1569,1570],{},"三個參數的含義如下：",[340,1572,1573,1583],{},[343,1574,1575],{},[346,1576,1577,1580],{},[349,1578,1579],{"align":351},"參數",[349,1581,1582],{"align":351},"含義",[360,1584,1585,1595,1605],{},[346,1586,1587,1592],{},[365,1588,1589],{"align":351},[25,1590,1591],{},"first",[365,1593,1594],{"align":351},"源數據的起始位置",[346,1596,1597,1602],{},[365,1598,1599],{"align":351},[25,1600,1601],{},"last",[365,1603,1604],{"align":351},"源數據的結束位置，但不包含該位置",[346,1606,1607,1612],{},[365,1608,1609],{"align":351},[25,1610,1611],{},"destination",[365,1613,1614],{"align":351},"目標區域的起始位置",[14,1616,1617],{},"示例中的代碼是：",[18,1619,1621],{"className":20,"code":1620,"language":22,"meta":23,"style":23},"std::copy(other.data, other.data + size, data);\n",[25,1622,1623],{"__ignoreMap":23},[28,1624,1625,1627,1629,1631,1633,1635],{"class":30,"line":31},[28,1626,35],{"class":34},[28,1628,39],{"class":38},[28,1630,1007],{"class":34},[28,1632,1010],{"class":38},[28,1634,257],{"class":48},[28,1636,1015],{"class":38},[14,1638,1639],{},"可以理解為：",[1641,1642,1643],"blockquote",{},[14,1644,1645,1646,1649,1650,1653,1654,1656],{},"從 ",[25,1647,1648],{},"other.data"," 開始，複製到 ",[25,1651,1652],{},"other.data + size"," 之前為止，並把結果寫入 ",[25,1655,895],{}," 指向的內存。",[14,1658,1659,1660,1663],{},"假設 ",[25,1661,1662],{},"size == 3","，它大致等價於：",[18,1665,1667],{"className":20,"code":1666,"language":22,"meta":23,"style":23},"data[0] = other.data[0];\ndata[1] = other.data[1];\ndata[2] = other.data[2];\n",[25,1668,1669,1690,1706],{"__ignoreMap":23},[28,1670,1671,1674,1677,1680,1682,1685,1687],{"class":30,"line":31},[28,1672,1673],{"class":38},"data[",[28,1675,1676],{"class":85},"0",[28,1678,1679],{"class":38},"] ",[28,1681,227],{"class":48},[28,1683,1684],{"class":38}," other.data[",[28,1686,1676],{"class":85},[28,1688,1689],{"class":38},"];\n",[28,1691,1692,1694,1696,1698,1700,1702,1704],{"class":30,"line":61},[28,1693,1673],{"class":38},[28,1695,293],{"class":85},[28,1697,1679],{"class":38},[28,1699,227],{"class":48},[28,1701,1684],{"class":38},[28,1703,293],{"class":85},[28,1705,1689],{"class":38},[28,1707,1708,1710,1712,1714,1716,1718,1720],{"class":30,"line":67},[28,1709,1673],{"class":38},[28,1711,299],{"class":85},[28,1713,1679],{"class":38},[28,1715,227],{"class":48},[28,1717,1684],{"class":38},[28,1719,299],{"class":85},[28,1721,1689],{"class":38},[14,1723,1724],{},"也可以手寫成循環：",[18,1726,1728],{"className":20,"code":1727,"language":22,"meta":23,"style":23},"for (size_t i = 0; i \u003C size; ++i)\n{\n    data[i] = other.data[i];\n}\n",[25,1729,1730,1761,1765,1775],{"__ignoreMap":23},[28,1731,1732,1735,1738,1740,1743,1745,1747,1750,1752,1755,1758],{"class":30,"line":31},[28,1733,1734],{"class":48},"for",[28,1736,1737],{"class":38}," (",[28,1739,885],{"class":48},[28,1741,1742],{"class":38}," i ",[28,1744,227],{"class":48},[28,1746,767],{"class":85},[28,1748,1749],{"class":38},"; i ",[28,1751,45],{"class":48},[28,1753,1754],{"class":38}," size; ",[28,1756,1757],{"class":48},"++",[28,1759,1760],{"class":38},"i)\n",[28,1762,1763],{"class":30,"line":61},[28,1764,64],{"class":38},[28,1766,1767,1770,1772],{"class":30,"line":67},[28,1768,1769],{"class":38},"    data[i] ",[28,1771,227],{"class":48},[28,1773,1774],{"class":38}," other.data[i];\n",[28,1776,1777],{"class":30,"line":92},[28,1778,114],{"class":38},[14,1780,1781,1783,1784,1786],{},[25,1782,1453],{}," 的返回值是目標區域複製結束後的下一個位置。這裡複製了 ",[25,1785,587],{}," 個元素，因此：",[18,1788,1790],{"className":20,"code":1789,"language":22,"meta":23,"style":23},"int* end = std::copy(other.data, other.data + size, data);\n\n\u002F\u002F 此时 end 等于 data + size\n",[25,1791,1792,1814,1818],{"__ignoreMap":23},[28,1793,1794,1797,1800,1802,1804,1806,1808,1810,1812],{"class":30,"line":31},[28,1795,1796],{"class":48},"int*",[28,1798,1799],{"class":38}," end ",[28,1801,227],{"class":48},[28,1803,323],{"class":34},[28,1805,39],{"class":38},[28,1807,1007],{"class":34},[28,1809,1010],{"class":38},[28,1811,257],{"class":48},[28,1813,1015],{"class":38},[28,1815,1816],{"class":30,"line":61},[28,1817,269],{"emptyLinePlaceholder":268},[28,1819,1820],{"class":30,"line":67},[28,1821,1822],{"class":95},"\u002F\u002F 此时 end 等于 data + size\n",[14,1824,1825],{},"本例不需要繼續使用這個位置，所以直接忽略了返回值。",[14,1827,1828,1829,1831,1832,1834],{},"需要注意，",[25,1830,1453],{}," 不會自動為目標區域申請內存。調用它之前，",[25,1833,895],{}," 必須已經指向足夠大的有效內存。本例在成員初始化列表中已經完成了申請：",[18,1836,1838],{"className":20,"code":1837,"language":22,"meta":23,"style":23},"data(new int[other.size])\n",[25,1839,1840],{"__ignoreMap":23},[28,1841,1842,1844,1846,1848,1850],{"class":30,"line":31},[28,1843,895],{"class":34},[28,1845,82],{"class":38},[28,1847,900],{"class":48},[28,1849,903],{"class":48},[28,1851,1852],{"class":38},"[other.size])\n",[1491,1854,1856,1858],{"id":1855},"stdmove本身並不移動數據",[25,1857,180],{},"：本身並不移動數據",[14,1860,1861,1501,1863,1866],{},[25,1862,180],{},[25,1864,1865],{},"\u003Cutility>"," 中。它的作用不是複製數據，也不是搬運數據，而是把一個表達式轉換成可以綁定到右值引用的形式。",[14,1868,1869],{},"它的函數模板可以簡化理解為：",[18,1871,1873],{"className":20,"code":1872,"language":22,"meta":23,"style":23},"template\u003Cclass T>\nstd::remove_reference_t\u003CT>&& std::move(T&& value) noexcept;\n",[25,1874,1875,1888],{"__ignoreMap":23},[28,1876,1877,1879,1881,1883,1886],{"class":30,"line":31},[28,1878,1515],{"class":48},[28,1880,45],{"class":38},[28,1882,838],{"class":48},[28,1884,1885],{"class":34}," T",[28,1887,1532],{"class":38},[28,1889,1890,1892,1894,1897,1899,1902,1905,1907,1909,1911,1913,1915,1917,1919,1922,1924,1927],{"class":30,"line":61},[28,1891,35],{"class":34},[28,1893,39],{"class":38},[28,1895,1896],{"class":85},"remove_reference_t",[28,1898,45],{"class":38},[28,1900,1901],{"class":34},"T",[28,1903,1904],{"class":38},">",[28,1906,246],{"class":48},[28,1908,323],{"class":34},[28,1910,39],{"class":38},[28,1912,328],{"class":34},[28,1914,82],{"class":38},[28,1916,1901],{"class":34},[28,1918,246],{"class":48},[28,1920,1921],{"class":888}," value",[28,1923,1075],{"class":38},[28,1925,1926],{"class":48},"noexcept",[28,1928,566],{"class":38},[14,1930,1931],{},"對於下面這句代碼：",[18,1933,1935],{"className":20,"code":1934,"language":22,"meta":23,"style":23},"std::move(buf2)\n",[25,1936,1937],{"__ignoreMap":23},[28,1938,1939,1941,1943,1945],{"class":30,"line":31},[28,1940,35],{"class":34},[28,1942,39],{"class":38},[28,1944,328],{"class":34},[28,1946,1947],{"class":38},"(buf2)\n",[14,1949,1950,1951,1954,1955,1958],{},"參數是 ",[25,1952,1953],{},"buf2","，返回結果可以簡單理解為一個 ",[25,1956,1957],{},"Buffer&&","。它相當於告訴編譯器：",[1641,1960,1961],{},[14,1962,1963,1965],{},[25,1964,1953],{}," 原來的資源可以被轉移，不必繼續保留原來的內容。",[14,1967,1968,1969,1972,1973,1975],{},"但 ",[25,1970,1971],{},"std::move(buf2)"," 這一表達式本身不會修改 ",[25,1974,1953],{},"。真正轉移資源的是隨後被調用的移動構造函數或移動賦值運算符。",[14,1977,1978],{},"例如：",[18,1980,1982],{"className":20,"code":1981,"language":22,"meta":23,"style":23},"Buffer buf3 = std::move(buf2);\n",[25,1983,1984],{"__ignoreMap":23},[28,1985,1986,1989,1991,1993,1995,1997],{"class":30,"line":31},[28,1987,1988],{"class":38},"Buffer buf3 ",[28,1990,227],{"class":48},[28,1992,323],{"class":34},[28,1994,39],{"class":38},[28,1996,328],{"class":34},[28,1998,1354],{"class":38},[14,2000,2001,2003],{},[25,2002,1971],{}," 使右側表達式可以匹配：",[18,2005,2007],{"className":20,"code":2006,"language":22,"meta":23,"style":23},"Buffer(Buffer&& other) noexcept;\n",[25,2008,2009],{"__ignoreMap":23},[28,2010,2011,2013,2016,2018,2021,2023],{"class":30,"line":31},[28,2012,1068],{"class":34},[28,2014,2015],{"class":38},"(Buffer",[28,2017,246],{"class":48},[28,2019,2020],{"class":38}," other) ",[28,2022,1926],{"class":48},[28,2024,566],{"class":38},[14,2026,2027],{},"於是編譯器調用移動構造函數，由移動構造函數真正接管指針：",[18,2029,2031],{"className":20,"code":2030,"language":22,"meta":23,"style":23},"Buffer(Buffer&& other) noexcept\n    : data(other.data), size(other.size)\n{\n    other.data = nullptr;\n    other.size = 0;\n}\n",[25,2032,2033,2045,2058,2062,2073,2084],{"__ignoreMap":23},[28,2034,2035,2037,2039,2041,2043],{"class":30,"line":31},[28,2036,1068],{"class":34},[28,2038,2015],{"class":38},[28,2040,246],{"class":48},[28,2042,2020],{"class":38},[28,2044,1078],{"class":48},[28,2046,2047,2050,2052,2054,2056],{"class":30,"line":61},[28,2048,2049],{"class":38},"    : ",[28,2051,895],{"class":34},[28,2053,1089],{"class":38},[28,2055,587],{"class":34},[28,2057,994],{"class":38},[28,2059,2060],{"class":30,"line":67},[28,2061,64],{"class":38},[28,2063,2064,2067,2069,2071],{"class":30,"line":92},[28,2065,2066],{"class":38},"    other.data ",[28,2068,227],{"class":48},[28,2070,1109],{"class":85},[28,2072,566],{"class":38},[28,2074,2075,2078,2080,2082],{"class":30,"line":99},[28,2076,2077],{"class":38},"    other.size ",[28,2079,227],{"class":48},[28,2081,767],{"class":85},[28,2083,566],{"class":38},[28,2085,2086],{"class":30,"line":111},[28,2087,114],{"class":38},[14,2089,2090],{},"因此，可以把它們的職責記成：",[18,2092,2095],{"className":2093,"code":2094,"language":786,"meta":23},[784],"std::copy：真正复制元素\nstd::move：把对象转换成“允许被移动”的表达式\n移动构造函数：真正负责转移资源\n",[25,2096,2094],{"__ignoreMap":23},[14,2098,2099],{},"單獨寫下面這句通常沒有實際效果：",[18,2101,2103],{"className":20,"code":2102,"language":22,"meta":23,"style":23},"std::move(buf2);\n",[25,2104,2105],{"__ignoreMap":23},[28,2106,2107,2109,2111,2113],{"class":30,"line":31},[28,2108,35],{"class":34},[28,2110,39],{"class":38},[28,2112,328],{"class":34},[28,2114,1354],{"class":38},[14,2116,2117],{},"因為返回的右值引用沒有被用於構造、賦值或函數傳參，移動構造函數也就不會被調用。",[1491,2119,2121],{"id":2120},"拷貝構造為什麼是深拷貝","拷貝構造為什麼是“深拷貝”",[14,2123,2124],{},"下面這句會調用拷貝構造函數：",[18,2126,2128],{"className":20,"code":2127,"language":22,"meta":23,"style":23},"Buffer buf2 = buf1;\n",[25,2129,2130],{"__ignoreMap":23},[28,2131,2132,2135,2137],{"class":30,"line":31},[28,2133,2134],{"class":38},"Buffer buf2 ",[28,2136,227],{"class":48},[28,2138,1294],{"class":38},[14,2140,2141],{},"對應的構造函數是：",[18,2143,2145],{"className":20,"code":2144,"language":22,"meta":23,"style":23},"Buffer(const Buffer& other)\n    : data(new int[other.size]), size(other.size)\n{\n    std::copy(other.data, other.data + size, data);\n}\n",[25,2146,2147,2162,2180,2184,2198],{"__ignoreMap":23},[28,2148,2149,2151,2153,2155,2157,2159],{"class":30,"line":31},[28,2150,1068],{"class":34},[28,2152,82],{"class":38},[28,2154,967],{"class":48},[28,2156,970],{"class":38},[28,2158,973],{"class":48},[28,2160,2161],{"class":38}," other)\n",[28,2163,2164,2166,2168,2170,2172,2174,2176,2178],{"class":30,"line":61},[28,2165,2049],{"class":38},[28,2167,895],{"class":34},[28,2169,82],{"class":38},[28,2171,900],{"class":48},[28,2173,903],{"class":48},[28,2175,989],{"class":38},[28,2177,587],{"class":34},[28,2179,994],{"class":38},[28,2181,2182],{"class":30,"line":67},[28,2183,64],{"class":38},[28,2185,2186,2188,2190,2192,2194,2196],{"class":30,"line":92},[28,2187,70],{"class":34},[28,2189,39],{"class":38},[28,2191,1007],{"class":34},[28,2193,1010],{"class":38},[28,2195,257],{"class":48},[28,2197,1015],{"class":38},[28,2199,2200],{"class":30,"line":99},[28,2201,114],{"class":38},[14,2203,2204],{},"它做了兩件事：",[1461,2206,2207,2213],{},[130,2208,2209,2210,2212],{},"為 ",[25,2211,1953],{}," 重新申請一塊獨立的數組內存；",[130,2214,2215,2216,2218],{},"把 ",[25,2217,1265],{}," 數組中的每個元素複製到新內存中。",[14,2220,2221],{},"拷貝完成後，兩者保存的內容相同，但管理的是不同的內存：",[18,2223,2226],{"className":2224,"code":2225,"language":786,"meta":23},[784],"buf1.data ──> [buf1 自己的 1000 个 int]\n\nbuf2.data ──> [buf2 自己的 1000 个 int]\n",[25,2227,2225],{"__ignoreMap":23},[14,2229,2230],{},"所以銷燬或修改其中一個對象，不會直接影響另一個對象，這就是深拷貝。",[1491,2232,2233],{"id":2233},"移動構造為什麼要清空原對象",[14,2235,2236],{},"移動構造函數沒有重新申請數組，也沒有複製 1000 個元素，而是直接接管指針：",[18,2238,2240],{"className":20,"code":2239,"language":22,"meta":23,"style":23},"data(other.data), size(other.size)\n",[25,2241,2242],{"__ignoreMap":23},[28,2243,2244,2246,2248,2250],{"class":30,"line":31},[28,2245,895],{"class":34},[28,2247,1089],{"class":38},[28,2249,587],{"class":34},[28,2251,994],{"class":38},[14,2253,2254],{},"接管後必須執行：",[18,2256,2258],{"className":20,"code":2257,"language":22,"meta":23,"style":23},"other.data = nullptr;\nother.size = 0;\n",[25,2259,2260,2271],{"__ignoreMap":23},[28,2261,2262,2265,2267,2269],{"class":30,"line":31},[28,2263,2264],{"class":38},"other.data ",[28,2266,227],{"class":48},[28,2268,1109],{"class":85},[28,2270,566],{"class":38},[28,2272,2273,2276,2278,2280],{"class":30,"line":61},[28,2274,2275],{"class":38},"other.size ",[28,2277,227],{"class":48},[28,2279,767],{"class":85},[28,2281,566],{"class":38},[14,2283,2284],{},"否則新對象和原對象會同時保存同一個指針：",[18,2286,2289],{"className":2287,"code":2288,"language":786,"meta":23},[784],"buf2.data ─┐\n           ├──> [同一块数组内存]\nbuf3.data ─┘\n",[25,2290,2288],{"__ignoreMap":23},[14,2292,2293],{},"兩個對象析構時都會執行：",[18,2295,2297],{"className":20,"code":2296,"language":22,"meta":23,"style":23},"delete[] data;\n",[25,2298,2299],{"__ignoreMap":23},[28,2300,2301,2304],{"class":30,"line":31},[28,2302,2303],{"class":48},"delete[]",[28,2305,853],{"class":38},[14,2307,2308],{},"這樣就可能對同一塊內存釋放兩次，產生未定義行為。",[14,2310,2311,2312,2315],{},"把原對象的指針設為 ",[25,2313,2314],{},"nullptr"," 後，所有權關係變成：",[18,2317,2320],{"className":2318,"code":2319,"language":786,"meta":23},[784],"buf2.data = nullptr\n\nbuf3.data ──> [原来由 buf2 管理的数组内存]\n",[25,2321,2319],{"__ignoreMap":23},[14,2323,2324],{},"而下面的操作是安全的：",[18,2326,2328],{"className":20,"code":2327,"language":22,"meta":23,"style":23},"delete[] nullptr;\n",[25,2329,2330],{"__ignoreMap":23},[28,2331,2332,2334,2336],{"class":30,"line":31},[28,2333,2303],{"class":48},[28,2335,1109],{"class":85},[28,2337,566],{"class":38},[14,2339,2340,2341,2343,2344,2346,2347,143],{},"所以移動後的 ",[25,2342,1953],{}," 仍然可以正常析構。在這個自定義實現中，我們還明確把它的 ",[25,2345,587],{}," 設成了 ",[25,2348,1676],{},[1491,2350,1475,2352,2354,2355],{"id":2351},"為什麼-buffer-b-a-等同於-buffer-ba",[25,2353,1478],{}," 等同於 ",[25,2356,1482],{},[14,2358,2359,2360,780],{},"下面兩種寫法都在創建一個新的對象 ",[25,2361,2362],{},"b",[18,2364,2366],{"className":20,"code":2365,"language":22,"meta":23,"style":23},"Buffer b = a;  \u002F\u002F 拷贝初始化\nBuffer b(a);   \u002F\u002F 直接初始化\n",[25,2367,2368,2381],{"__ignoreMap":23},[28,2369,2370,2373,2375,2378],{"class":30,"line":31},[28,2371,2372],{"class":38},"Buffer b ",[28,2374,227],{"class":48},[28,2376,2377],{"class":38}," a;",[28,2379,2380],{"class":95},"  \u002F\u002F 拷贝初始化\n",[28,2382,2383,2385,2388,2390,2393,2396],{"class":30,"line":61},[28,2384,1068],{"class":34},[28,2386,2387],{"class":34}," b",[28,2389,82],{"class":38},[28,2391,2392],{"class":34},"a",[28,2394,2395],{"class":38},");",[28,2397,2398],{"class":95},"   \u002F\u002F 直接初始化\n",[14,2400,2401,2402,2404,2405,2407],{},"雖然第一種寫法中出現了等號，但這裡的 ",[25,2403,227],{}," 不是賦值運算符，因為 ",[25,2406,2362],{}," 在這條語句執行前還不存在，它正在被創建。",[14,2409,2410,2411,2413,2414,2416,2417,2419,2420,2422],{},"兩種寫法都會尋找一個能夠使用 ",[25,2412,2392],{}," 來構造 ",[25,2415,2362],{}," 的構造函數。由於 ",[25,2418,2392],{}," 的類型是 ",[25,2421,1068],{},"，所以都會匹配：",[18,2424,2426],{"className":20,"code":2425,"language":22,"meta":23,"style":23},"Buffer(const Buffer& other);\n",[25,2427,2428],{"__ignoreMap":23},[28,2429,2430,2432,2434,2436,2438,2440],{"class":30,"line":31},[28,2431,1068],{"class":34},[28,2433,82],{"class":38},[28,2435,967],{"class":48},[28,2437,970],{"class":38},[28,2439,973],{"class":48},[28,2441,2442],{"class":38}," other);\n",[14,2444,2445],{},"也就是拷貝構造函數。",[14,2447,2448],{},"可以把它們理解成：",[18,2450,2452],{"className":20,"code":2451,"language":22,"meta":23,"style":23},"Buffer b = a;  \u002F\u002F 创建 b，并用 a 初始化\nBuffer b(a);   \u002F\u002F 创建 b，并用 a 初始化\n",[25,2453,2454,2465],{"__ignoreMap":23},[28,2455,2456,2458,2460,2462],{"class":30,"line":31},[28,2457,2372],{"class":38},[28,2459,227],{"class":48},[28,2461,2377],{"class":38},[28,2463,2464],{"class":95},"  \u002F\u002F 创建 b，并用 a 初始化\n",[28,2466,2467,2469,2471,2473,2475,2477],{"class":30,"line":61},[28,2468,1068],{"class":34},[28,2470,2387],{"class":34},[28,2472,82],{"class":38},[28,2474,2392],{"class":34},[28,2476,2395],{"class":38},[28,2478,2479],{"class":95},"   \u002F\u002F 创建 b，并用 a 初始化\n",[14,2481,2482],{},"對於本例，這兩種寫法的效果相同。",[1491,2484,2485],{"id":2485},"構造和賦值的判斷方法",[14,2487,2488],{},"判斷調用的是構造函數還是賦值運算符，關鍵不在於有沒有等號，而在於左側對象是否正在被創建。",[18,2490,2492],{"className":20,"code":2491,"language":22,"meta":23,"style":23},"Buffer a(1000);\n\nBuffer b = a;  \u002F\u002F b 正在创建：调用拷贝构造函数\nBuffer c(a);   \u002F\u002F c 正在创建：调用拷贝构造函数\n\nBuffer d = std::move(a);  \u002F\u002F d 正在创建：调用移动构造函数\nBuffer e(std::move(b));   \u002F\u002F e 正在创建：调用移动构造函数\n",[25,2493,2494,2507,2511,2522,2538,2542,2561],{"__ignoreMap":23},[28,2495,2496,2498,2501,2503,2505],{"class":30,"line":31},[28,2497,1068],{"class":34},[28,2499,2500],{"class":34}," a",[28,2502,82],{"class":38},[28,2504,1270],{"class":85},[28,2506,89],{"class":38},[28,2508,2509],{"class":30,"line":61},[28,2510,269],{"emptyLinePlaceholder":268},[28,2512,2513,2515,2517,2519],{"class":30,"line":67},[28,2514,2372],{"class":38},[28,2516,227],{"class":48},[28,2518,2377],{"class":38},[28,2520,2521],{"class":95},"  \u002F\u002F b 正在创建：调用拷贝构造函数\n",[28,2523,2524,2526,2529,2531,2533,2535],{"class":30,"line":92},[28,2525,1068],{"class":34},[28,2527,2528],{"class":34}," c",[28,2530,82],{"class":38},[28,2532,2392],{"class":34},[28,2534,2395],{"class":38},[28,2536,2537],{"class":95},"   \u002F\u002F c 正在创建：调用拷贝构造函数\n",[28,2539,2540],{"class":30,"line":99},[28,2541,269],{"emptyLinePlaceholder":268},[28,2543,2544,2547,2549,2551,2553,2555,2558],{"class":30,"line":111},[28,2545,2546],{"class":38},"Buffer d ",[28,2548,227],{"class":48},[28,2550,323],{"class":34},[28,2552,39],{"class":38},[28,2554,328],{"class":34},[28,2556,2557],{"class":38},"(a);",[28,2559,2560],{"class":95},"  \u002F\u002F d 正在创建：调用移动构造函数\n",[28,2562,2563,2565,2568,2570,2572,2574,2576,2579],{"class":30,"line":519},[28,2564,1068],{"class":34},[28,2566,2567],{"class":34}," e",[28,2569,82],{"class":38},[28,2571,35],{"class":34},[28,2573,39],{"class":38},[28,2575,328],{"class":34},[28,2577,2578],{"class":38},"(b));",[28,2580,2581],{"class":95},"   \u002F\u002F e 正在创建：调用移动构造函数\n",[14,2583,2584],{},"如果對象已經存在，再使用等號，才是賦值：",[18,2586,2588],{"className":20,"code":2587,"language":22,"meta":23,"style":23},"Buffer x(100);\nBuffer y(200);\n\nx = y;             \u002F\u002F x 已存在：调用拷贝赋值运算符\nx = std::move(y);  \u002F\u002F x 已存在：调用移动赋值运算符\n",[25,2589,2590,2604,2618,2622,2635],{"__ignoreMap":23},[28,2591,2592,2594,2597,2599,2602],{"class":30,"line":31},[28,2593,1068],{"class":34},[28,2595,2596],{"class":34}," x",[28,2598,82],{"class":38},[28,2600,2601],{"class":85},"100",[28,2603,89],{"class":38},[28,2605,2606,2608,2611,2613,2616],{"class":30,"line":61},[28,2607,1068],{"class":34},[28,2609,2610],{"class":34}," y",[28,2612,82],{"class":38},[28,2614,2615],{"class":85},"200",[28,2617,89],{"class":38},[28,2619,2620],{"class":30,"line":67},[28,2621,269],{"emptyLinePlaceholder":268},[28,2623,2624,2627,2629,2632],{"class":30,"line":92},[28,2625,2626],{"class":38},"x ",[28,2628,227],{"class":48},[28,2630,2631],{"class":38}," y;",[28,2633,2634],{"class":95},"             \u002F\u002F x 已存在：调用拷贝赋值运算符\n",[28,2636,2637,2639,2641,2643,2645,2647,2650],{"class":30,"line":99},[28,2638,2626],{"class":38},[28,2640,227],{"class":48},[28,2642,323],{"class":34},[28,2644,39],{"class":38},[28,2646,328],{"class":34},[28,2648,2649],{"class":38},"(y);",[28,2651,2652],{"class":95},"  \u002F\u002F x 已存在：调用移动赋值运算符\n",[14,2654,2655],{},"可以用一句話記憶：",[1641,2657,2658],{},[14,2659,2660],{},"對象正在“出生”時調用構造函數；對象已經存在，只是更換內容時調用賦值運算符。",[14,2662,2663],{},"對應關係如下：",[340,2665,2666,2679],{},[343,2667,2668],{},[346,2669,2670,2673,2676],{},[349,2671,2672],{"align":351},"寫法",[349,2674,2675],{"align":351},"對象狀態",[349,2677,2678],{"align":351},"調用的函數",[360,2680,2681,2695,2707,2721,2734,2749],{},[346,2682,2683,2687,2692],{},[365,2684,2685],{"align":351},[25,2686,1478],{},[365,2688,2689,2691],{"align":351},[25,2690,2362],{}," 正在創建",[365,2693,2694],{"align":351},"拷貝構造函數",[346,2696,2697,2701,2705],{},[365,2698,2699],{"align":351},[25,2700,1482],{},[365,2702,2703,2691],{"align":351},[25,2704,2362],{},[365,2706,2694],{"align":351},[346,2708,2709,2714,2718],{},[365,2710,2711],{"align":351},[25,2712,2713],{},"Buffer b = std::move(a);",[365,2715,2716,2691],{"align":351},[25,2717,2362],{},[365,2719,2720],{"align":351},"移動構造函數",[346,2722,2723,2728,2732],{},[365,2724,2725],{"align":351},[25,2726,2727],{},"Buffer b(std::move(a));",[365,2729,2730,2691],{"align":351},[25,2731,2362],{},[365,2733,2720],{"align":351},[346,2735,2736,2741,2746],{},[365,2737,2738],{"align":351},[25,2739,2740],{},"b = a;",[365,2742,2743,2745],{"align":351},[25,2744,2362],{}," 已經存在",[365,2747,2748],{"align":351},"拷貝賦值運算符",[346,2750,2751,2756,2760],{},[365,2752,2753],{"align":351},[25,2754,2755],{},"b = std::move(a);",[365,2757,2758,2745],{"align":351},[25,2759,2362],{},[365,2761,2762],{"align":351},"移動賦值運算符",[1491,2764,2765],{"id":2765},"拷貝初始化和直接初始化並非永遠相同",[14,2767,2768],{},"從語法分類上看：",[18,2770,2772],{"className":20,"code":2771,"language":22,"meta":23,"style":23},"Buffer b = a;  \u002F\u002F copy-initialization，拷贝初始化\nBuffer b(a);   \u002F\u002F direct-initialization，直接初始化\n",[25,2773,2774,2785],{"__ignoreMap":23},[28,2775,2776,2778,2780,2782],{"class":30,"line":31},[28,2777,2372],{"class":38},[28,2779,227],{"class":48},[28,2781,2377],{"class":38},[28,2783,2784],{"class":95},"  \u002F\u002F copy-initialization，拷贝初始化\n",[28,2786,2787,2789,2791,2793,2795,2797],{"class":30,"line":61},[28,2788,1068],{"class":34},[28,2790,2387],{"class":34},[28,2792,82],{"class":38},[28,2794,2392],{"class":34},[28,2796,2395],{"class":38},[28,2798,2799],{"class":95},"   \u002F\u002F direct-initialization，直接初始化\n",[14,2801,2802,2803,2805,2806,2809],{},"在當前 ",[25,2804,1068],{}," 示例中，它們都會調用普通的拷貝構造函數，因此效果相同。但面對帶有 ",[25,2807,2808],{},"explicit"," 的轉換構造函數時，兩者會出現區別。",[14,2811,1978],{},[18,2813,2815],{"className":20,"code":2814,"language":22,"meta":23,"style":23},"class Number\n{\npublic:\n    explicit Number(int value)\n    {\n    }\n};\n",[25,2816,2817,2824,2828,2832,2849,2853,2857],{"__ignoreMap":23},[28,2818,2819,2821],{"class":30,"line":31},[28,2820,838],{"class":48},[28,2822,2823],{"class":34}," Number\n",[28,2825,2826],{"class":30,"line":61},[28,2827,64],{"class":38},[28,2829,2830],{"class":30,"line":67},[28,2831,870],{"class":48},[28,2833,2834,2837,2840,2842,2844,2846],{"class":30,"line":92},[28,2835,2836],{"class":48},"    explicit",[28,2838,2839],{"class":34}," Number",[28,2841,82],{"class":38},[28,2843,49],{"class":48},[28,2845,1921],{"class":888},[28,2847,2848],{"class":38},")\n",[28,2850,2851],{"class":30,"line":99},[28,2852,916],{"class":38},[28,2854,2855],{"class":30,"line":111},[28,2856,949],{"class":38},[28,2858,2859],{"class":30,"line":519},[28,2860,307],{"class":38},[14,2862,2863],{},"直接初始化可以顯式調用這個構造函數：",[18,2865,2867],{"className":20,"code":2866,"language":22,"meta":23,"style":23},"Number n1(10);  \u002F\u002F 正确\n",[25,2868,2869],{"__ignoreMap":23},[28,2870,2871,2874,2877,2879,2882,2884],{"class":30,"line":31},[28,2872,2873],{"class":34},"Number",[28,2875,2876],{"class":34}," n1",[28,2878,82],{"class":38},[28,2880,2881],{"class":85},"10",[28,2883,2395],{"class":38},[28,2885,2886],{"class":95},"  \u002F\u002F 正确\n",[14,2888,2889,2890,2892],{},"拷貝初始化則不允許隱式使用 ",[25,2891,2808],{}," 構造函數：",[18,2894,2896],{"className":20,"code":2895,"language":22,"meta":23,"style":23},"Number n2 = 10;  \u002F\u002F 错误\n",[25,2897,2898],{"__ignoreMap":23},[28,2899,2900,2903,2905,2908,2910],{"class":30,"line":31},[28,2901,2902],{"class":38},"Number n2 ",[28,2904,227],{"class":48},[28,2906,2907],{"class":85}," 10",[28,2909,233],{"class":38},[28,2911,2912],{"class":95},"  \u002F\u002F 错误\n",[14,2914,2915],{},"因此，更準確的說法是：",[1641,2917,2918],{},[14,2919,2920,2921,1479,2923,2925],{},"對於本例中的同類型對象拷貝，",[25,2922,1478],{},[25,2924,1482],{}," 都調用拷貝構造函數；但“拷貝初始化”和“直接初始化”在所有場景下並不完全等價。",[1641,2927,2928],{},[14,2929,2930,2933,2934,2936,2937,1479,2940,2943,2944,143],{},[119,2931,2932],{},"補充："," 當前 ",[25,2935,1068],{}," 類手動管理動態內存，但只實現了析構函數、拷貝構造函數和移動構造函數。若還要安全支持 ",[25,2938,2939],{},"b = a",[25,2941,2942],{},"b = std::move(a)","，還應實現拷貝賦值運算符與移動賦值運算符，這通常稱為 ",[119,2945,2946],{},"Rule of Five（五法則）",[441,2948,2950],{"id":2949},"示例-3在示例-2-基礎上移動語義讓函數返回大對象高效","示例 3：在示例 2 基礎上，移動語義讓函數返回大對象高效",[18,2952,2954],{"className":20,"code":2953,"language":22,"meta":23,"style":23},"#include \u003Ciostream>\n#include \u003Cvector>\n#include \u003Cstring>\n\n\u002F\u002F 返回大 vector（C++11 起自动启用移动语义，不需要手动 std::move）\nstd::vector\u003Cint> make_data(int n)\n{\n    std::vector\u003Cint> v(n);\n    for (int i = 0; i \u003C n; ++i)\n    {\n        v[i] = i * 10;\n    }\n    return v;  \u002F\u002F ✅ 编译器自动移动（或 RVO 优化），不拷贝\n}\n\nint main()\n{\n    auto data = make_data(5);\n    std::cout \u003C\u003C \"data: \";\n    for (int n : data)\n    {\n        std::cout \u003C\u003C n \u003C\u003C \" \";\n    }\n    std::cout \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"size = \" \u003C\u003C data.size() \u003C\u003C \"\\n\";\n\n    \u002F\u002F ⚠️ 错误做法：不要对返回值用 std::move！\n    \u002F\u002F auto data2 = std::move(make_data(5));  \u002F\u002F ❌ 不要这样写！破坏 RVO 优化\n\n    \u002F\u002F ✅ 正确做法：赋值给已有变量时用 = std::move(source)\n    std::vector\u003Cint> old = {100, 200};\n    std::vector\u003Cint> fresh = std::move(old);  \u002F\u002F 把 old 的内容移给 fresh\n    std::cout \u003C\u003C \"old size = \" \u003C\u003C old.size() \u003C\u003C \"\\n\";      \u002F\u002F 0\n    std::cout \u003C\u003C \"fresh size = \" \u003C\u003C fresh.size() \u003C\u003C \"\\n\";  \u002F\u002F 2\n\n    return 0;\n}\n",[25,2955,2956,2962,2968,2974,2978,2983,3008,3012,3025,3051,3055,3071,3075,3084,3088,3092,3100,3104,3123,3136,3147,3151,3168,3172,3188,3218,3222,3227,3235,3239,3244,3267,3292,3325,3358,3362,3370],{"__ignoreMap":23},[28,2957,2958,2960],{"class":30,"line":31},[28,2959,201],{"class":48},[28,2961,456],{"class":204},[28,2963,2964,2966],{"class":30,"line":61},[28,2965,201],{"class":48},[28,2967,463],{"class":204},[28,2969,2970,2972],{"class":30,"line":67},[28,2971,201],{"class":48},[28,2973,820],{"class":204},[28,2975,2976],{"class":30,"line":92},[28,2977,269],{"emptyLinePlaceholder":268},[28,2979,2980],{"class":30,"line":99},[28,2981,2982],{"class":95},"\u002F\u002F 返回大 vector（C++11 起自动启用移动语义，不需要手动 std::move）\n",[28,2984,2985,2987,2989,2991,2993,2995,2997,3000,3002,3004,3006],{"class":30,"line":111},[28,2986,35],{"class":34},[28,2988,39],{"class":38},[28,2990,42],{"class":34},[28,2992,45],{"class":38},[28,2994,49],{"class":48},[28,2996,52],{"class":38},[28,2998,2999],{"class":34},"make_data",[28,3001,82],{"class":38},[28,3003,49],{"class":48},[28,3005,889],{"class":888},[28,3007,2848],{"class":38},[28,3009,3010],{"class":30,"line":519},[28,3011,64],{"class":38},[28,3013,3014,3016,3018,3020,3022],{"class":30,"line":524},[28,3015,70],{"class":34},[28,3017,73],{"class":38},[28,3019,76],{"class":48},[28,3021,79],{"class":34},[28,3023,3024],{"class":38},"(n);\n",[28,3026,3027,3030,3032,3034,3036,3038,3040,3042,3044,3047,3049],{"class":30,"line":530},[28,3028,3029],{"class":48},"    for",[28,3031,1737],{"class":38},[28,3033,49],{"class":48},[28,3035,1742],{"class":38},[28,3037,227],{"class":48},[28,3039,767],{"class":85},[28,3041,1749],{"class":38},[28,3043,45],{"class":48},[28,3045,3046],{"class":38}," n; ",[28,3048,1757],{"class":48},[28,3050,1760],{"class":38},[28,3052,3053],{"class":30,"line":546},[28,3054,916],{"class":38},[28,3056,3057,3060,3062,3064,3067,3069],{"class":30,"line":569},[28,3058,3059],{"class":38},"        v[i] ",[28,3061,227],{"class":48},[28,3063,1742],{"class":38},[28,3065,3066],{"class":48},"*",[28,3068,2907],{"class":85},[28,3070,566],{"class":38},[28,3072,3073],{"class":30,"line":607},[28,3074,949],{"class":38},[28,3076,3077,3079,3081],{"class":30,"line":640},[28,3078,102],{"class":48},[28,3080,105],{"class":38},[28,3082,3083],{"class":95},"  \u002F\u002F ✅ 编译器自动移动（或 RVO 优化），不拷贝\n",[28,3085,3086],{"class":30,"line":645},[28,3087,114],{"class":38},[28,3089,3090],{"class":30,"line":651},[28,3091,269],{"emptyLinePlaceholder":268},[28,3093,3094,3096,3098],{"class":30,"line":674},[28,3095,49],{"class":48},[28,3097,474],{"class":34},[28,3099,58],{"class":38},[28,3101,3102],{"class":30,"line":692},[28,3103,64],{"class":38},[28,3105,3106,3109,3112,3114,3117,3119,3121],{"class":30,"line":724},[28,3107,3108],{"class":48},"    auto",[28,3110,3111],{"class":38}," data ",[28,3113,227],{"class":48},[28,3115,3116],{"class":34}," make_data",[28,3118,82],{"class":38},[28,3120,514],{"class":85},[28,3122,89],{"class":38},[28,3124,3125,3127,3129,3131,3134],{"class":30,"line":757},[28,3126,70],{"class":34},[28,3128,551],{"class":38},[28,3130,554],{"class":48},[28,3132,3133],{"class":204}," \"data: \"",[28,3135,566],{"class":38},[28,3137,3138,3140,3142,3144],{"class":30,"line":762},[28,3139,3029],{"class":48},[28,3141,1737],{"class":38},[28,3143,49],{"class":48},[28,3145,3146],{"class":38}," n : data)\n",[28,3148,3149],{"class":30,"line":772},[28,3150,916],{"class":38},[28,3152,3153,3155,3157,3159,3161,3163,3166],{"class":30,"line":1018},[28,3154,921],{"class":34},[28,3156,551],{"class":38},[28,3158,554],{"class":48},[28,3160,933],{"class":38},[28,3162,554],{"class":48},[28,3164,3165],{"class":204}," \" \"",[28,3167,566],{"class":38},[28,3169,3170],{"class":30,"line":1045},[28,3171,949],{"class":38},[28,3173,3174,3176,3178,3180,3182,3184,3186],{"class":30,"line":1050},[28,3175,70],{"class":34},[28,3177,551],{"class":38},[28,3179,554],{"class":48},[28,3181,595],{"class":204},[28,3183,560],{"class":85},[28,3185,563],{"class":204},[28,3187,566],{"class":38},[28,3189,3190,3192,3194,3196,3199,3201,3204,3206,3208,3210,3212,3214,3216],{"class":30,"line":1055},[28,3191,70],{"class":34},[28,3193,551],{"class":38},[28,3195,554],{"class":48},[28,3197,3198],{"class":204}," \"size = \"",[28,3200,581],{"class":48},[28,3202,3203],{"class":38}," data.",[28,3205,587],{"class":34},[28,3207,590],{"class":38},[28,3209,554],{"class":48},[28,3211,595],{"class":204},[28,3213,560],{"class":85},[28,3215,563],{"class":204},[28,3217,566],{"class":38},[28,3219,3220],{"class":30,"line":1061},[28,3221,269],{"emptyLinePlaceholder":268},[28,3223,3224],{"class":30,"line":1081},[28,3225,3226],{"class":95},"    \u002F\u002F ⚠️ 错误做法：不要对返回值用 std::move！\n",[28,3228,3229,3232],{"class":30,"line":1096},[28,3230,3231],{"class":95},"    \u002F\u002F auto data2 = std::move(make_data(5));",[28,3233,3234],{"class":95},"  \u002F\u002F ❌ 不要这样写！破坏 RVO 优化\n",[28,3236,3237],{"class":30,"line":1101},[28,3238,269],{"emptyLinePlaceholder":268},[28,3240,3241],{"class":30,"line":1117},[28,3242,3243],{"class":95},"    \u002F\u002F ✅ 正确做法：赋值给已有变量时用 = std::move(source)\n",[28,3245,3246,3248,3250,3252,3255,3257,3259,3261,3263,3265],{"class":30,"line":1129},[28,3247,70],{"class":34},[28,3249,73],{"class":38},[28,3251,76],{"class":48},[28,3253,3254],{"class":38}," old ",[28,3256,227],{"class":48},[28,3258,290],{"class":38},[28,3260,2601],{"class":85},[28,3262,296],{"class":38},[28,3264,2615],{"class":85},[28,3266,307],{"class":38},[28,3268,3269,3271,3273,3275,3278,3280,3282,3284,3286,3289],{"class":30,"line":1155},[28,3270,70],{"class":34},[28,3272,73],{"class":38},[28,3274,76],{"class":48},[28,3276,3277],{"class":38}," fresh ",[28,3279,227],{"class":48},[28,3281,323],{"class":34},[28,3283,39],{"class":38},[28,3285,328],{"class":34},[28,3287,3288],{"class":38},"(old);",[28,3290,3291],{"class":95},"  \u002F\u002F 把 old 的内容移给 fresh\n",[28,3293,3294,3296,3298,3300,3303,3305,3308,3310,3312,3314,3316,3318,3320,3322],{"class":30,"line":1160},[28,3295,70],{"class":34},[28,3297,551],{"class":38},[28,3299,554],{"class":48},[28,3301,3302],{"class":204}," \"old size = \"",[28,3304,581],{"class":48},[28,3306,3307],{"class":38}," old.",[28,3309,587],{"class":34},[28,3311,590],{"class":38},[28,3313,554],{"class":48},[28,3315,595],{"class":204},[28,3317,560],{"class":85},[28,3319,563],{"class":204},[28,3321,233],{"class":38},[28,3323,3324],{"class":95},"      \u002F\u002F 0\n",[28,3326,3327,3329,3331,3333,3336,3338,3341,3343,3345,3347,3349,3351,3353,3355],{"class":30,"line":1165},[28,3328,70],{"class":34},[28,3330,551],{"class":38},[28,3332,554],{"class":48},[28,3334,3335],{"class":204}," \"fresh size = \"",[28,3337,581],{"class":48},[28,3339,3340],{"class":38}," fresh.",[28,3342,587],{"class":34},[28,3344,590],{"class":38},[28,3346,554],{"class":48},[28,3348,595],{"class":204},[28,3350,560],{"class":85},[28,3352,563],{"class":204},[28,3354,233],{"class":38},[28,3356,3357],{"class":95},"  \u002F\u002F 2\n",[28,3359,3360],{"class":30,"line":1173},[28,3361,269],{"emptyLinePlaceholder":268},[28,3363,3364,3366,3368],{"class":30,"line":1178},[28,3365,102],{"class":48},[28,3367,767],{"class":85},[28,3369,566],{"class":38},[28,3371,3372],{"class":30,"line":1186},[28,3373,114],{"class":38},[14,3375,3376,780],{},[119,3377,779],{},[18,3379,3382],{"className":3380,"code":3381,"language":786},[784],"data: 0 10 20 30 40 \nsize = 5\nold size = 0\nfresh size = 2\n",[25,3383,3381],{"__ignoreMap":23},[10,3385,779],{"id":779},[14,3387,3388],{},"見上方每個示例的\"運行結果\"。",[10,3390,3391],{"id":3391},"示例中的關鍵語法解釋",[340,3393,3394,3413],{},[343,3395,3396],{},[346,3397,3398,3401,3404,3407,3410],{},[349,3399,3400],{"align":351},"示例",[349,3402,3403],{"align":351},"講了什麼",[349,3405,3406],{"align":351},"新出現的語法",[349,3408,3409],{"align":351},"為什麼這樣寫",[349,3411,3412],{"align":351},"注意事項",[360,3414,3415,3435,3459],{},[346,3416,3417,3420,3423,3429,3432],{},[365,3418,3419],{"align":351},"示例 1",[365,3421,3422],{"align":351},"拷貝 vs 移動對比",[365,3424,3425,3428],{"align":351},[25,3426,3427],{},"std::move()","、移動後 size=0",[365,3430,3431],{"align":351},"move 後源對象被\"掏空\"，變成有效但未指定狀態",[365,3433,3434],{"align":351},"move 後不要再使用源對象（除非重新賦值）",[346,3436,3437,3440,3443,3453,3456],{},[365,3438,3439],{"align":351},"示例 2",[365,3441,3442],{"align":351},"自定義移動構造",[365,3444,3445,139,3448,139,3450],{"align":351},[25,3446,3447],{},"Buffer(Buffer&&)",[25,3449,1926],{},[25,3451,3452],{},"other.data=nullptr",[365,3454,3455],{"align":351},"移動構造直接偷指針，不分配新內存",[365,3457,3458],{"align":351},"移動後必須把 other.data 置 null，否則重複 delete",[346,3460,3461,3464,3467,3474,3477],{},[365,3462,3463],{"align":351},"示例 3",[365,3465,3466],{"align":351},"返回值和賦值優化",[365,3468,3469,3470,3473],{"align":351},"RVO、",[25,3471,3472],{},"return v"," 不加 move",[365,3475,3476],{"align":351},"編譯器會優化返回值為移動\u002FRVO，加了 move 反而阻止 RVO",[365,3478,3479],{"align":351},"局部變量 return 時不要加 std::move",[10,3481,3483],{"id":3482},"為什麼移動構造要寫-noexcept","為什麼移動構造要寫 noexcept",[14,3485,3486,3489,3490,3492,3493,3495],{},[25,3487,3488],{},"std::vector"," 擴容時要把舊元素搬到新內存。如果元素類型的移動構造可能拋異常，",[25,3491,42],{}," 為了保證異常安全，可能寧願走拷貝構造。也就是說：你明明寫了移動構造，但如果沒寫 ",[25,3494,1926],{},"，容器擴容時不一定用它。",[18,3497,3499],{"className":20,"code":3498,"language":22,"meta":23,"style":23},"class Buffer\n{\npublic:\n    Buffer(Buffer&& other) noexcept\n    {\n        \u002F\u002F 偷资源，不抛异常\n    }\n};\n",[25,3500,3501,3507,3511,3515,3531,3535,3540,3544],{"__ignoreMap":23},[28,3502,3503,3505],{"class":30,"line":31},[28,3504,838],{"class":48},[28,3506,841],{"class":34},[28,3508,3509],{"class":30,"line":61},[28,3510,64],{"class":38},[28,3512,3513],{"class":30,"line":67},[28,3514,870],{"class":48},[28,3516,3517,3519,3521,3523,3525,3527,3529],{"class":30,"line":92},[28,3518,880],{"class":34},[28,3520,82],{"class":38},[28,3522,1068],{"class":34},[28,3524,246],{"class":48},[28,3526,976],{"class":888},[28,3528,1075],{"class":38},[28,3530,1078],{"class":48},[28,3532,3533],{"class":30,"line":99},[28,3534,916],{"class":38},[28,3536,3537],{"class":30,"line":111},[28,3538,3539],{"class":95},"        \u002F\u002F 偷资源，不抛异常\n",[28,3541,3542],{"class":30,"line":519},[28,3543,949],{"class":38},[28,3545,3546],{"class":30,"line":524},[28,3547,307],{"class":38},[14,3549,3550,3551,3554,3555,3558,3559,3561],{},"這個差異在單獨移動一個對象時看不明顯；當 ",[25,3552,3553],{},"vector\u003CBuffer>"," 大量 ",[25,3556,3557],{},"push_back"," 觸發擴容時，是否 ",[25,3560,1926],{}," 才會影響容器選擇移動還是拷貝。",[10,3563,3565],{"id":3564},"stdmove-什麼時候該用什麼時候不該用","std::move 什麼時候該用，什麼時候不該用",[340,3567,3568,3583],{},[343,3569,3570],{},[346,3571,3572,3575,3580],{},[349,3573,3574],{"align":351},"場景",[349,3576,3577,3578],{"align":351},"是否用 ",[25,3579,180],{},[349,3581,3582],{"align":351},"原因",[360,3584,3585,3596,3611,3624,3637],{},[346,3586,3587,3590,3593],{},[365,3588,3589],{"align":351},"把已有對象的資源轉給另一個對象",[365,3591,3592],{"align":351},"✅",[365,3594,3595],{"align":351},"明確轉移所有權或內容",[346,3597,3598,3604,3606],{},[365,3599,2215,3600,3603],{"align":351},[25,3601,3602],{},"unique_ptr"," 傳給接收所有權的函數",[365,3605,3592],{"align":351},[365,3607,3608,3610],{"align":351},[25,3609,3602],{}," 不能拷貝，只能移動",[346,3612,3613,3618,3621],{},[365,3614,3615,3617],{"align":351},[25,3616,1229],{}," 局部變量",[365,3619,3620],{"align":351},"❌",[365,3622,3623],{"align":351},"讓編譯器做 RVO \u002F NRVO",[346,3625,3626,3632,3634],{},[365,3627,3628,3629,3631],{"align":351},"對 ",[25,3630,967],{}," 對象",[365,3633,3620],{"align":351},[365,3635,3636],{"align":351},"const 對象不能被真正移動，通常變成拷貝",[346,3638,3639,3642,3644],{},[365,3640,3641],{"align":351},"move 後還想繼續讀原對象內容",[365,3643,3620],{"align":351},[365,3645,3646],{"align":351},"moved-from 對象只保證可析構、可重新賦值",[10,3648,3649],{"id":3649},"常見錯誤",[14,3651,3652],{},[119,3653,3654],{},"錯誤 1：move 之後繼續使用源對象",[18,3656,3658],{"className":20,"code":3657,"language":22,"meta":23,"style":23},"std::vector\u003Cint> a = {1, 2, 3};\nstd::vector\u003Cint> b = std::move(a);\nstd::cout \u003C\u003C a[0];  \u002F\u002F ❌ a 已经被\"掏空\"，行为未定义\n",[25,3659,3660,3687,3709],{"__ignoreMap":23},[28,3661,3662,3664,3666,3668,3671,3673,3675,3677,3679,3681,3683,3685],{"class":30,"line":31},[28,3663,35],{"class":34},[28,3665,73],{"class":38},[28,3667,76],{"class":48},[28,3669,3670],{"class":38}," a ",[28,3672,227],{"class":48},[28,3674,290],{"class":38},[28,3676,293],{"class":85},[28,3678,296],{"class":38},[28,3680,299],{"class":85},[28,3682,296],{"class":38},[28,3684,304],{"class":85},[28,3686,307],{"class":38},[28,3688,3689,3691,3693,3695,3698,3700,3702,3704,3706],{"class":30,"line":61},[28,3690,35],{"class":34},[28,3692,73],{"class":38},[28,3694,76],{"class":48},[28,3696,3697],{"class":38}," b ",[28,3699,227],{"class":48},[28,3701,323],{"class":34},[28,3703,39],{"class":38},[28,3705,328],{"class":34},[28,3707,3708],{"class":38},"(a);\n",[28,3710,3711,3713,3715,3717,3720,3722,3725],{"class":30,"line":67},[28,3712,35],{"class":34},[28,3714,551],{"class":38},[28,3716,554],{"class":48},[28,3718,3719],{"class":38}," a[",[28,3721,1676],{"class":85},[28,3723,3724],{"class":38},"];",[28,3726,3727],{"class":95},"  \u002F\u002F ❌ a 已经被\"掏空\"，行为未定义\n",[14,3729,3730],{},"正確做法：move 後不要再使用源對象，或者先檢查是否為空。",[14,3732,3733],{},[119,3734,3735],{},"錯誤 2：對 const 對象用 move",[18,3737,3739],{"className":20,"code":3738,"language":22,"meta":23,"style":23},"const std::vector\u003Cint> a = {1, 2, 3};\nstd::vector\u003Cint> b = std::move(a);  \u002F\u002F ❌ 实际执行的是拷贝！const 对象不能移动\n",[25,3740,3741,3769],{"__ignoreMap":23},[28,3742,3743,3745,3747,3749,3751,3753,3755,3757,3759,3761,3763,3765,3767],{"class":30,"line":31},[28,3744,967],{"class":48},[28,3746,323],{"class":34},[28,3748,73],{"class":38},[28,3750,76],{"class":48},[28,3752,3670],{"class":38},[28,3754,227],{"class":48},[28,3756,290],{"class":38},[28,3758,293],{"class":85},[28,3760,296],{"class":38},[28,3762,299],{"class":85},[28,3764,296],{"class":38},[28,3766,304],{"class":85},[28,3768,307],{"class":38},[28,3770,3771,3773,3775,3777,3779,3781,3783,3785,3787,3789],{"class":30,"line":61},[28,3772,35],{"class":34},[28,3774,73],{"class":38},[28,3776,76],{"class":48},[28,3778,3697],{"class":38},[28,3780,227],{"class":48},[28,3782,323],{"class":34},[28,3784,39],{"class":38},[28,3786,328],{"class":34},[28,3788,2557],{"class":38},[28,3790,3791],{"class":95},"  \u002F\u002F ❌ 实际执行的是拷贝！const 对象不能移动\n",[14,3793,3794],{},"正確做法：move 不要用於 const 對象。",[14,3796,3797],{},[119,3798,3799],{},"錯誤 3：給返回值加 std::move",[18,3801,3803],{"className":20,"code":3802,"language":22,"meta":23,"style":23},"std::vector\u003Cint> func()\n{\n    std::vector\u003Cint> v(1000);\n    return std::move(v);  \u002F\u002F ❌ 阻止了 RVO 优化！\n}\n",[25,3804,3805,3824,3828,3844,3860],{"__ignoreMap":23},[28,3806,3807,3809,3811,3813,3815,3817,3819,3822],{"class":30,"line":31},[28,3808,35],{"class":34},[28,3810,39],{"class":38},[28,3812,42],{"class":34},[28,3814,45],{"class":38},[28,3816,49],{"class":48},[28,3818,52],{"class":38},[28,3820,3821],{"class":34},"func",[28,3823,58],{"class":38},[28,3825,3826],{"class":30,"line":61},[28,3827,64],{"class":38},[28,3829,3830,3832,3834,3836,3838,3840,3842],{"class":30,"line":67},[28,3831,70],{"class":34},[28,3833,73],{"class":38},[28,3835,76],{"class":48},[28,3837,79],{"class":34},[28,3839,82],{"class":38},[28,3841,1270],{"class":85},[28,3843,89],{"class":38},[28,3845,3846,3848,3850,3852,3854,3857],{"class":30,"line":92},[28,3847,102],{"class":48},[28,3849,323],{"class":34},[28,3851,39],{"class":38},[28,3853,328],{"class":34},[28,3855,3856],{"class":38},"(v);",[28,3858,3859],{"class":95},"  \u002F\u002F ❌ 阻止了 RVO 优化！\n",[28,3861,3862],{"class":30,"line":99},[28,3863,114],{"class":38},[14,3865,3866,3867,3870],{},"正確做法：直接 ",[25,3868,3869],{},"return v;","，編譯器會自動優化。",[14,3872,3873],{},[119,3874,3875],{},"錯誤 4：移動構造函數沒有標記 noexcept",[18,3877,3879],{"className":20,"code":3878,"language":22,"meta":23,"style":23},"MyClass(MyClass&& other) { ... }  \u002F\u002F 缺少 noexcept\n",[25,3880,3881],{"__ignoreMap":23},[28,3882,3883,3886,3889,3891,3894],{"class":30,"line":31},[28,3884,3885],{"class":34},"MyClass",[28,3887,3888],{"class":38},"(MyClass",[28,3890,246],{"class":48},[28,3892,3893],{"class":38}," other) { ... }",[28,3895,3896],{"class":95},"  \u002F\u002F 缺少 noexcept\n",[14,3898,3899,3900,3903],{},"正確做法：",[25,3901,3902],{},"MyClass(MyClass&& other) noexcept { ... }"," — 不標記 noexcept 會導致 vector 等容器在擴容時退化為拷貝。",[10,3905,3906],{"id":3906},"使用建議",[1461,3908,3909,3915,3928,3934,3942],{},[130,3910,3911,3914],{},[119,3912,3913],{},"return 時不要加 std::move","：讓編譯器自動優化（RVO\u002FNRVO）。",[130,3916,3917,3923,3924,3927],{},[119,3918,3919,3920],{},"賦值給已有對象時用 ",[25,3921,3922],{},"std::move(source)","：用 ",[25,3925,3926],{},"target = std::move(source)"," 避免拷貝。",[130,3929,3930,3933],{},[119,3931,3932],{},"move 後不要再用源對象","（除非重新賦值或重置）。",[130,3935,3936,3941],{},[119,3937,3938,3939],{},"移動構造函數必須標記 ",[25,3940,1926],{},"：否則 STL 容器在擴容時不會調用它。",[130,3943,3944,3949],{},[119,3945,3946,3948],{},[25,3947,180],{}," 不移動任何東西","：它只是類型轉換，把左值變成右值引用。真正的移動發生在移動構造函數或移動賦值運算符中。",[10,3951,3952],{"id":3952},"小結",[127,3954,3955,3958,3963,3966,3971,3974],{},[130,3956,3957],{},"左值有名字、可取地址；右值是臨時的（字面量、臨時對象）。",[130,3959,163,3960,3962],{},[25,3961,166],{}," 綁定到右值。",[130,3964,3965],{},"移動語義\"偷\"右值的資源，避免深拷貝。",[130,3967,3968,3970],{},[25,3969,158],{}," 把左值轉為右值，告訴編譯器\"x 可以被偷\"。",[130,3972,3973],{},"return 局部變量時不要加 std::move（讓編譯器自己優化）。",[130,3975,3938,3976,143],{},[25,3977,1926],{},[441,3979,3980],{"id":3980},"工程拓展",[14,3982,3983],{},"在 ROS2 中，發佈消息、傳輸大量傳感器數據（如點雲、圖像）時，移動語義能避免大數據拷貝。在 Boost.Asio 中，異步操作的回調參數大量使用移動語義來高效傳遞數據緩衝區。",[3985,3986,3987],"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 pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":23,"searchDepth":61,"depth":61,"links":3989},[3990,3991,3992,3993,3994,3995,3996,4001,4002,4003,4004,4005,4006,4007],{"id":12,"depth":61,"text":12},{"id":125,"depth":61,"text":125},{"id":184,"depth":61,"text":185},{"id":191,"depth":61,"text":191},{"id":211,"depth":61,"text":211},{"id":337,"depth":61,"text":338},{"id":439,"depth":61,"text":439,"children":3997},[3998,3999,4000],{"id":443,"depth":67,"text":444},{"id":791,"depth":67,"text":792},{"id":2949,"depth":67,"text":2950},{"id":779,"depth":61,"text":779},{"id":3391,"depth":61,"text":3391},{"id":3482,"depth":61,"text":3483},{"id":3564,"depth":61,"text":3565},{"id":3649,"depth":61,"text":3649},{"id":3906,"depth":61,"text":3906},{"id":3952,"depth":61,"text":3952,"children":4008},[4009],{"id":3980,"depth":67,"text":3980},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","2000-1000","2023-10-05","wiki\u002F2023-10-05-cplusplus-jiao-xue","zh-tw:2023-10-05-cplusplus-jiao-xue","\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义",false,null,"zh-TW","zh-tw",{},{"title":5,"description":23},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义","PrYFjknv68tE8GJp4sZRK4RbFIKcmJUspjgXrVcs2xY",[4029,4035,4040,4045,4050,4055,4060,4065,4070,4075,4079,4084,4089,4094,4099,4104,4109,4114,4119,4124,4129,4134,4139,4144,4149,4154,4159,4164,4169,4174,4179,4184,4189,4194,4199,4204,4209,4214,4219,4223,4228,4233,4238,4243,4248,4253,4258,4259,4264,4269,4274,4279,4284,4289,4294,4299,4304,4309,4314,4319,4324,4329,4334,4339,4344,4349,4354,4359,4364,4369,4374,4379,4384,4389,4394,4399,4404,4409,4414,4419,4424,4429],{"path":4030,"stem":4031,"title":4032,"date":4012,"chapterOrder":4033,"chapterDepth":4034,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0100-C++开发环境搭建与测试","C++開發環境搭建與測試","0100",0,{"path":4036,"stem":4037,"title":4038,"date":4012,"chapterOrder":4039,"chapterDepth":4034,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++基礎初識","0200",{"path":4041,"stem":4042,"title":4043,"date":4012,"chapterOrder":4044,"chapterDepth":4034,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0300-shu-ju-lei-xing-yu-shu-ju-cun-fang","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0300-数据类型与数据存放","數據類型與數據存放","0300",{"path":4046,"stem":4047,"title":4048,"date":4012,"chapterOrder":4049,"chapterDepth":4034,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","輸入輸出","0400",{"path":4051,"stem":4052,"title":4053,"date":4012,"chapterOrder":4054,"chapterDepth":4034,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","運算符","0500",{"path":4056,"stem":4057,"title":4058,"date":4012,"chapterOrder":4059,"chapterDepth":4034,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","程序流程結構","0600",{"path":4061,"stem":4062,"title":4063,"date":4012,"chapterOrder":4064,"chapterDepth":4034,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","數組","0700",{"path":4066,"stem":4067,"title":4068,"date":4012,"chapterOrder":4069,"chapterDepth":4034,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","函數與頭文件","0800",{"path":4071,"stem":4072,"title":4073,"date":4012,"chapterOrder":4074,"chapterDepth":4034,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","指針","0900",{"path":4076,"stem":4077,"title":4078,"date":4012,"chapterOrder":1270,"chapterDepth":4034,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","結構體與共用體",{"path":4080,"stem":4081,"title":4082,"date":4012,"chapterOrder":4083,"chapterDepth":4034,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1100-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1100-内存分区与生命周期","內存分區與生命週期","1100",{"path":4085,"stem":4086,"title":4087,"date":4012,"chapterOrder":4088,"chapterDepth":4034,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","引用","1200",{"path":4090,"stem":4091,"title":4092,"date":4012,"chapterOrder":4093,"chapterDepth":4034,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao-yu-ming-ming-kong-jian","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高与命名空间","函數提高與命名空間","1300",{"path":4095,"stem":4096,"title":4097,"date":4012,"chapterOrder":4098,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","封裝","1400-0100",{"path":4100,"stem":4101,"title":4102,"date":4012,"chapterOrder":4103,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0200-dui-xiang-chu-shi-hua-he-qing-li","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0200-对象初始化和清理","對象初始化和清理","1400-0200",{"path":4105,"stem":4106,"title":4107,"date":4012,"chapterOrder":4108,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0300-dui-xiang-mo-xing-yu-this-zhi-zhen","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0300-对象模型与this指针","對象模型與this指針","1400-0300",{"path":4110,"stem":4111,"title":4112,"date":4012,"chapterOrder":4113,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0400-you-yuan-yu-yun-suan-fu-zhong-zai","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0400-友元与运算符重载","友元與運算符重載","1400-0400",{"path":4115,"stem":4116,"title":4117,"date":4012,"chapterOrder":4118,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","繼承","1400-0500",{"path":4120,"stem":4121,"title":4122,"date":4012,"chapterOrder":4123,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","多態","1400-0600",{"path":4125,"stem":4126,"title":4127,"date":4012,"chapterOrder":4128,"chapterDepth":4034,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","類和對象","1400",{"path":4130,"stem":4131,"title":4132,"date":4012,"chapterOrder":4133,"chapterDepth":4034,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","文件操作","1500",{"path":4135,"stem":4136,"title":4137,"date":4012,"chapterOrder":4138,"chapterDepth":4034,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","異常處理","1600",{"path":4140,"stem":4141,"title":4142,"date":4012,"chapterOrder":4143,"chapterDepth":4034,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","模板","1700",{"path":4145,"stem":4146,"title":4147,"date":4012,"chapterOrder":4148,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","STL初識","1800-0100",{"path":4150,"stem":4151,"title":4152,"date":4012,"chapterOrder":4153,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0200-std-array","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0200-std-array","std::array","1800-0200",{"path":4155,"stem":4156,"title":4157,"date":4012,"chapterOrder":4158,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string容器","1800-0300",{"path":4160,"stem":4161,"title":4162,"date":4012,"chapterOrder":4163,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-rong-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector容器","vector 容器","1800-0400",{"path":4165,"stem":4166,"title":4167,"date":4012,"chapterOrder":4168,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-deque-rong-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-deque容器","deque 容器","1800-0500",{"path":4170,"stem":4171,"title":4172,"date":4012,"chapterOrder":4173,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-stack-rong-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-stack容器","stack 容器","1800-0600",{"path":4175,"stem":4176,"title":4177,"date":4012,"chapterOrder":4178,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-queue-rong-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-queue容器","queue 容器","1800-0700",{"path":4180,"stem":4181,"title":4182,"date":4012,"chapterOrder":4183,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-list-rong-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-list容器","list 容器","1800-0800",{"path":4185,"stem":4186,"title":4187,"date":4012,"chapterOrder":4188,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0900-set-rong-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0900-set容器","set \u002F multiset 容器","1800-0900",{"path":4190,"stem":4191,"title":4192,"date":4012,"chapterOrder":4193,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1000-map-rong-qi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1000-map容器","map \u002F multimap 容器","1800-1000",{"path":4195,"stem":4196,"title":4197,"date":4012,"chapterOrder":4198,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1100-han-shu-dui-xiang-yu-wei-ci","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1100-函数对象与谓词","函數對象與謂詞","1800-1100",{"path":4200,"stem":4201,"title":4202,"date":4012,"chapterOrder":4203,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1200-chang-yong-suan-fa","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1200-常用算法","常用算法","1800-1200",{"path":4205,"stem":4206,"title":4207,"date":4012,"chapterOrder":4208,"chapterDepth":4034,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","STL提高編程","1800",{"path":4210,"stem":4211,"title":4212,"date":4012,"chapterOrder":4213,"chapterDepth":4034,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++類型轉換","1900",{"path":4215,"stem":4216,"title":4217,"date":4012,"chapterOrder":4218,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","auto","2000-0100",{"path":4220,"stem":4221,"title":2314,"date":4012,"chapterOrder":4222,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","2000-0200",{"path":4224,"stem":4225,"title":4226,"date":4012,"chapterOrder":4227,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","using","2000-0300",{"path":4229,"stem":4230,"title":4231,"date":4012,"chapterOrder":4232,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0400-enum-class","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0400-enum-class","enum class","2000-0400",{"path":4234,"stem":4235,"title":4236,"date":4012,"chapterOrder":4237,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0500-fan-wei-for-xun-huan","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0500-范围for循环","範圍 for 循環","2000-0500",{"path":4239,"stem":4240,"title":4241,"date":4012,"chapterOrder":4242,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","結構化綁定","2000-0600",{"path":4244,"stem":4245,"title":4246,"date":4012,"chapterOrder":4247,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","constexpr","2000-0700",{"path":4249,"stem":4250,"title":4251,"date":4012,"chapterOrder":4252,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII","2000-0800",{"path":4254,"stem":4255,"title":4256,"date":4012,"chapterOrder":4257,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","智能指針","2000-0900",{"path":4010,"stem":4026,"title":5,"date":4012,"chapterOrder":4011,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},{"path":4260,"stem":4261,"title":4262,"date":4012,"chapterOrder":4263,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","Lambda 表達式","2000-1100",{"path":4265,"stem":4266,"title":4267,"date":4012,"chapterOrder":4268,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","std::function","2000-1200",{"path":4270,"stem":4271,"title":4272,"date":4012,"chapterOrder":4273,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","std::bind","2000-1300",{"path":4275,"stem":4276,"title":4277,"date":4012,"chapterOrder":4278,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional","std::optional","2000-1400",{"path":4280,"stem":4281,"title":4282,"date":4012,"chapterOrder":4283,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1500-std-variant","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1500-std-variant","std::variant","2000-1500",{"path":4285,"stem":4286,"title":4287,"date":4012,"chapterOrder":4288,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1600-std-span","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1600-std-span","std::span","2000-1600",{"path":4290,"stem":4291,"title":4292,"date":4012,"chapterOrder":4293,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1700-std-format-print","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1700-std-format-print","std::format \u002F std::print","2000-1700",{"path":4295,"stem":4296,"title":4297,"date":4012,"chapterOrder":4298,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1800-std-chrono","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1800-std-chrono","std::chrono","2000-1800",{"path":4300,"stem":4301,"title":4302,"date":4012,"chapterOrder":4303,"chapterDepth":61,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0100-std-thread","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0100-std-thread","std::thread 與 join","2000-1900-0100",{"path":4305,"stem":4306,"title":4307,"date":4012,"chapterOrder":4308,"chapterDepth":61,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-mutex-lock-guard","mutex 與 lock_guard","2000-1900-0200",{"path":4310,"stem":4311,"title":4312,"date":4012,"chapterOrder":4313,"chapterDepth":61,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0300-std-atomic","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0300-std-atomic","std::atomic","2000-1900-0300",{"path":4315,"stem":4316,"title":4317,"date":4012,"chapterOrder":4318,"chapterDepth":61,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0400-condition-variable","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0400-condition-variable","condition_variable","2000-1900-0400",{"path":4320,"stem":4321,"title":4322,"date":4012,"chapterOrder":4323,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bian-cheng","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发编程","併發編程","2000-1900",{"path":4325,"stem":4326,"title":4327,"date":4012,"chapterOrder":4328,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2000-std-filesystem","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2000-std-filesystem","std::filesystem","2000-2000",{"path":4330,"stem":4331,"title":4332,"date":4012,"chapterOrder":4333,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","modules 簡介","2000-2100",{"path":4335,"stem":4336,"title":4337,"date":4012,"chapterOrder":4338,"chapterDepth":4034,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","現代C++","2000",{"path":4340,"stem":4341,"title":4342,"date":4012,"chapterOrder":4343,"chapterDepth":61,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0100-ding-shi-qi-yu-yi-bu-io","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0100-定时器与异步IO","定時器與異步 IO","2100-0100-0100",{"path":4345,"stem":4346,"title":4347,"date":4012,"chapterOrder":4348,"chapterDepth":61,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0200-boost-asio-ji-chu","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0200-Boost.Asio基础","Boost.Asio 基礎","2100-0100-0200",{"path":4350,"stem":4351,"title":4352,"date":4012,"chapterOrder":4353,"chapterDepth":61,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0300-chuan-kou-tong-xin","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0300-串口通信","串口通信","2100-0100-0300",{"path":4355,"stem":4356,"title":4357,"date":4012,"chapterOrder":4358,"chapterDepth":61,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0400-tcp-tong-xin","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0400-TCP通信","TCP 通信","2100-0100-0400",{"path":4360,"stem":4361,"title":4362,"date":4012,"chapterOrder":4363,"chapterDepth":61,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0500-udp-tong-xin","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0500-UDP通信","UDP 通信","2100-0100-0500",{"path":4365,"stem":4366,"title":4367,"date":4012,"chapterOrder":4368,"chapterDepth":61,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0600-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0600-机器人工程写法与ROS2集成","機器人工程寫法與 ROS2 集成","2100-0100-0600",{"path":4370,"stem":4371,"title":4372,"date":4012,"chapterOrder":4373,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","Boost.Asio異步IO庫","2100-0100",{"path":4375,"stem":4376,"title":4377,"date":4012,"chapterOrder":4378,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0200-eigen-xian-xing-dai-shu-ku","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0200-Eigen线性代数库","Eigen線性代數庫","2100-0200",{"path":4380,"stem":4381,"title":4382,"date":4012,"chapterOrder":4383,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0300-opencv-ji-suan-ji-shi-jue-ku","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0300-OpenCV计算机视觉库","OpenCV計算機視覺庫","2100-0300",{"path":4385,"stem":4386,"title":4387,"date":4012,"chapterOrder":4388,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0400-pcl-dian-yun-ku","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0400-PCL点云库","PCL點雲庫","2100-0400",{"path":4390,"stem":4391,"title":4392,"date":4012,"chapterOrder":4393,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0500-sophus-li-qun-li-dai-shu-ku","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0500-Sophus李群李代数库","Sophus 李群李代數庫","2100-0500",{"path":4395,"stem":4396,"title":4397,"date":4012,"chapterOrder":4398,"chapterDepth":4034,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","常用庫學習","2100",{"path":4400,"stem":4401,"title":4402,"date":4012,"chapterOrder":4403,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0100-cmakepresets-yu-gou-jian-an-zhuang","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0100-CMakePresets与构建安装","CMakePresets與構建安裝","2200-0100",{"path":4405,"stem":4406,"title":4407,"date":4012,"chapterOrder":4408,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项","頂層CMake與公共編譯選項","2200-0200",{"path":4410,"stem":4411,"title":4412,"date":4012,"chapterOrder":4413,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0300-src-yu-lib-mo-kuai-cmake-xiang-jie","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0300-src与lib模块CMake详解","src與lib模塊CMake詳解","2200-0300",{"path":4415,"stem":4416,"title":4417,"date":4012,"chapterOrder":4418,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法","第三方庫依賴寫法","2200-0400",{"path":4420,"stem":4421,"title":4422,"date":4012,"chapterOrder":4423,"chapterDepth":31,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0500-mu-ban-kuo-zhan-yu-chang-jian-wen-ti","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0500-模板扩展与常见问题","模板擴展與常見問題","2200-0500",{"path":4425,"stem":4426,"title":4427,"date":4012,"chapterOrder":4428,"chapterDepth":4034,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":4019},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake工程模板","2200",{"path":4015,"stem":4430,"title":4431,"date":4012,"chapterOrder":4020,"chapterDepth":4034,"docKey":4014,"docRoot":4015,"docTitle":4016,"isWikiDoc":268,"isWikiIndex":268},"_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++教程",{"variants":4433},[4434,4437,4440,4443,4444],{"path":4435,"localeSlug":4436,"i18nKey":4018},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","en-us",{"path":4438,"localeSlug":4439,"i18nKey":4018},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","zh-hant",{"path":4441,"localeSlug":4442,"i18nKey":4018},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","zh-hk",{"path":4010,"localeSlug":4022,"i18nKey":4018},{"path":4445,"localeSlug":4446,"i18nKey":4018},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","zh-cn",[4435,4025,4438,4025,4441,4025,4010,4025,4445,4025],1784646894737]