[{"data":1,"prerenderedAt":3587},["ShallowReactive",2],{"wiki-page-\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan":3,"wiki-doc-items-\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan":3168,"language-switcher-data-\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan":3571,"wiki-i18n-paths-\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan":3586},{"id":4,"title":5,"body":6,"canonicalPath":3149,"chapterDepth":3150,"chapterOrder":3151,"date":3152,"description":84,"docI18nKey":3153,"docKey":3154,"docRoot":3155,"docTitle":3156,"extension":3157,"i18nKey":3158,"isBlogPost":3159,"isWikiDoc":525,"isWikiIndex":3159,"layout":3160,"legacyPath":3160,"locale":3161,"localeSlug":3162,"meta":3163,"navigation":525,"path":3149,"seo":3164,"sourcePath":3165,"sourceStem":3158,"stem":3166,"wikiDepth":91,"__hash__":3167},"content\u002F_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换.md","C++類型轉換",{"type":7,"value":8,"toc":3120},"minimark",[9,13,17,52,62,65,68,71,75,78,122,146,149,180,191,194,197,228,242,245,253,256,274,277,280,367,370,374,377,380,383,404,415,418,489,495,498,502,510,762,768,776,780,785,1146,1150,1156,1172,1181,1196,1337,1341,1347,1360,1389,1401,1404,1413,1418,1421,1439,1454,1470,1473,1489,1492,1497,1510,1519,1581,1584,1589,1596,1601,1604,1609,1616,1985,1990,1996,1999,2002,2032,2043,2057,2063,2069,2072,2078,2081,2108,2114,2120,2123,2129,2136,2139,2145,2148,2151,2192,2204,2207,2224,2233,2235,2241,2244,2275,2285,2293,2305,2308,2317,2320,2326,2329,2362,2370,2376,2382,2385,2391,2403,2406,2423,2426,2432,2458,2460,2466,2482,2484,2490,2500,2502,2508,2511,2527,2530,2623,2627,2638,2641,2690,2693,2746,2752,2755,2784,2796,2802,2806,2809,2835,2841,2844,2866,2872,2884,2887,2891,2935,2941,2946,2950,2996,3002,3006,3044,3050,3053,3083,3086,3113,3116],[10,11,12],"h2",{"id":12},"本節解決什麼問題",[14,15,16],"p",{},"C++ 中經常會遇到“把一種類型當成另一種類型使用”的場景，例如：",[18,19,20,33,39,42,49],"ul",{},[21,22,23,24,28,29,32],"li",{},"把 ",[25,26,27],"code",{},"double"," 轉成 ",[25,30,31],{},"int","。",[21,34,23,35,38],{},[25,36,37],{},"enum class"," 轉成整數。",[21,40,41],{},"把基類指針安全地轉成派生類指針。",[21,43,44,45,48],{},"臨時去掉 ",[25,46,47],{},"const"," 限定，適配舊接口。",[21,50,51],{},"在底層代碼裡把指針、整數、字節視圖互相轉換。",[14,53,54,55,58,59,61],{},"C 風格強轉寫法 ",[25,56,57],{},"(目标类型)表达式"," 能做很多事，但問題也在這裡：它太“萬能”，讀代碼的人很難一眼看出這次轉換到底是普通數值轉換、繼承層級轉換、去掉 ",[25,60,47],{},"，還是危險的底層重解釋。",[14,63,64],{},"C++ 提供了四個更明確的類型轉換運算符，讓轉換意圖寫在代碼裡。",[10,66,67],{"id":67},"隱式轉換和顯式轉換",[14,69,70],{},"類型轉換可以分為隱式轉換和顯式轉換。",[72,73,74],"h3",{"id":74},"隱式轉換",[14,76,77],{},"隱式轉換是由編譯器自動完成的轉換，代碼中不需要寫出轉換操作。例如：",[79,80,85],"pre",{"className":81,"code":82,"language":83,"meta":84,"style":84},"language-cpp shiki shiki-themes github-light github-dark","int count = 10;\ndouble result = count;\n","cpp","",[25,86,87,109],{"__ignoreMap":84},[88,89,92,95,99,102,106],"span",{"class":90,"line":91},"line",1,[88,93,31],{"class":94},"szBVR",[88,96,98],{"class":97},"sVt8B"," count ",[88,100,101],{"class":94},"=",[88,103,105],{"class":104},"sj4cs"," 10",[88,107,108],{"class":97},";\n",[88,110,112,114,117,119],{"class":90,"line":111},2,[88,113,27],{"class":94},[88,115,116],{"class":97}," result ",[88,118,101],{"class":94},[88,120,121],{"class":97}," count;\n",[14,123,124,125,128,129,131,132,128,135,137,138,141,142,145],{},"這裡 ",[25,126,127],{},"count"," 是 ",[25,130,31],{},"，而 ",[25,133,134],{},"result",[25,136,27],{},"。編譯器會自動把整數 ",[25,139,140],{},"10"," 轉換成浮點數 ",[25,143,144],{},"10.0","，這就是隱式轉換。",[14,147,148],{},"隱式轉換寫起來方便，但有些轉換可能造成數據丟失：",[79,150,152],{"className":81,"code":151,"language":83,"meta":84,"style":84},"double price = 19.8;\nint whole_price = price;\n",[25,153,154,168],{"__ignoreMap":84},[88,155,156,158,161,163,166],{"class":90,"line":91},[88,157,27],{"class":94},[88,159,160],{"class":97}," price ",[88,162,101],{"class":94},[88,164,165],{"class":104}," 19.8",[88,167,108],{"class":97},[88,169,170,172,175,177],{"class":90,"line":111},[88,171,31],{"class":94},[88,173,174],{"class":97}," whole_price ",[88,176,101],{"class":94},[88,178,179],{"class":97}," price;\n",[14,181,182,183,186,187,190],{},"這段代碼通常可以通過編譯，但 ",[25,184,185],{},"whole_price"," 得到的是 ",[25,188,189],{},"19","，小數部分會被丟棄。因為轉換沒有明確寫出來，閱讀代碼時也容易忽略它。",[72,192,193],{"id":193},"顯式轉換",[14,195,196],{},"顯式轉換是程序員在代碼中明確要求進行的轉換。例如：",[79,198,200],{"className":81,"code":199,"language":83,"meta":84,"style":84},"double price = 19.8;\nint whole_price = static_cast\u003Cint>(price);\n",[25,201,202,214],{"__ignoreMap":84},[88,203,204,206,208,210,212],{"class":90,"line":91},[88,205,27],{"class":94},[88,207,160],{"class":97},[88,209,101],{"class":94},[88,211,165],{"class":104},[88,213,108],{"class":97},[88,215,216,218,220,222,225],{"class":90,"line":111},[88,217,31],{"class":94},[88,219,174],{"class":97},[88,221,101],{"class":94},[88,223,224],{"class":94}," static_cast\u003Cint>",[88,226,227],{"class":97},"(price);\n",[14,229,230,231,234,235,238,239,241],{},"這裡的 ",[25,232,233],{},"static_cast\u003Cint>"," 明確表示：程序員知道 ",[25,236,237],{},"price"," 會被轉換成 ",[25,240,31],{},"，也接受小數部分被丟棄。",[14,243,244],{},"兩者的區別可以簡單理解為：",[18,246,247,250],{},[21,248,249],{},"隱式轉換：編譯器根據上下文自動轉換。",[21,251,252],{},"顯式轉換：程序員在代碼中明確寫出要轉換成什麼類型。",[14,254,255],{},"隱式轉換並不一定不安全，顯式轉換也不代表一定安全。顯式寫出轉換的主要價值，是讓轉換意圖更清楚，並讓編譯器按照指定的轉換方式進行檢查。",[14,257,258,259,262,263,262,266,269,270,273],{},"下面介紹的 ",[25,260,261],{},"static_cast","、",[25,264,265],{},"dynamic_cast",[25,267,268],{},"const_cast"," 和 ",[25,271,272],{},"reinterpret_cast","，都是 C++ 提供的顯式類型轉換。",[10,275,276],{"id":276},"這個特性是什麼",[14,278,279],{},"C++ 的四種顯式類型轉換是：",[281,282,283,300],"table",{},[284,285,286],"thead",{},[287,288,289,294,297],"tr",{},[290,291,293],"th",{"align":292},"left","轉換方式",[290,295,296],{"align":292},"主要用途",[290,298,299],{"align":292},"安全程度",[301,302,303,317,334,354],"tbody",{},[287,304,305,311,314],{},[306,307,308],"td",{"align":292},[25,309,310],{},"static_cast\u003CT>(expr)",[306,312,313],{"align":292},"常規類型轉換，如數值、枚舉、父子類上行轉換",[306,315,316],{"align":292},"常用，編譯期檢查",[287,318,319,324,327],{},[306,320,321],{"align":292},[25,322,323],{},"dynamic_cast\u003CT>(expr)",[306,325,326],{"align":292},"多態類型的安全向下轉換",[306,328,329,330,333],{"align":292},"運行期檢查，失敗返回 ",[25,331,332],{},"nullptr"," 或拋異常",[287,335,336,341,351],{},[306,337,338],{"align":292},[25,339,340],{},"const_cast\u003CT>(expr)",[306,342,343,344,346,347,350],{"align":292},"添加或移除 ",[25,345,47],{}," \u002F ",[25,348,349],{},"volatile"," 限定",[306,352,353],{"align":292},"要非常剋制",[287,355,356,361,364],{},[306,357,358],{"align":292},[25,359,360],{},"reinterpret_cast\u003CT>(expr)",[306,362,363],{"align":292},"底層二進制重解釋，如指針和整數互轉",[306,365,366],{"align":292},"最危險，少用",[14,368,369],{},"原則：能不用強轉就不用；必須強轉時，優先選擇語義最窄、最能說明意圖的轉換。",[10,371,373],{"id":372},"c-標準版本","C++ 標準版本",[14,375,376],{},"C++98 就已經提供這四種轉換寫法，實際工程中依然推薦使用它們替代 C 風格強轉。",[10,378,379],{"id":379},"需要的頭文件",[14,381,382],{},"類型轉換本身不需要額外頭文件。示例代碼使用到的庫需要對應頭文件，例如：",[79,384,386],{"className":81,"code":385,"language":83,"meta":84,"style":84},"#include \u003Ccstdint>\n#include \u003Ciostream>\n",[25,387,388,397],{"__ignoreMap":84},[88,389,390,393],{"class":90,"line":91},[88,391,392],{"class":94},"#include",[88,394,396],{"class":395},"sZZnC"," \u003Ccstdint>\n",[88,398,399,401],{"class":90,"line":111},[88,400,392],{"class":94},[88,402,403],{"class":395}," \u003Ciostream>\n",[14,405,406,410,411,414],{},[407,408,409],"strong",{},"運行結果："," 此代碼塊不含 ",[25,412,413],{},"main"," 函數，是語法、接口或分文件示例，不能獨立運行，因此沒有終端輸出。",[10,416,417],{"id":417},"基本語法",[79,419,421],{"className":81,"code":420,"language":83,"meta":84,"style":84},"目标类型 value = static_cast\u003C目标类型>(表达式);\n目标类型 value = dynamic_cast\u003C目标类型>(表达式);\n目标类型 value = const_cast\u003C目标类型>(表达式);\n目标类型 value = reinterpret_cast\u003C目标类型>(表达式);\n",[25,422,423,442,457,473],{"__ignoreMap":84},[88,424,425,428,430,433,436,439],{"class":90,"line":91},[88,426,427],{"class":97},"目标类型 value ",[88,429,101],{"class":94},[88,431,432],{"class":94}," static_cast\u003C",[88,434,435],{"class":97},"目标类型",[88,437,438],{"class":94},">",[88,440,441],{"class":97},"(表达式);\n",[88,443,444,446,448,451,453,455],{"class":90,"line":111},[88,445,427],{"class":97},[88,447,101],{"class":94},[88,449,450],{"class":94}," dynamic_cast\u003C",[88,452,435],{"class":97},[88,454,438],{"class":94},[88,456,441],{"class":97},[88,458,460,462,464,467,469,471],{"class":90,"line":459},3,[88,461,427],{"class":97},[88,463,101],{"class":94},[88,465,466],{"class":94}," const_cast\u003C",[88,468,435],{"class":97},[88,470,438],{"class":94},[88,472,441],{"class":97},[88,474,476,478,480,483,485,487],{"class":90,"line":475},4,[88,477,427],{"class":97},[88,479,101],{"class":94},[88,481,482],{"class":94}," reinterpret_cast\u003C",[88,484,435],{"class":97},[88,486,438],{"class":94},[88,488,441],{"class":97},[14,490,491,410,493,414],{},[407,492,409],{},[25,494,413],{},[10,496,497],{"id":497},"示例代碼",[72,499,501],{"id":500},"示例-1static_cast-處理常規轉換","示例 1：static_cast 處理常規轉換",[14,503,504,506,507,509],{},[25,505,261],{}," 適合明確、常規、編譯期能檢查的轉換。比如數值轉換、",[25,508,37],{}," 轉整數、父類指針指向子類對象等。",[79,511,513],{"className":81,"code":512,"language":83,"meta":84,"style":84},"#include \u003Ciostream>\n\nenum class Status\n{\n    ok = 200,\n    not_found = 404\n};\n\nint main()\n{\n    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    double score = 89.7;\n    int integer_score = static_cast\u003Cint>(score);\n\n    Status status = Status::not_found;\n    int status_code = static_cast\u003Cint>(status);\n\n    std::cout \u003C\u003C \"integer_score = \" \u003C\u003C integer_score \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"status_code = \" \u003C\u003C status_code \u003C\u003C \"\\n\";\n\n    \u002F\u002F 返回 0 表示程序正常结束。\n    return 0;\n}\n",[25,514,515,521,527,539,544,559,570,576,581,592,597,604,620,636,641,655,670,675,708,734,739,745,756],{"__ignoreMap":84},[88,516,517,519],{"class":90,"line":91},[88,518,392],{"class":94},[88,520,403],{"class":395},[88,522,523],{"class":90,"line":111},[88,524,526],{"emptyLinePlaceholder":525},true,"\n",[88,528,529,532,535],{"class":90,"line":459},[88,530,531],{"class":94},"enum",[88,533,534],{"class":94}," class",[88,536,538],{"class":537},"sScJk"," Status\n",[88,540,541],{"class":90,"line":475},[88,542,543],{"class":97},"{\n",[88,545,547,550,553,556],{"class":90,"line":546},5,[88,548,549],{"class":104},"    ok",[88,551,552],{"class":94}," =",[88,554,555],{"class":104}," 200",[88,557,558],{"class":97},",\n",[88,560,562,565,567],{"class":90,"line":561},6,[88,563,564],{"class":104},"    not_found",[88,566,552],{"class":94},[88,568,569],{"class":104}," 404\n",[88,571,573],{"class":90,"line":572},7,[88,574,575],{"class":97},"};\n",[88,577,579],{"class":90,"line":578},8,[88,580,526],{"emptyLinePlaceholder":525},[88,582,584,586,589],{"class":90,"line":583},9,[88,585,31],{"class":94},[88,587,588],{"class":537}," main",[88,590,591],{"class":97},"()\n",[88,593,595],{"class":90,"line":594},10,[88,596,543],{"class":97},[88,598,600],{"class":90,"line":599},11,[88,601,603],{"class":602},"sJ8bj","    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n",[88,605,607,610,613,615,618],{"class":90,"line":606},12,[88,608,609],{"class":94},"    double",[88,611,612],{"class":97}," score ",[88,614,101],{"class":94},[88,616,617],{"class":104}," 89.7",[88,619,108],{"class":97},[88,621,623,626,629,631,633],{"class":90,"line":622},13,[88,624,625],{"class":94},"    int",[88,627,628],{"class":97}," integer_score ",[88,630,101],{"class":94},[88,632,224],{"class":94},[88,634,635],{"class":97},"(score);\n",[88,637,639],{"class":90,"line":638},14,[88,640,526],{"emptyLinePlaceholder":525},[88,642,644,647,649,652],{"class":90,"line":643},15,[88,645,646],{"class":97},"    Status status ",[88,648,101],{"class":94},[88,650,651],{"class":537}," Status",[88,653,654],{"class":97},"::not_found;\n",[88,656,658,660,663,665,667],{"class":90,"line":657},16,[88,659,625],{"class":94},[88,661,662],{"class":97}," status_code ",[88,664,101],{"class":94},[88,666,224],{"class":94},[88,668,669],{"class":97},"(status);\n",[88,671,673],{"class":90,"line":672},17,[88,674,526],{"emptyLinePlaceholder":525},[88,676,678,681,684,687,690,693,695,697,700,703,706],{"class":90,"line":677},18,[88,679,680],{"class":537},"    std",[88,682,683],{"class":97},"::cout ",[88,685,686],{"class":94},"\u003C\u003C",[88,688,689],{"class":395}," \"integer_score = \"",[88,691,692],{"class":94}," \u003C\u003C",[88,694,628],{"class":97},[88,696,686],{"class":94},[88,698,699],{"class":395}," \"",[88,701,702],{"class":104},"\\n",[88,704,705],{"class":395},"\"",[88,707,108],{"class":97},[88,709,711,713,715,717,720,722,724,726,728,730,732],{"class":90,"line":710},19,[88,712,680],{"class":537},[88,714,683],{"class":97},[88,716,686],{"class":94},[88,718,719],{"class":395}," \"status_code = \"",[88,721,692],{"class":94},[88,723,662],{"class":97},[88,725,686],{"class":94},[88,727,699],{"class":395},[88,729,702],{"class":104},[88,731,705],{"class":395},[88,733,108],{"class":97},[88,735,737],{"class":90,"line":736},20,[88,738,526],{"emptyLinePlaceholder":525},[88,740,742],{"class":90,"line":741},21,[88,743,744],{"class":602},"    \u002F\u002F 返回 0 表示程序正常结束。\n",[88,746,748,751,754],{"class":90,"line":747},22,[88,749,750],{"class":94},"    return",[88,752,753],{"class":104}," 0",[88,755,108],{"class":97},[88,757,759],{"class":90,"line":758},23,[88,760,761],{"class":97},"}\n",[14,763,764,767],{},[407,765,766],{},"運行結果","：",[79,769,774],{"className":770,"code":772,"language":773,"meta":84},[771],"language-text","integer_score = 89\nstatus_code = 404\n","text",[25,775,772],{"__ignoreMap":84},[72,777,779],{"id":778},"示例-2dynamic_cast-安全判斷真實對象類型","示例 2：dynamic_cast 安全判斷真實對象類型",[14,781,782,784],{},[25,783,265],{}," 常用於多態基類。向下轉換時，它會在運行期檢查對象真實類型。",[79,786,788],{"className":81,"code":787,"language":83,"meta":84,"style":84},"#include \u003Ciostream>\n\nstruct Animal\n{\n    virtual ~Animal() = default;\n};\n\nstruct Cat : Animal\n{\n    void meow() const\n    {\n        std::cout \u003C\u003C \"cat: meow\\n\";\n    }\n};\n\nstruct Dog : Animal\n{\n};\n\nvoid try_meow(Animal* animal)\n{\n    Cat* cat = dynamic_cast\u003CCat*>(animal);\n\n    if (cat != nullptr)\n    {\n        cat->meow();\n    }\n    else\n    {\n        std::cout \u003C\u003C \"not a cat\\n\";\n    }\n}\n\nint main()\n{\n    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    Cat cat;\n    Dog dog;\n\n    try_meow(&cat);\n    try_meow(&dog);\n\n    \u002F\u002F 返回 0 表示程序正常结束。\n    return 0;\n}\n",[25,789,790,796,800,808,812,830,834,838,848,852,865,870,888,893,897,901,910,914,918,922,946,950,973,977,994,999,1011,1016,1022,1027,1045,1050,1055,1060,1069,1074,1079,1085,1091,1096,1110,1122,1127,1132,1141],{"__ignoreMap":84},[88,791,792,794],{"class":90,"line":91},[88,793,392],{"class":94},[88,795,403],{"class":395},[88,797,798],{"class":90,"line":111},[88,799,526],{"emptyLinePlaceholder":525},[88,801,802,805],{"class":90,"line":459},[88,803,804],{"class":94},"struct",[88,806,807],{"class":537}," Animal\n",[88,809,810],{"class":90,"line":475},[88,811,543],{"class":97},[88,813,814,817,820,823,825,828],{"class":90,"line":546},[88,815,816],{"class":94},"    virtual",[88,818,819],{"class":537}," ~Animal",[88,821,822],{"class":97},"() ",[88,824,101],{"class":94},[88,826,827],{"class":94}," default",[88,829,108],{"class":97},[88,831,832],{"class":90,"line":561},[88,833,575],{"class":97},[88,835,836],{"class":90,"line":572},[88,837,526],{"emptyLinePlaceholder":525},[88,839,840,842,845],{"class":90,"line":578},[88,841,804],{"class":94},[88,843,844],{"class":537}," Cat",[88,846,847],{"class":97}," : Animal\n",[88,849,850],{"class":90,"line":583},[88,851,543],{"class":97},[88,853,854,857,860,862],{"class":90,"line":594},[88,855,856],{"class":94},"    void",[88,858,859],{"class":537}," meow",[88,861,822],{"class":97},[88,863,864],{"class":94},"const\n",[88,866,867],{"class":90,"line":599},[88,868,869],{"class":97},"    {\n",[88,871,872,875,877,879,882,884,886],{"class":90,"line":606},[88,873,874],{"class":537},"        std",[88,876,683],{"class":97},[88,878,686],{"class":94},[88,880,881],{"class":395}," \"cat: meow",[88,883,702],{"class":104},[88,885,705],{"class":395},[88,887,108],{"class":97},[88,889,890],{"class":90,"line":622},[88,891,892],{"class":97},"    }\n",[88,894,895],{"class":90,"line":638},[88,896,575],{"class":97},[88,898,899],{"class":90,"line":643},[88,900,526],{"emptyLinePlaceholder":525},[88,902,903,905,908],{"class":90,"line":657},[88,904,804],{"class":94},[88,906,907],{"class":537}," Dog",[88,909,847],{"class":97},[88,911,912],{"class":90,"line":672},[88,913,543],{"class":97},[88,915,916],{"class":90,"line":677},[88,917,575],{"class":97},[88,919,920],{"class":90,"line":710},[88,921,526],{"emptyLinePlaceholder":525},[88,923,924,927,930,933,936,939,943],{"class":90,"line":736},[88,925,926],{"class":94},"void",[88,928,929],{"class":537}," try_meow",[88,931,932],{"class":97},"(",[88,934,935],{"class":537},"Animal",[88,937,938],{"class":94},"*",[88,940,942],{"class":941},"s4XuR"," animal",[88,944,945],{"class":97},")\n",[88,947,948],{"class":90,"line":741},[88,949,543],{"class":97},[88,951,952,955,957,960,962,964,967,970],{"class":90,"line":747},[88,953,954],{"class":97},"    Cat",[88,956,938],{"class":94},[88,958,959],{"class":97}," cat ",[88,961,101],{"class":94},[88,963,450],{"class":94},[88,965,966],{"class":97},"Cat",[88,968,969],{"class":94},"*>",[88,971,972],{"class":97},"(animal);\n",[88,974,975],{"class":90,"line":758},[88,976,526],{"emptyLinePlaceholder":525},[88,978,980,983,986,989,992],{"class":90,"line":979},24,[88,981,982],{"class":94},"    if",[88,984,985],{"class":97}," (cat ",[88,987,988],{"class":94},"!=",[88,990,991],{"class":104}," nullptr",[88,993,945],{"class":97},[88,995,997],{"class":90,"line":996},25,[88,998,869],{"class":97},[88,1000,1002,1005,1008],{"class":90,"line":1001},26,[88,1003,1004],{"class":97},"        cat->",[88,1006,1007],{"class":537},"meow",[88,1009,1010],{"class":97},"();\n",[88,1012,1014],{"class":90,"line":1013},27,[88,1015,892],{"class":97},[88,1017,1019],{"class":90,"line":1018},28,[88,1020,1021],{"class":94},"    else\n",[88,1023,1025],{"class":90,"line":1024},29,[88,1026,869],{"class":97},[88,1028,1030,1032,1034,1036,1039,1041,1043],{"class":90,"line":1029},30,[88,1031,874],{"class":537},[88,1033,683],{"class":97},[88,1035,686],{"class":94},[88,1037,1038],{"class":395}," \"not a cat",[88,1040,702],{"class":104},[88,1042,705],{"class":395},[88,1044,108],{"class":97},[88,1046,1048],{"class":90,"line":1047},31,[88,1049,892],{"class":97},[88,1051,1053],{"class":90,"line":1052},32,[88,1054,761],{"class":97},[88,1056,1058],{"class":90,"line":1057},33,[88,1059,526],{"emptyLinePlaceholder":525},[88,1061,1063,1065,1067],{"class":90,"line":1062},34,[88,1064,31],{"class":94},[88,1066,588],{"class":537},[88,1068,591],{"class":97},[88,1070,1072],{"class":90,"line":1071},35,[88,1073,543],{"class":97},[88,1075,1077],{"class":90,"line":1076},36,[88,1078,603],{"class":602},[88,1080,1082],{"class":90,"line":1081},37,[88,1083,1084],{"class":97},"    Cat cat;\n",[88,1086,1088],{"class":90,"line":1087},38,[88,1089,1090],{"class":97},"    Dog dog;\n",[88,1092,1094],{"class":90,"line":1093},39,[88,1095,526],{"emptyLinePlaceholder":525},[88,1097,1099,1102,1104,1107],{"class":90,"line":1098},40,[88,1100,1101],{"class":537},"    try_meow",[88,1103,932],{"class":97},[88,1105,1106],{"class":94},"&",[88,1108,1109],{"class":97},"cat);\n",[88,1111,1113,1115,1117,1119],{"class":90,"line":1112},41,[88,1114,1101],{"class":537},[88,1116,932],{"class":97},[88,1118,1106],{"class":94},[88,1120,1121],{"class":97},"dog);\n",[88,1123,1125],{"class":90,"line":1124},42,[88,1126,526],{"emptyLinePlaceholder":525},[88,1128,1130],{"class":90,"line":1129},43,[88,1131,744],{"class":602},[88,1133,1135,1137,1139],{"class":90,"line":1134},44,[88,1136,750],{"class":94},[88,1138,753],{"class":104},[88,1140,108],{"class":97},[88,1142,1144],{"class":90,"line":1143},45,[88,1145,761],{"class":97},[14,1147,1148,767],{},[407,1149,766],{},[79,1151,1154],{"className":1152,"code":1153,"language":773,"meta":84},[771],"cat: meow\nnot a cat\n",[25,1155,1153],{"__ignoreMap":84},[1157,1158,1159],"blockquote",{},[14,1160,1161,1162,1164,1165,1167,1168,1171],{},"注意：",[25,1163,265],{}," 用在指針上，轉換失敗會得到 ",[25,1166,332],{},"；用在引用上，轉換失敗會拋出 ",[25,1169,1170],{},"std::bad_cast","。它要求基類至少有一個虛函數，通常是虛析構函數。",[72,1173,1175,1176,1178,1179,350],{"id":1174},"示例-3const_cast-只改變-const-限定","示例 3：",[25,1177,268],{}," 只改變 ",[25,1180,47],{},[14,1182,1183,1185,1186,346,1188,1190,1191,28,1193,1195],{},[25,1184,268],{}," 只能添加或移除 ",[25,1187,47],{},[25,1189,349],{}," 限定，不能把 ",[25,1192,31],{},[25,1194,27],{},"，也不能把兩個不相關的類型互相轉換。",[79,1197,1199],{"className":81,"code":1198,"language":83,"meta":84,"style":84},"#include \u003Ciostream>\n\nint main()\n{\n    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    int value = 10;\n    const int& readonly_ref = value;\n\n    int& writable_ref = const_cast\u003Cint&>(readonly_ref);\n    writable_ref = 20;\n\n    std::cout \u003C\u003C \"value = \" \u003C\u003C value \u003C\u003C \"\\n\";\n\n    \u002F\u002F 返回 0 表示程序正常结束。\n    return 0;\n}\n",[25,1200,1201,1207,1211,1219,1223,1227,1240,1256,1260,1276,1288,1292,1317,1321,1325,1333],{"__ignoreMap":84},[88,1202,1203,1205],{"class":90,"line":91},[88,1204,392],{"class":94},[88,1206,403],{"class":395},[88,1208,1209],{"class":90,"line":111},[88,1210,526],{"emptyLinePlaceholder":525},[88,1212,1213,1215,1217],{"class":90,"line":459},[88,1214,31],{"class":94},[88,1216,588],{"class":537},[88,1218,591],{"class":97},[88,1220,1221],{"class":90,"line":475},[88,1222,543],{"class":97},[88,1224,1225],{"class":90,"line":546},[88,1226,603],{"class":602},[88,1228,1229,1231,1234,1236,1238],{"class":90,"line":561},[88,1230,625],{"class":94},[88,1232,1233],{"class":97}," value ",[88,1235,101],{"class":94},[88,1237,105],{"class":104},[88,1239,108],{"class":97},[88,1241,1242,1245,1248,1251,1253],{"class":90,"line":572},[88,1243,1244],{"class":94},"    const",[88,1246,1247],{"class":94}," int&",[88,1249,1250],{"class":97}," readonly_ref ",[88,1252,101],{"class":94},[88,1254,1255],{"class":97}," value;\n",[88,1257,1258],{"class":90,"line":578},[88,1259,526],{"emptyLinePlaceholder":525},[88,1261,1262,1265,1268,1270,1273],{"class":90,"line":583},[88,1263,1264],{"class":94},"    int&",[88,1266,1267],{"class":97}," writable_ref ",[88,1269,101],{"class":94},[88,1271,1272],{"class":94}," const_cast\u003Cint&>",[88,1274,1275],{"class":97},"(readonly_ref);\n",[88,1277,1278,1281,1283,1286],{"class":90,"line":594},[88,1279,1280],{"class":97},"    writable_ref ",[88,1282,101],{"class":94},[88,1284,1285],{"class":104}," 20",[88,1287,108],{"class":97},[88,1289,1290],{"class":90,"line":599},[88,1291,526],{"emptyLinePlaceholder":525},[88,1293,1294,1296,1298,1300,1303,1305,1307,1309,1311,1313,1315],{"class":90,"line":606},[88,1295,680],{"class":537},[88,1297,683],{"class":97},[88,1299,686],{"class":94},[88,1301,1302],{"class":395}," \"value = \"",[88,1304,692],{"class":94},[88,1306,1233],{"class":97},[88,1308,686],{"class":94},[88,1310,699],{"class":395},[88,1312,702],{"class":104},[88,1314,705],{"class":395},[88,1316,108],{"class":97},[88,1318,1319],{"class":90,"line":622},[88,1320,526],{"emptyLinePlaceholder":525},[88,1322,1323],{"class":90,"line":638},[88,1324,744],{"class":602},[88,1326,1327,1329,1331],{"class":90,"line":643},[88,1328,750],{"class":94},[88,1330,753],{"class":104},[88,1332,108],{"class":97},[88,1334,1335],{"class":90,"line":657},[88,1336,761],{"class":97},[14,1338,1339,767],{},[407,1340,766],{},[79,1342,1345],{"className":1343,"code":1344,"language":773,"meta":84},[771],"value = 20\n",[25,1346,1344],{"__ignoreMap":84},[14,1348,1349,1350,1353,1354,1356,1357,32],{},"這個例子裡，",[25,1351,1352],{},"value"," 本身是一個普通的 ",[25,1355,31],{}," 變量，並不是 ",[25,1358,1359],{},"const int",[79,1361,1363],{"className":81,"code":1362,"language":83,"meta":84,"style":84},"int value = 10;\nconst int& readonly_ref = value;\n",[25,1364,1365,1377],{"__ignoreMap":84},[88,1366,1367,1369,1371,1373,1375],{"class":90,"line":91},[88,1368,31],{"class":94},[88,1370,1233],{"class":97},[88,1372,101],{"class":94},[88,1374,105],{"class":104},[88,1376,108],{"class":97},[88,1378,1379,1381,1383,1385,1387],{"class":90,"line":111},[88,1380,47],{"class":94},[88,1382,1247],{"class":94},[88,1384,1250],{"class":97},[88,1386,101],{"class":94},[88,1388,1255],{"class":97},[14,1390,1391,1392,128,1395,1397,1398,1400],{},"這兩行代碼的意思是：",[25,1393,1394],{},"readonly_ref",[25,1396,1352],{}," 的一個“只讀引用”。它並沒有創建一個新的變量，而是給 ",[25,1399,1352],{}," 起了一個只能讀取、不能修改的別名。",[14,1402,1403],{},"也就是說：",[79,1405,1407],{"className":81,"code":1406,"language":83,"meta":84,"style":84},"readonly_ref\n",[25,1408,1409],{"__ignoreMap":84},[88,1410,1411],{"class":90,"line":91},[88,1412,1406],{"class":97},[14,1414,1415,1416,32],{},"本質上還是指向原來的 ",[25,1417,1352],{},[14,1419,1420],{},"接下來：",[79,1422,1424],{"className":81,"code":1423,"language":83,"meta":84,"style":84},"int& writable_ref = const_cast\u003Cint&>(readonly_ref);\n",[25,1425,1426],{"__ignoreMap":84},[88,1427,1428,1431,1433,1435,1437],{"class":90,"line":91},[88,1429,1430],{"class":94},"int&",[88,1432,1267],{"class":97},[88,1434,101],{"class":94},[88,1436,1272],{"class":94},[88,1438,1275],{"class":97},[14,1440,1441,1442,1444,1445,1447,1448,1450,1451,1453],{},"這行代碼使用 ",[25,1443,268],{}," 去掉了 ",[25,1446,1394],{}," 上的 ",[25,1449,47],{}," 限定，讓它重新變成一個可以修改的引用。由於它引用的還是原來的 ",[25,1452,1352],{},"，所以：",[79,1455,1457],{"className":81,"code":1456,"language":83,"meta":84,"style":84},"writable_ref = 20;\n",[25,1458,1459],{"__ignoreMap":84},[88,1460,1461,1464,1466,1468],{"class":90,"line":91},[88,1462,1463],{"class":97},"writable_ref ",[88,1465,101],{"class":94},[88,1467,1285],{"class":104},[88,1469,108],{"class":97},[14,1471,1472],{},"本質上就是在修改：",[79,1474,1476],{"className":81,"code":1475,"language":83,"meta":84,"style":84},"value = 20;\n",[25,1477,1478],{"__ignoreMap":84},[88,1479,1480,1483,1485,1487],{"class":90,"line":91},[88,1481,1482],{"class":97},"value ",[88,1484,101],{"class":94},[88,1486,1285],{"class":104},[88,1488,108],{"class":97},[14,1490,1491],{},"因此最後輸出的是：",[79,1493,1495],{"className":1494,"code":1344,"language":773,"meta":84},[771],[25,1496,1344],{"__ignoreMap":84},[14,1498,1499,1500,1502,1503,1505,1506,1509],{},"需要注意的是，這個例子能夠修改成功，是因為原始對象 ",[25,1501,1352],{}," 本身不是 ",[25,1504,47],{},"，只是我們臨時用 ",[25,1507,1508],{},"const int&"," 這種只讀方式去引用它。",[14,1511,1512,1513,1515,1516,1518],{},"如果原始對象本身就是 ",[25,1514,47],{},"，再用 ",[25,1517,268],{}," 強行修改就是未定義行為，例如：",[79,1520,1522],{"className":81,"code":1521,"language":83,"meta":84,"style":84},"const int value = 10;\nconst int& readonly_ref = value;\n\nint& writable_ref = const_cast\u003Cint&>(readonly_ref);\nwritable_ref = 20; \u002F\u002F 未定义行为\n",[25,1523,1524,1539,1551,1555,1567],{"__ignoreMap":84},[88,1525,1526,1528,1531,1533,1535,1537],{"class":90,"line":91},[88,1527,47],{"class":94},[88,1529,1530],{"class":94}," int",[88,1532,1233],{"class":97},[88,1534,101],{"class":94},[88,1536,105],{"class":104},[88,1538,108],{"class":97},[88,1540,1541,1543,1545,1547,1549],{"class":90,"line":111},[88,1542,47],{"class":94},[88,1544,1247],{"class":94},[88,1546,1250],{"class":97},[88,1548,101],{"class":94},[88,1550,1255],{"class":97},[88,1552,1553],{"class":90,"line":459},[88,1554,526],{"emptyLinePlaceholder":525},[88,1556,1557,1559,1561,1563,1565],{"class":90,"line":475},[88,1558,1430],{"class":94},[88,1560,1267],{"class":97},[88,1562,101],{"class":94},[88,1564,1272],{"class":94},[88,1566,1275],{"class":97},[88,1568,1569,1571,1573,1575,1578],{"class":90,"line":546},[88,1570,1463],{"class":97},[88,1572,101],{"class":94},[88,1574,1285],{"class":104},[88,1576,1577],{"class":97},";",[88,1579,1580],{"class":602}," \u002F\u002F 未定义行为\n",[14,1582,1583],{},"所以可以簡單記住：",[14,1585,1586,1588],{},[25,1587,268],{}," 只是把“只讀視角”改回“可寫視角”，它不會複製出新變量，也不會真的把一個天生的常量安全地變成普通變量。",[72,1590,1592,1593,1595],{"id":1591},"示例-4reinterpret_cast-做底層重解釋","示例 4：",[25,1594,272],{}," 做底層重解釋",[14,1597,1598,1600],{},[25,1599,272],{}," 表示“把這段二進制數據按另一種類型解釋”。它繞過了很多類型系統保護，通常只應該出現在非常底層的代碼裡。",[14,1602,1603],{},"比如把一個指針轉換成整數形式的地址，再把這個整數地址轉換回指針。",[14,1605,1606,1608],{},[25,1607,272],{}," 可以用來做一些比較“底層”的類型轉換，比如把一個指針轉換成整數形式的地址，再把這個整數地址轉換回指針。",[14,1610,1611,1612,1615],{},"需要注意的是，這裡轉換的是",[407,1613,1614],{},"地址","，不是變量裡面保存的值。",[79,1617,1619],{"className":81,"code":1618,"language":83,"meta":84,"style":84},"#include \u003Ccstdint>\n#include \u003Ciomanip>\n#include \u003Ciostream>\n\nint main()\n{\n    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    int value = 42;\n    int* p = &value;\n\n    std::uintptr_t raw = reinterpret_cast\u003Cstd::uintptr_t>(p);\n    int* again = reinterpret_cast\u003Cint*>(raw);\n\n    std::cout \u003C\u003C \"value = \" \u003C\u003C value \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"p = \" \u003C\u003C p \u003C\u003C \"\\n\";\n\n    std::cout \u003C\u003C \"raw = \" \u003C\u003C raw \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"raw(hex) = 0x\" \u003C\u003C std::hex \u003C\u003C raw \u003C\u003C std::dec \u003C\u003C \"\\n\";\n\n    std::cout \u003C\u003C \"again = \" \u003C\u003C again \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"*again = \" \u003C\u003C *again \u003C\u003C \"\\n\";\n\n    std::cout \u003C\u003C std::boolalpha;\n    std::cout \u003C\u003C \"same pointer = \" \u003C\u003C (p == again) \u003C\u003C \"\\n\";\n\n    \u002F\u002F 返回 0 表示程序正常结束。\n    return 0;\n}\n",[25,1620,1621,1627,1634,1640,1644,1652,1656,1660,1673,1689,1693,1721,1736,1740,1764,1789,1793,1818,1858,1862,1887,1916,1920,1933,1965,1969,1973,1981],{"__ignoreMap":84},[88,1622,1623,1625],{"class":90,"line":91},[88,1624,392],{"class":94},[88,1626,396],{"class":395},[88,1628,1629,1631],{"class":90,"line":111},[88,1630,392],{"class":94},[88,1632,1633],{"class":395}," \u003Ciomanip>\n",[88,1635,1636,1638],{"class":90,"line":459},[88,1637,392],{"class":94},[88,1639,403],{"class":395},[88,1641,1642],{"class":90,"line":475},[88,1643,526],{"emptyLinePlaceholder":525},[88,1645,1646,1648,1650],{"class":90,"line":546},[88,1647,31],{"class":94},[88,1649,588],{"class":537},[88,1651,591],{"class":97},[88,1653,1654],{"class":90,"line":561},[88,1655,543],{"class":97},[88,1657,1658],{"class":90,"line":572},[88,1659,603],{"class":602},[88,1661,1662,1664,1666,1668,1671],{"class":90,"line":578},[88,1663,625],{"class":94},[88,1665,1233],{"class":97},[88,1667,101],{"class":94},[88,1669,1670],{"class":104}," 42",[88,1672,108],{"class":97},[88,1674,1675,1678,1681,1683,1686],{"class":90,"line":583},[88,1676,1677],{"class":94},"    int*",[88,1679,1680],{"class":97}," p ",[88,1682,101],{"class":94},[88,1684,1685],{"class":94}," &",[88,1687,1688],{"class":97},"value;\n",[88,1690,1691],{"class":90,"line":594},[88,1692,526],{"emptyLinePlaceholder":525},[88,1694,1695,1697,1700,1703,1706,1708,1710,1713,1715,1718],{"class":90,"line":599},[88,1696,680],{"class":537},[88,1698,1699],{"class":97},"::",[88,1701,1702],{"class":94},"uintptr_t",[88,1704,1705],{"class":97}," raw ",[88,1707,101],{"class":94},[88,1709,482],{"class":94},[88,1711,1712],{"class":537},"std",[88,1714,1699],{"class":97},[88,1716,1717],{"class":94},"uintptr_t>",[88,1719,1720],{"class":97},"(p);\n",[88,1722,1723,1725,1728,1730,1733],{"class":90,"line":606},[88,1724,1677],{"class":94},[88,1726,1727],{"class":97}," again ",[88,1729,101],{"class":94},[88,1731,1732],{"class":94}," reinterpret_cast\u003Cint*>",[88,1734,1735],{"class":97},"(raw);\n",[88,1737,1738],{"class":90,"line":622},[88,1739,526],{"emptyLinePlaceholder":525},[88,1741,1742,1744,1746,1748,1750,1752,1754,1756,1758,1760,1762],{"class":90,"line":638},[88,1743,680],{"class":537},[88,1745,683],{"class":97},[88,1747,686],{"class":94},[88,1749,1302],{"class":395},[88,1751,692],{"class":94},[88,1753,1233],{"class":97},[88,1755,686],{"class":94},[88,1757,699],{"class":395},[88,1759,702],{"class":104},[88,1761,705],{"class":395},[88,1763,108],{"class":97},[88,1765,1766,1768,1770,1772,1775,1777,1779,1781,1783,1785,1787],{"class":90,"line":643},[88,1767,680],{"class":537},[88,1769,683],{"class":97},[88,1771,686],{"class":94},[88,1773,1774],{"class":395}," \"p = \"",[88,1776,692],{"class":94},[88,1778,1680],{"class":97},[88,1780,686],{"class":94},[88,1782,699],{"class":395},[88,1784,702],{"class":104},[88,1786,705],{"class":395},[88,1788,108],{"class":97},[88,1790,1791],{"class":90,"line":657},[88,1792,526],{"emptyLinePlaceholder":525},[88,1794,1795,1797,1799,1801,1804,1806,1808,1810,1812,1814,1816],{"class":90,"line":672},[88,1796,680],{"class":537},[88,1798,683],{"class":97},[88,1800,686],{"class":94},[88,1802,1803],{"class":395}," \"raw = \"",[88,1805,692],{"class":94},[88,1807,1705],{"class":97},[88,1809,686],{"class":94},[88,1811,699],{"class":395},[88,1813,702],{"class":104},[88,1815,705],{"class":395},[88,1817,108],{"class":97},[88,1819,1820,1822,1824,1826,1829,1831,1834,1837,1839,1841,1843,1845,1848,1850,1852,1854,1856],{"class":90,"line":677},[88,1821,680],{"class":537},[88,1823,683],{"class":97},[88,1825,686],{"class":94},[88,1827,1828],{"class":395}," \"raw(hex) = 0x\"",[88,1830,692],{"class":94},[88,1832,1833],{"class":537}," std",[88,1835,1836],{"class":97},"::hex ",[88,1838,686],{"class":94},[88,1840,1705],{"class":97},[88,1842,686],{"class":94},[88,1844,1833],{"class":537},[88,1846,1847],{"class":97},"::dec ",[88,1849,686],{"class":94},[88,1851,699],{"class":395},[88,1853,702],{"class":104},[88,1855,705],{"class":395},[88,1857,108],{"class":97},[88,1859,1860],{"class":90,"line":710},[88,1861,526],{"emptyLinePlaceholder":525},[88,1863,1864,1866,1868,1870,1873,1875,1877,1879,1881,1883,1885],{"class":90,"line":736},[88,1865,680],{"class":537},[88,1867,683],{"class":97},[88,1869,686],{"class":94},[88,1871,1872],{"class":395}," \"again = \"",[88,1874,692],{"class":94},[88,1876,1727],{"class":97},[88,1878,686],{"class":94},[88,1880,699],{"class":395},[88,1882,702],{"class":104},[88,1884,705],{"class":395},[88,1886,108],{"class":97},[88,1888,1889,1891,1893,1895,1898,1900,1903,1906,1908,1910,1912,1914],{"class":90,"line":741},[88,1890,680],{"class":537},[88,1892,683],{"class":97},[88,1894,686],{"class":94},[88,1896,1897],{"class":395}," \"*again = \"",[88,1899,692],{"class":94},[88,1901,1902],{"class":94}," *",[88,1904,1905],{"class":97},"again ",[88,1907,686],{"class":94},[88,1909,699],{"class":395},[88,1911,702],{"class":104},[88,1913,705],{"class":395},[88,1915,108],{"class":97},[88,1917,1918],{"class":90,"line":747},[88,1919,526],{"emptyLinePlaceholder":525},[88,1921,1922,1924,1926,1928,1930],{"class":90,"line":758},[88,1923,680],{"class":537},[88,1925,683],{"class":97},[88,1927,686],{"class":94},[88,1929,1833],{"class":537},[88,1931,1932],{"class":97},"::boolalpha;\n",[88,1934,1935,1937,1939,1941,1944,1946,1949,1952,1955,1957,1959,1961,1963],{"class":90,"line":979},[88,1936,680],{"class":537},[88,1938,683],{"class":97},[88,1940,686],{"class":94},[88,1942,1943],{"class":395}," \"same pointer = \"",[88,1945,692],{"class":94},[88,1947,1948],{"class":97}," (p ",[88,1950,1951],{"class":94},"==",[88,1953,1954],{"class":97}," again) ",[88,1956,686],{"class":94},[88,1958,699],{"class":395},[88,1960,702],{"class":104},[88,1962,705],{"class":395},[88,1964,108],{"class":97},[88,1966,1967],{"class":90,"line":996},[88,1968,526],{"emptyLinePlaceholder":525},[88,1970,1971],{"class":90,"line":1001},[88,1972,744],{"class":602},[88,1974,1975,1977,1979],{"class":90,"line":1013},[88,1976,750],{"class":94},[88,1978,753],{"class":104},[88,1980,108],{"class":97},[88,1982,1983],{"class":90,"line":1018},[88,1984,761],{"class":97},[14,1986,1987,767],{},[407,1988,1989],{},"運行結果示例",[79,1991,1994],{"className":1992,"code":1993,"language":773,"meta":84},[771],"value = 42\np = 0x7ffd60a576d4\nraw = 140726224910036\nraw(hex) = 0x7ffd60a576d4\nagain = 0x7ffd60a576d4\n*again = 42\nsame pointer = true\n",[25,1995,1993],{"__ignoreMap":84},[14,1997,1998],{},"其中，具體的地址值每次運行都可能不同，所以你的運行結果不一定和上面完全一樣。",[14,2000,2001],{},"這段代碼裡：",[79,2003,2005],{"className":81,"code":2004,"language":83,"meta":84,"style":84},"int value = 42;\nint* p = &value;\n",[25,2006,2007,2019],{"__ignoreMap":84},[88,2008,2009,2011,2013,2015,2017],{"class":90,"line":91},[88,2010,31],{"class":94},[88,2012,1233],{"class":97},[88,2014,101],{"class":94},[88,2016,1670],{"class":104},[88,2018,108],{"class":97},[88,2020,2021,2024,2026,2028,2030],{"class":90,"line":111},[88,2022,2023],{"class":94},"int*",[88,2025,1680],{"class":97},[88,2027,101],{"class":94},[88,2029,1685],{"class":94},[88,2031,1688],{"class":97},[14,2033,2034,2036,2037,2039,2040,32],{},[25,2035,1352],{}," 是一個普通的 ",[25,2038,31],{}," 變量，裡面保存的值是 ",[25,2041,2042],{},"42",[14,2044,2045,2047,2048,2050,2051,2053,2054,2056],{},[25,2046,14],{}," 是一個 ",[25,2049,2023],{}," 指針，裡面保存的是 ",[25,2052,1352],{}," 的地址，而不是 ",[25,2055,1352],{}," 的值。",[14,2058,2059,2060,2062],{},"也就是說，",[25,2061,14],{}," 裡面存的不是：",[79,2064,2067],{"className":2065,"code":2066,"language":773,"meta":84},[771],"42\n",[25,2068,2066],{"__ignoreMap":84},[14,2070,2071],{},"而是類似這樣的地址：",[79,2073,2076],{"className":2074,"code":2075,"language":773,"meta":84},[771],"0x7ffd60a576d4\n",[25,2077,2075],{"__ignoreMap":84},[14,2079,2080],{},"接著：",[79,2082,2084],{"className":81,"code":2083,"language":83,"meta":84,"style":84},"std::uintptr_t raw = reinterpret_cast\u003Cstd::uintptr_t>(p);\n",[25,2085,2086],{"__ignoreMap":84},[88,2087,2088,2090,2092,2094,2096,2098,2100,2102,2104,2106],{"class":90,"line":91},[88,2089,1712],{"class":537},[88,2091,1699],{"class":97},[88,2093,1702],{"class":94},[88,2095,1705],{"class":97},[88,2097,101],{"class":94},[88,2099,482],{"class":94},[88,2101,1712],{"class":537},[88,2103,1699],{"class":97},[88,2105,1717],{"class":94},[88,2107,1720],{"class":97},[14,2109,2110,2111,2113],{},"這行代碼把指針 ",[25,2112,14],{}," 轉換成了一個整數。",[14,2115,2116,2119],{},[25,2117,2118],{},"std::uintptr_t"," 是一種無符號整數類型，它的作用是儘可能安全地保存一個指針地址。",[14,2121,2122],{},"所以如果：",[79,2124,2127],{"className":2125,"code":2126,"language":773,"meta":84},[771],"p = 0x7ffd60a576d4\n",[25,2128,2126],{"__ignoreMap":84},[14,2130,2131,2132,2135],{},"那麼 ",[25,2133,2134],{},"raw"," 保存的就是這個地址對應的整數形式。",[14,2137,2138],{},"例如：",[79,2140,2143],{"className":2141,"code":2142,"language":773,"meta":84},[771],"raw = 140726224910036\n",[25,2144,2142],{"__ignoreMap":84},[14,2146,2147],{},"這只是同一個地址的十進制寫法。",[14,2149,2150],{},"下面這行代碼：",[79,2152,2154],{"className":81,"code":2153,"language":83,"meta":84,"style":84},"std::cout \u003C\u003C \"raw(hex) = 0x\" \u003C\u003C std::hex \u003C\u003C raw \u003C\u003C std::dec \u003C\u003C \"\\n\";\n",[25,2155,2156],{"__ignoreMap":84},[88,2157,2158,2160,2162,2164,2166,2168,2170,2172,2174,2176,2178,2180,2182,2184,2186,2188,2190],{"class":90,"line":91},[88,2159,1712],{"class":537},[88,2161,683],{"class":97},[88,2163,686],{"class":94},[88,2165,1828],{"class":395},[88,2167,692],{"class":94},[88,2169,1833],{"class":537},[88,2171,1836],{"class":97},[88,2173,686],{"class":94},[88,2175,1705],{"class":97},[88,2177,686],{"class":94},[88,2179,1833],{"class":537},[88,2181,1847],{"class":97},[88,2183,686],{"class":94},[88,2185,699],{"class":395},[88,2187,702],{"class":104},[88,2189,705],{"class":395},[88,2191,108],{"class":97},[14,2193,2194,2195,2197,2198,2200,2201,2203],{},"是把 ",[25,2196,2134],{}," 按十六進制打印出來。這樣就可以看到，",[25,2199,2134],{}," 的十六進制形式和指針 ",[25,2202,14],{}," 打印出來的地址基本是一樣的。",[14,2205,2206],{},"然後：",[79,2208,2210],{"className":81,"code":2209,"language":83,"meta":84,"style":84},"int* again = reinterpret_cast\u003Cint*>(raw);\n",[25,2211,2212],{"__ignoreMap":84},[88,2213,2214,2216,2218,2220,2222],{"class":90,"line":91},[88,2215,2023],{"class":94},[88,2217,1727],{"class":97},[88,2219,101],{"class":94},[88,2221,1732],{"class":94},[88,2223,1735],{"class":97},[14,2225,2226,2227,2229,2230,2232],{},"這行代碼又把整數形式的地址 ",[25,2228,2134],{}," 轉回了 ",[25,2231,2023],{}," 指針。",[14,2234,1403],{},[79,2236,2239],{"className":2237,"code":2238,"language":773,"meta":84},[771],"p     指向 value\nagain 也指向 value\n",[25,2240,2238],{"__ignoreMap":84},[14,2242,2243],{},"所以：",[79,2245,2247],{"className":81,"code":2246,"language":83,"meta":84,"style":84},"std::cout \u003C\u003C \"*again = \" \u003C\u003C *again \u003C\u003C \"\\n\";\n",[25,2248,2249],{"__ignoreMap":84},[88,2250,2251,2253,2255,2257,2259,2261,2263,2265,2267,2269,2271,2273],{"class":90,"line":91},[88,2252,1712],{"class":537},[88,2254,683],{"class":97},[88,2256,686],{"class":94},[88,2258,1897],{"class":395},[88,2260,692],{"class":94},[88,2262,1902],{"class":94},[88,2264,1905],{"class":97},[88,2266,686],{"class":94},[88,2268,699],{"class":395},[88,2270,702],{"class":104},[88,2272,705],{"class":395},[88,2274,108],{"class":97},[14,2276,230,2277,2280,2281,2284],{},[25,2278,2279],{},"*again"," 就是在訪問 ",[25,2282,2283],{},"again"," 指向的變量。",[14,2286,2287,2288,2290,2291,1453],{},"因為 ",[25,2289,2283],{}," 重新指向了原來的 ",[25,2292,1352],{},[79,2294,2296],{"className":81,"code":2295,"language":83,"meta":84,"style":84},"*again\n",[25,2297,2298],{"__ignoreMap":84},[88,2299,2300,2302],{"class":90,"line":91},[88,2301,938],{"class":94},[88,2303,2304],{"class":97},"again\n",[14,2306,2307],{},"等價於：",[79,2309,2311],{"className":81,"code":2310,"language":83,"meta":84,"style":84},"value\n",[25,2312,2313],{"__ignoreMap":84},[88,2314,2315],{"class":90,"line":91},[88,2316,2310],{"class":97},[14,2318,2319],{},"因此輸出結果是：",[79,2321,2324],{"className":2322,"code":2323,"language":773,"meta":84},[771],"*again = 42\n",[25,2325,2323],{"__ignoreMap":84},[14,2327,2328],{},"最後：",[79,2330,2332],{"className":81,"code":2331,"language":83,"meta":84,"style":84},"std::cout \u003C\u003C \"same pointer = \" \u003C\u003C (p == again) \u003C\u003C \"\\n\";\n",[25,2333,2334],{"__ignoreMap":84},[88,2335,2336,2338,2340,2342,2344,2346,2348,2350,2352,2354,2356,2358,2360],{"class":90,"line":91},[88,2337,1712],{"class":537},[88,2339,683],{"class":97},[88,2341,686],{"class":94},[88,2343,1943],{"class":395},[88,2345,692],{"class":94},[88,2347,1948],{"class":97},[88,2349,1951],{"class":94},[88,2351,1954],{"class":97},[88,2353,686],{"class":94},[88,2355,699],{"class":395},[88,2357,702],{"class":104},[88,2359,705],{"class":395},[88,2361,108],{"class":97},[14,2363,2364,2365,269,2367,2369],{},"這行代碼比較的是 ",[25,2366,14],{},[25,2368,2283],{}," 這兩個指針保存的地址是否相同。",[14,2371,2372,2373,2375],{},"由於它們都指向 ",[25,2374,1352],{},"，所以結果是：",[79,2377,2380],{"className":2378,"code":2379,"language":773,"meta":84},[771],"same pointer = true\n",[25,2381,2379],{"__ignoreMap":84},[14,2383,2384],{},"可以把整個過程理解成：",[79,2386,2389],{"className":2387,"code":2388,"language":773,"meta":84},[771],"value 是一个变量，值是 42\n\np 保存 value 的地址\n\nraw 把这个地址用整数形式保存下来\n\nagain 又把这个整数地址转换回指针\n\n所以 again 重新指向 value\n",[25,2390,2388],{"__ignoreMap":84},[14,2392,2393,2394,2396,2397,2399,2400,2402],{},"所以這段代碼的重點不是把 ",[25,2395,2042],{}," 轉成整數，而是把 ",[25,2398,1352],{}," 的",[407,2401,1614],{},"轉成整數。",[14,2404,2405],{},"簡單記憶：",[79,2407,2409],{"className":81,"code":2408,"language":83,"meta":84,"style":84},"int* p = &value;\n",[25,2410,2411],{"__ignoreMap":84},[88,2412,2413,2415,2417,2419,2421],{"class":90,"line":91},[88,2414,2023],{"class":94},[88,2416,1680],{"class":97},[88,2418,101],{"class":94},[88,2420,1685],{"class":94},[88,2422,1688],{"class":97},[14,2424,2425],{},"表示：",[79,2427,2430],{"className":2428,"code":2429,"language":773,"meta":84},[771],"拿到 value 的地址\n",[25,2431,2429],{"__ignoreMap":84},[79,2433,2434],{"className":81,"code":2083,"language":83,"meta":84,"style":84},[25,2435,2436],{"__ignoreMap":84},[88,2437,2438,2440,2442,2444,2446,2448,2450,2452,2454,2456],{"class":90,"line":91},[88,2439,1712],{"class":537},[88,2441,1699],{"class":97},[88,2443,1702],{"class":94},[88,2445,1705],{"class":97},[88,2447,101],{"class":94},[88,2449,482],{"class":94},[88,2451,1712],{"class":537},[88,2453,1699],{"class":97},[88,2455,1717],{"class":94},[88,2457,1720],{"class":97},[14,2459,2425],{},[79,2461,2464],{"className":2462,"code":2463,"language":773,"meta":84},[771],"把地址当成整数保存\n",[25,2465,2463],{"__ignoreMap":84},[79,2467,2468],{"className":81,"code":2209,"language":83,"meta":84,"style":84},[25,2469,2470],{"__ignoreMap":84},[88,2471,2472,2474,2476,2478,2480],{"class":90,"line":91},[88,2473,2023],{"class":94},[88,2475,1727],{"class":97},[88,2477,101],{"class":94},[88,2479,1732],{"class":94},[88,2481,1735],{"class":97},[14,2483,2425],{},[79,2485,2488],{"className":2486,"code":2487,"language":773,"meta":84},[771],"把整数地址再变回指针\n",[25,2489,2487],{"__ignoreMap":84},[79,2491,2492],{"className":81,"code":2295,"language":83,"meta":84,"style":84},[25,2493,2494],{"__ignoreMap":84},[88,2495,2496,2498],{"class":90,"line":91},[88,2497,938],{"class":94},[88,2499,2304],{"class":97},[14,2501,2425],{},[79,2503,2506],{"className":2504,"code":2505,"language":773,"meta":84},[771],"通过这个地址找到原来的 value\n",[25,2507,2505],{"__ignoreMap":84},[14,2509,2510],{},"一句話總結：",[14,2512,2513,2515,2516,2518,2519,131,2521,2523,2524,2526],{},[25,2514,272],{}," 在這個例子裡轉換的是“地址的表示形式”，不是變量裡面的值。",[25,2517,1352],{}," 的值是 ",[25,2520,2042],{},[25,2522,2134],{}," 保存的是 ",[25,2525,1352],{}," 的地址。",[10,2528,2529],{"id":2529},"四種轉換怎麼選",[281,2531,2532,2545],{},[284,2533,2534],{},[287,2535,2536,2539,2542],{},[290,2537,2538],{"align":292},"需求",[290,2540,2541],{"align":292},"推薦寫法",[290,2543,2544],{"align":292},"說明",[301,2546,2547,2564,2579,2594,2610],{},[287,2548,2549,2556,2561],{},[306,2550,2551,2553,2554],{"align":292},[25,2552,27],{}," 轉 ",[25,2555,31],{},[306,2557,2558],{"align":292},[25,2559,2560],{},"static_cast\u003Cint>(x)",[306,2562,2563],{"align":292},"明確可能丟失小數",[287,2565,2566,2571,2576],{},[306,2567,2568,2570],{"align":292},[25,2569,37],{}," 轉整數",[306,2572,2573],{"align":292},[25,2574,2575],{},"static_cast\u003Cint>(e)",[306,2577,2578],{"align":292},"枚舉類不會隱式轉整數",[287,2580,2581,2584,2589],{},[306,2582,2583],{"align":292},"基類指針轉派生類指針，並且不確定真實類型",[306,2585,2586],{"align":292},[25,2587,2588],{},"dynamic_cast\u003CDerived*>(p)",[306,2590,2591,2592],{"align":292},"轉換失敗可判斷 ",[25,2593,332],{},[287,2595,2596,2602,2607],{},[306,2597,2598,2599,2601],{"align":292},"去掉 ",[25,2600,47],{}," 適配舊接口",[306,2603,2604],{"align":292},[25,2605,2606],{},"const_cast\u003CT*>(p)",[306,2608,2609],{"align":292},"前提是舊接口不會修改真正的 const 對象",[287,2611,2612,2615,2620],{},[306,2613,2614],{"align":292},"指針和整數互轉、底層字節解釋",[306,2616,2617],{"align":292},[25,2618,2619],{},"reinterpret_cast\u003CT>(x)",[306,2621,2622],{"align":292},"非常底層，優先避免",[10,2624,2626],{"id":2625},"類型轉換-對比-c風格強轉-會增加運行開銷嗎","類型轉換 對比 C風格強轉 會增加運行開銷嗎",[14,2628,2629],{},[407,2630,2631,2633,2634,2637],{},[25,2632,310],{}," 中雖然使用了尖括號，看起來有些像模板，但它不是模板，而是 C++ 語言內置的類型轉換運算符。這裡的 ",[25,2635,2636],{},"T"," 表示要轉換成的目標類型。",[14,2639,2640],{},"與功能相同的 C 風格強轉相比，C++ 的顯式類型轉換通常不會產生額外的運行開銷：",[281,2642,2643,2652],{},[284,2644,2645],{},[287,2646,2647,2649],{},[290,2648,293],{"align":292},[290,2650,2651],{"align":292},"通常的運行開銷",[301,2653,2654,2663,2672,2681],{},[287,2655,2656,2660],{},[306,2657,2658],{"align":292},[25,2659,261],{},[306,2661,2662],{"align":292},"不會因為使用這種寫法而增加額外開銷",[287,2664,2665,2669],{},[306,2666,2667],{"align":292},[25,2668,265],{},[306,2670,2671],{"align":292},"需要在運行時檢查對象的真實類型，可能產生時間和程序體積開銷",[287,2673,2674,2678],{},[306,2675,2676],{"align":292},[25,2677,268],{},[306,2679,2680],{"align":292},"通常只改變編譯器進行類型檢查的方式，沒有運行時操作",[287,2682,2683,2687],{},[306,2684,2685],{"align":292},[25,2686,272],{},[306,2688,2689],{"align":292},"通常只改變編譯器解釋數據的方式，沒有額外轉換步驟",[14,2691,2692],{},"例如，下面兩種寫法表達的是同一種數值轉換：",[79,2694,2696],{"className":81,"code":2695,"language":83,"meta":84,"style":84},"double value = 3.14;\n\nint a = (int)value;\nint b = static_cast\u003Cint>(value);\n",[25,2697,2698,2711,2715,2732],{"__ignoreMap":84},[88,2699,2700,2702,2704,2706,2709],{"class":90,"line":91},[88,2701,27],{"class":94},[88,2703,1233],{"class":97},[88,2705,101],{"class":94},[88,2707,2708],{"class":104}," 3.14",[88,2710,108],{"class":97},[88,2712,2713],{"class":90,"line":111},[88,2714,526],{"emptyLinePlaceholder":525},[88,2716,2717,2719,2722,2724,2727,2729],{"class":90,"line":459},[88,2718,31],{"class":94},[88,2720,2721],{"class":97}," a ",[88,2723,101],{"class":94},[88,2725,2726],{"class":97}," (",[88,2728,31],{"class":94},[88,2730,2731],{"class":97},")value;\n",[88,2733,2734,2736,2739,2741,2743],{"class":90,"line":475},[88,2735,31],{"class":94},[88,2737,2738],{"class":97}," b ",[88,2740,101],{"class":94},[88,2742,224],{"class":94},[88,2744,2745],{"class":97},"(value);\n",[14,2747,2748,2749,2751],{},"編譯器通常會為它們生成相同或等價的機器指令。",[25,2750,261],{}," 的優勢不是運行得更快，而是轉換意圖更加明確，並且能夠得到更嚴格的編譯期檢查。",[14,2753,2754],{},"不過，需要區分“轉換寫法的開銷”和“轉換操作本身的開銷”。例如，把浮點數轉換成整數可能需要執行實際的處理器指令：",[79,2756,2758],{"className":81,"code":2757,"language":83,"meta":84,"style":84},"double value = 3.14;\nint result = static_cast\u003Cint>(value);\n",[25,2759,2760,2772],{"__ignoreMap":84},[88,2761,2762,2764,2766,2768,2770],{"class":90,"line":91},[88,2763,27],{"class":94},[88,2765,1233],{"class":97},[88,2767,101],{"class":94},[88,2769,2708],{"class":104},[88,2771,108],{"class":97},[88,2773,2774,2776,2778,2780,2782],{"class":90,"line":111},[88,2775,31],{"class":94},[88,2777,116],{"class":97},[88,2779,101],{"class":94},[88,2781,224],{"class":94},[88,2783,2745],{"class":97},[14,2785,2786,2787,2789,2790,2792,2793,2795],{},"這裡可能產生的運行開銷來自“把 ",[25,2788,27],{}," 轉換成 ",[25,2791,31],{},"”這個操作，而不是來自 ",[25,2794,261],{}," 語法。即使改成隱式轉換或 C 風格強轉，這個轉換操作仍然存在。",[14,2797,2798,2799,2801],{},"因此可以簡單記住：選擇 C++ 的顯式類型轉換，主要是為了讓類型檢查更嚴格、代碼意圖更清楚；除了需要運行時檢查的 ",[25,2800,265],{},"，它通常不會因為寫法不同而比 C 風格強轉更慢。",[10,2803,2805],{"id":2804},"c風格強轉為什麼不推薦","C風格強轉為什麼不推薦",[14,2807,2808],{},"C 風格強轉寫起來短：",[79,2810,2812],{"className":81,"code":2811,"language":83,"meta":84,"style":84},"int n = (int)3.14;\n",[25,2813,2814],{"__ignoreMap":84},[88,2815,2816,2818,2821,2823,2825,2827,2830,2833],{"class":90,"line":91},[88,2817,31],{"class":94},[88,2819,2820],{"class":97}," n ",[88,2822,101],{"class":94},[88,2824,2726],{"class":97},[88,2826,31],{"class":94},[88,2828,2829],{"class":97},")",[88,2831,2832],{"class":104},"3.14",[88,2834,108],{"class":97},[14,2836,2837,410,2839,414],{},[407,2838,409],{},[25,2840,413],{},[14,2842,2843],{},"更推薦寫成：",[79,2845,2847],{"className":81,"code":2846,"language":83,"meta":84,"style":84},"int n = static_cast\u003Cint>(3.14);\n",[25,2848,2849],{"__ignoreMap":84},[88,2850,2851,2853,2855,2857,2859,2861,2863],{"class":90,"line":91},[88,2852,31],{"class":94},[88,2854,2820],{"class":97},[88,2856,101],{"class":94},[88,2858,224],{"class":94},[88,2860,932],{"class":97},[88,2862,2832],{"class":104},[88,2864,2865],{"class":97},");\n",[14,2867,2868,410,2870,414],{},[407,2869,409],{},[25,2871,413],{},[14,2873,2874,2875,2877,2878,2880,2881,2883],{},"C 風格強轉可能在背後組合多種轉換能力，既可能像 ",[25,2876,261],{},"，也可能像 ",[25,2879,268],{},"，甚至接近 ",[25,2882,272],{},"。代碼越底層、類型越複雜，這種“不說明白”的風險就越大。",[10,2885,2886],{"id":2886},"常見錯誤",[72,2888,2890],{"id":2889},"用-static_cast-做不安全向下轉換","用 static_cast 做不安全向下轉換",[79,2892,2894],{"className":81,"code":2893,"language":83,"meta":84,"style":84},"Animal* animal = new Dog;\nCat* cat = static_cast\u003CCat*>(animal);  \u002F\u002F 危险：编译可能通过，但真实对象不是 Cat\n",[25,2895,2896,2913],{"__ignoreMap":84},[88,2897,2898,2900,2902,2905,2907,2910],{"class":90,"line":91},[88,2899,935],{"class":97},[88,2901,938],{"class":94},[88,2903,2904],{"class":97}," animal ",[88,2906,101],{"class":94},[88,2908,2909],{"class":94}," new",[88,2911,2912],{"class":97}," Dog;\n",[88,2914,2915,2917,2919,2921,2923,2925,2927,2929,2932],{"class":90,"line":111},[88,2916,966],{"class":97},[88,2918,938],{"class":94},[88,2920,959],{"class":97},[88,2922,101],{"class":94},[88,2924,432],{"class":94},[88,2926,966],{"class":97},[88,2928,969],{"class":94},[88,2930,2931],{"class":97},"(animal);",[88,2933,2934],{"class":602},"  \u002F\u002F 危险：编译可能通过，但真实对象不是 Cat\n",[14,2936,2937,410,2939,414],{},[407,2938,409],{},[25,2940,413],{},[14,2942,2943,2944,32],{},"如果不確定真實類型，應該使用 ",[25,2945,265],{},[72,2947,2949],{"id":2948},"修改真正的-const-對象","修改真正的 const 對象",[79,2951,2953],{"className":81,"code":2952,"language":83,"meta":84,"style":84},"const int value = 10;\nint& ref = const_cast\u003Cint&>(value);\nref = 20;  \u002F\u002F 未定义行为\n",[25,2954,2955,2969,2982],{"__ignoreMap":84},[88,2956,2957,2959,2961,2963,2965,2967],{"class":90,"line":91},[88,2958,47],{"class":94},[88,2960,1530],{"class":94},[88,2962,1233],{"class":97},[88,2964,101],{"class":94},[88,2966,105],{"class":104},[88,2968,108],{"class":97},[88,2970,2971,2973,2976,2978,2980],{"class":90,"line":111},[88,2972,1430],{"class":94},[88,2974,2975],{"class":97}," ref ",[88,2977,101],{"class":94},[88,2979,1272],{"class":94},[88,2981,2745],{"class":97},[88,2983,2984,2987,2989,2991,2993],{"class":90,"line":459},[88,2985,2986],{"class":97},"ref ",[88,2988,101],{"class":94},[88,2990,1285],{"class":104},[88,2992,1577],{"class":97},[88,2994,2995],{"class":602},"  \u002F\u002F 未定义行为\n",[14,2997,2998,410,3000,414],{},[407,2999,409],{},[25,3001,413],{},[72,3003,3005],{"id":3004},"濫用-reinterpret_cast","濫用 reinterpret_cast",[79,3007,3009],{"className":81,"code":3008,"language":83,"meta":84,"style":84},"double d = 3.14;\nint* p = reinterpret_cast\u003Cint*>(&d);  \u002F\u002F 危险：把 double 对象当 int 对象访问\n",[25,3010,3011,3024],{"__ignoreMap":84},[88,3012,3013,3015,3018,3020,3022],{"class":90,"line":91},[88,3014,27],{"class":94},[88,3016,3017],{"class":97}," d ",[88,3019,101],{"class":94},[88,3021,2708],{"class":104},[88,3023,108],{"class":97},[88,3025,3026,3028,3030,3032,3034,3036,3038,3041],{"class":90,"line":111},[88,3027,2023],{"class":94},[88,3029,1680],{"class":97},[88,3031,101],{"class":94},[88,3033,1732],{"class":94},[88,3035,932],{"class":97},[88,3037,1106],{"class":94},[88,3039,3040],{"class":97},"d);",[88,3042,3043],{"class":602},"  \u002F\u002F 危险：把 double 对象当 int 对象访问\n",[14,3045,3046,410,3048,414],{},[407,3047,409],{},[25,3049,413],{},[10,3051,3052],{"id":3052},"使用建議",[3054,3055,3056,3061,3067,3075,3080],"ol",{},[21,3057,3058,3059,32],{},"普通轉換優先用 ",[25,3060,261],{},[21,3062,3063,3064,3066],{},"多態向下轉換優先用 ",[25,3065,265],{},"，並檢查失敗情況。",[21,3068,3069,3071,3072,3074],{},[25,3070,268],{}," 只用於適配舊接口，不要用它修改真正的 ",[25,3073,47],{}," 對象。",[21,3076,3077,3079],{},[25,3078,272],{}," 只放在非常底層、邊界清晰的代碼裡，並集中封裝。",[21,3081,3082],{},"不要為了少打幾個字使用 C 風格強轉。",[10,3084,3085],{"id":3085},"小結",[18,3087,3088,3093,3098,3108],{},[21,3089,3090,3092],{},[25,3091,261],{},"：常規轉換，最常用。",[21,3094,3095,3097],{},[25,3096,265],{},"：多態類型安全向下轉換。",[21,3099,3100,3102,3103,346,3105,3107],{},[25,3101,268],{},"：只改變 ",[25,3104,47],{},[25,3106,349],{}," 限定。",[21,3109,3110,3112],{},[25,3111,272],{},"：底層重解釋，風險最高。",[14,3114,3115],{},"一句話記憶：能不用就不用；必須用時，把轉換意圖寫清楚。",[3117,3118,3119],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .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 .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":84,"searchDepth":111,"depth":111,"links":3121},[3122,3123,3127,3128,3129,3130,3131,3139,3140,3141,3142,3147,3148],{"id":12,"depth":111,"text":12},{"id":67,"depth":111,"text":67,"children":3124},[3125,3126],{"id":74,"depth":459,"text":74},{"id":193,"depth":459,"text":193},{"id":276,"depth":111,"text":276},{"id":372,"depth":111,"text":373},{"id":379,"depth":111,"text":379},{"id":417,"depth":111,"text":417},{"id":497,"depth":111,"text":497,"children":3132},[3133,3134,3135,3137],{"id":500,"depth":459,"text":501},{"id":778,"depth":459,"text":779},{"id":1174,"depth":459,"text":3136},"示例 3：const_cast 只改變 const 限定",{"id":1591,"depth":459,"text":3138},"示例 4：reinterpret_cast 做底層重解釋",{"id":2529,"depth":111,"text":2529},{"id":2625,"depth":111,"text":2626},{"id":2804,"depth":111,"text":2805},{"id":2886,"depth":111,"text":2886,"children":3143},[3144,3145,3146],{"id":2889,"depth":459,"text":2890},{"id":2948,"depth":459,"text":2949},{"id":3004,"depth":459,"text":3005},{"id":3052,"depth":111,"text":3052},{"id":3085,"depth":111,"text":3085},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan",0,"1900","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教学\u002F1900-C++类型转换",false,null,"zh-TW","zh-tw",{},{"title":5,"description":84},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","dBcc-vCsStT1kUeHXcFvv5u5pT7z_TUHrfRkO6RgrJA",[3169,3174,3179,3184,3189,3194,3199,3204,3209,3214,3219,3224,3229,3234,3239,3244,3249,3254,3259,3264,3269,3274,3279,3284,3289,3294,3299,3304,3309,3314,3319,3324,3329,3334,3339,3344,3349,3350,3355,3359,3364,3368,3373,3378,3383,3388,3393,3398,3403,3408,3413,3418,3423,3428,3433,3438,3443,3448,3453,3458,3463,3468,3473,3478,3483,3488,3493,3498,3503,3508,3513,3518,3523,3528,3533,3538,3543,3548,3553,3558,3563,3568],{"path":3170,"stem":3171,"title":3172,"date":3152,"chapterOrder":3173,"chapterDepth":3150,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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",{"path":3175,"stem":3176,"title":3177,"date":3152,"chapterOrder":3178,"chapterDepth":3150,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3180,"stem":3181,"title":3182,"date":3152,"chapterOrder":3183,"chapterDepth":3150,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3185,"stem":3186,"title":3187,"date":3152,"chapterOrder":3188,"chapterDepth":3150,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3190,"stem":3191,"title":3192,"date":3152,"chapterOrder":3193,"chapterDepth":3150,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","運算符","0500",{"path":3195,"stem":3196,"title":3197,"date":3152,"chapterOrder":3198,"chapterDepth":3150,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3200,"stem":3201,"title":3202,"date":3152,"chapterOrder":3203,"chapterDepth":3150,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","數組","0700",{"path":3205,"stem":3206,"title":3207,"date":3152,"chapterOrder":3208,"chapterDepth":3150,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3210,"stem":3211,"title":3212,"date":3152,"chapterOrder":3213,"chapterDepth":3150,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","指針","0900",{"path":3215,"stem":3216,"title":3217,"date":3152,"chapterOrder":3218,"chapterDepth":3150,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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-结构体与共用体","結構體與共用體","1000",{"path":3220,"stem":3221,"title":3222,"date":3152,"chapterOrder":3223,"chapterDepth":3150,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3225,"stem":3226,"title":3227,"date":3152,"chapterOrder":3228,"chapterDepth":3150,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","引用","1200",{"path":3230,"stem":3231,"title":3232,"date":3152,"chapterOrder":3233,"chapterDepth":3150,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3235,"stem":3236,"title":3237,"date":3152,"chapterOrder":3238,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3240,"stem":3241,"title":3242,"date":3152,"chapterOrder":3243,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3245,"stem":3246,"title":3247,"date":3152,"chapterOrder":3248,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3250,"stem":3251,"title":3252,"date":3152,"chapterOrder":3253,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3255,"stem":3256,"title":3257,"date":3152,"chapterOrder":3258,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3260,"stem":3261,"title":3262,"date":3152,"chapterOrder":3263,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3265,"stem":3266,"title":3267,"date":3152,"chapterOrder":3268,"chapterDepth":3150,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3270,"stem":3271,"title":3272,"date":3152,"chapterOrder":3273,"chapterDepth":3150,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3275,"stem":3276,"title":3277,"date":3152,"chapterOrder":3278,"chapterDepth":3150,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3280,"stem":3281,"title":3282,"date":3152,"chapterOrder":3283,"chapterDepth":3150,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","模板","1700",{"path":3285,"stem":3286,"title":3287,"date":3152,"chapterOrder":3288,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3290,"stem":3291,"title":3292,"date":3152,"chapterOrder":3293,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3295,"stem":3296,"title":3297,"date":3152,"chapterOrder":3298,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3300,"stem":3301,"title":3302,"date":3152,"chapterOrder":3303,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3305,"stem":3306,"title":3307,"date":3152,"chapterOrder":3308,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3310,"stem":3311,"title":3312,"date":3152,"chapterOrder":3313,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3315,"stem":3316,"title":3317,"date":3152,"chapterOrder":3318,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3320,"stem":3321,"title":3322,"date":3152,"chapterOrder":3323,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3325,"stem":3326,"title":3327,"date":3152,"chapterOrder":3328,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3330,"stem":3331,"title":3332,"date":3152,"chapterOrder":3333,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3335,"stem":3336,"title":3337,"date":3152,"chapterOrder":3338,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3340,"stem":3341,"title":3342,"date":3152,"chapterOrder":3343,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3345,"stem":3346,"title":3347,"date":3152,"chapterOrder":3348,"chapterDepth":3150,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3149,"stem":3166,"title":5,"date":3152,"chapterOrder":3151,"chapterDepth":3150,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},{"path":3351,"stem":3352,"title":3353,"date":3152,"chapterOrder":3354,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3356,"stem":3357,"title":332,"date":3152,"chapterOrder":3358,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3360,"stem":3361,"title":3362,"date":3152,"chapterOrder":3363,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3365,"stem":3366,"title":37,"date":3152,"chapterOrder":3367,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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","2000-0400",{"path":3369,"stem":3370,"title":3371,"date":3152,"chapterOrder":3372,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3374,"stem":3375,"title":3376,"date":3152,"chapterOrder":3377,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3379,"stem":3380,"title":3381,"date":3152,"chapterOrder":3382,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3384,"stem":3385,"title":3386,"date":3152,"chapterOrder":3387,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3389,"stem":3390,"title":3391,"date":3152,"chapterOrder":3392,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3394,"stem":3395,"title":3396,"date":3152,"chapterOrder":3397,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\u002Fzh-tw\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-右值引用和移动语义","右值引用和移動語義","2000-1000",{"path":3399,"stem":3400,"title":3401,"date":3152,"chapterOrder":3402,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3404,"stem":3405,"title":3406,"date":3152,"chapterOrder":3407,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3409,"stem":3410,"title":3411,"date":3152,"chapterOrder":3412,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3414,"stem":3415,"title":3416,"date":3152,"chapterOrder":3417,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3419,"stem":3420,"title":3421,"date":3152,"chapterOrder":3422,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3424,"stem":3425,"title":3426,"date":3152,"chapterOrder":3427,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3429,"stem":3430,"title":3431,"date":3152,"chapterOrder":3432,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3434,"stem":3435,"title":3436,"date":3152,"chapterOrder":3437,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3439,"stem":3440,"title":3441,"date":3152,"chapterOrder":3442,"chapterDepth":111,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3444,"stem":3445,"title":3446,"date":3152,"chapterOrder":3447,"chapterDepth":111,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3449,"stem":3450,"title":3451,"date":3152,"chapterOrder":3452,"chapterDepth":111,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3454,"stem":3455,"title":3456,"date":3152,"chapterOrder":3457,"chapterDepth":111,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3459,"stem":3460,"title":3461,"date":3152,"chapterOrder":3462,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3464,"stem":3465,"title":3466,"date":3152,"chapterOrder":3467,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3469,"stem":3470,"title":3471,"date":3152,"chapterOrder":3472,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3474,"stem":3475,"title":3476,"date":3152,"chapterOrder":3477,"chapterDepth":3150,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3479,"stem":3480,"title":3481,"date":3152,"chapterOrder":3482,"chapterDepth":111,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3484,"stem":3485,"title":3486,"date":3152,"chapterOrder":3487,"chapterDepth":111,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3489,"stem":3490,"title":3491,"date":3152,"chapterOrder":3492,"chapterDepth":111,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3494,"stem":3495,"title":3496,"date":3152,"chapterOrder":3497,"chapterDepth":111,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3499,"stem":3500,"title":3501,"date":3152,"chapterOrder":3502,"chapterDepth":111,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3504,"stem":3505,"title":3506,"date":3152,"chapterOrder":3507,"chapterDepth":111,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3509,"stem":3510,"title":3511,"date":3152,"chapterOrder":3512,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3514,"stem":3515,"title":3516,"date":3152,"chapterOrder":3517,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3519,"stem":3520,"title":3521,"date":3152,"chapterOrder":3522,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3524,"stem":3525,"title":3526,"date":3152,"chapterOrder":3527,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3529,"stem":3530,"title":3531,"date":3152,"chapterOrder":3532,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3534,"stem":3535,"title":3536,"date":3152,"chapterOrder":3537,"chapterDepth":3150,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","常用庫學習","2100",{"path":3539,"stem":3540,"title":3541,"date":3152,"chapterOrder":3542,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3544,"stem":3545,"title":3546,"date":3152,"chapterOrder":3547,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3549,"stem":3550,"title":3551,"date":3152,"chapterOrder":3552,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3554,"stem":3555,"title":3556,"date":3152,"chapterOrder":3557,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3559,"stem":3560,"title":3561,"date":3152,"chapterOrder":3562,"chapterDepth":91,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3564,"stem":3565,"title":3566,"date":3152,"chapterOrder":3567,"chapterDepth":3150,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":3159},"\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":3155,"stem":3569,"title":3570,"date":3152,"chapterOrder":3160,"chapterDepth":3150,"docKey":3154,"docRoot":3155,"docTitle":3156,"isWikiDoc":525,"isWikiIndex":525},"_i18n\u002Fzh-tw\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++教程",{"variants":3572},[3573,3576,3579,3582,3583],{"path":3574,"localeSlug":3575,"i18nKey":3158},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","en-us",{"path":3577,"localeSlug":3578,"i18nKey":3158},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","zh-hant",{"path":3580,"localeSlug":3581,"i18nKey":3158},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","zh-hk",{"path":3149,"localeSlug":3162,"i18nKey":3158},{"path":3584,"localeSlug":3585,"i18nKey":3158},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","zh-cn",[3574,3165,3577,3165,3580,3165,3149,3165,3584,3165],1784646892892]