[{"data":1,"prerenderedAt":2253},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan":3,"wiki-doc-items-2023-10-05-cplusplus-jiao-xue":1869},{"id":4,"title":5,"body":6,"chapterDepth":1856,"chapterOrder":1857,"date":1858,"description":180,"docKey":1859,"docRoot":1860,"docTitle":1861,"extension":1862,"isWikiDoc":324,"isWikiIndex":1863,"meta":1864,"navigation":324,"path":1865,"seo":1866,"stem":1867,"wikiDepth":187,"__hash__":1868},"wiki\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换.md","C++类型转换",{"type":7,"value":8,"toc":1834},"minimark",[9,13,17,52,62,65,68,71,158,161,165,168,171,174,204,211,214,287,292,295,300,309,564,570,578,582,588,949,953,959,975,979,995,1137,1141,1147,1167,1171,1177,1389,1393,1399,1402,1405,1498,1502,1505,1532,1543,1546,1568,1576,1588,1591,1595,1639,1648,1653,1657,1707,1715,1719,1759,1764,1767,1797,1800,1827,1830],[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],{},"C++ 的四种显式类型转换是：",[72,73,74,91],"table",{},[75,76,77],"thead",{},[78,79,80,85,88],"tr",{},[81,82,84],"th",{"align":83},"left","转换方式",[81,86,87],{"align":83},"主要用途",[81,89,90],{"align":83},"安全程度",[92,93,94,108,125,145],"tbody",{},[78,95,96,102,105],{},[97,98,99],"td",{"align":83},[25,100,101],{},"static_cast\u003CT>(expr)",[97,103,104],{"align":83},"常规类型转换，如数值、枚举、父子类上行转换",[97,106,107],{"align":83},"常用，编译期检查",[78,109,110,115,118],{},[97,111,112],{"align":83},[25,113,114],{},"dynamic_cast\u003CT>(expr)",[97,116,117],{"align":83},"多态类型的安全向下转换",[97,119,120,121,124],{"align":83},"运行期检查，失败返回 ",[25,122,123],{},"nullptr"," 或抛异常",[78,126,127,132,142],{},[97,128,129],{"align":83},[25,130,131],{},"const_cast\u003CT>(expr)",[97,133,134,135,137,138,141],{"align":83},"添加或移除 ",[25,136,47],{}," \u002F ",[25,139,140],{},"volatile"," 限定",[97,143,144],{"align":83},"要非常克制",[78,146,147,152,155],{},[97,148,149],{"align":83},[25,150,151],{},"reinterpret_cast\u003CT>(expr)",[97,153,154],{"align":83},"底层二进制重解释，如指针和整数互转",[97,156,157],{"align":83},"最危险，少用",[14,159,160],{},"原则：能不用强转就不用；必须强转时，优先选择语义最窄、最能说明意图的转换。",[10,162,164],{"id":163},"c-标准版本","C++ 标准版本",[14,166,167],{},"C++98 就已经提供这四种转换写法，实际工程中依然推荐使用它们替代 C 风格强转。",[10,169,170],{"id":170},"需要的头文件",[14,172,173],{},"类型转换本身不需要额外头文件。示例代码使用到的库需要对应头文件，例如：",[175,176,181],"pre",{"className":177,"code":178,"language":179,"meta":180,"style":180},"language-cpp shiki shiki-themes github-light github-dark","#include \u003Ccstdint>\n#include \u003Ciostream>\n","cpp","",[25,182,183,196],{"__ignoreMap":180},[184,185,188,192],"span",{"class":186,"line":187},"line",1,[184,189,191],{"class":190},"szBVR","#include",[184,193,195],{"class":194},"sZZnC"," \u003Ccstdint>\n",[184,197,199,201],{"class":186,"line":198},2,[184,200,191],{"class":190},[184,202,203],{"class":194}," \u003Ciostream>\n",[14,205,206,210],{},[207,208,209],"strong",{},"运行\u002F观察结果："," 这段是头文件示例，放到完整程序顶部即可。",[10,212,213],{"id":213},"基本语法",[175,215,217],{"className":177,"code":216,"language":179,"meta":180,"style":180},"目标类型 value = static_cast\u003C目标类型>(表达式);\n目标类型 value = dynamic_cast\u003C目标类型>(表达式);\n目标类型 value = const_cast\u003C目标类型>(表达式);\n目标类型 value = reinterpret_cast\u003C目标类型>(表达式);\n",[25,218,219,240,255,271],{"__ignoreMap":180},[184,220,221,225,228,231,234,237],{"class":186,"line":187},[184,222,224],{"class":223},"sVt8B","目标类型 value ",[184,226,227],{"class":190},"=",[184,229,230],{"class":190}," static_cast\u003C",[184,232,233],{"class":223},"目标类型",[184,235,236],{"class":190},">",[184,238,239],{"class":223},"(表达式);\n",[184,241,242,244,246,249,251,253],{"class":186,"line":198},[184,243,224],{"class":223},[184,245,227],{"class":190},[184,247,248],{"class":190}," dynamic_cast\u003C",[184,250,233],{"class":223},[184,252,236],{"class":190},[184,254,239],{"class":223},[184,256,258,260,262,265,267,269],{"class":186,"line":257},3,[184,259,224],{"class":223},[184,261,227],{"class":190},[184,263,264],{"class":190}," const_cast\u003C",[184,266,233],{"class":223},[184,268,236],{"class":190},[184,270,239],{"class":223},[184,272,274,276,278,281,283,285],{"class":186,"line":273},4,[184,275,224],{"class":223},[184,277,227],{"class":190},[184,279,280],{"class":190}," reinterpret_cast\u003C",[184,282,233],{"class":223},[184,284,236],{"class":190},[184,286,239],{"class":223},[14,288,289,291],{},[207,290,209],{}," 这段是语法格式说明，重点看四种转换的写法差异。",[10,293,294],{"id":294},"示例代码",[296,297,299],"h3",{"id":298},"示例-1static_cast-处理常规转换","示例 1：static_cast 处理常规转换",[14,301,302,305,306,308],{},[25,303,304],{},"static_cast"," 适合明确、常规、编译期能检查的转换。比如数值转换、",[25,307,37],{}," 转整数、父类指针指向子类对象等。",[175,310,312],{"className":177,"code":311,"language":179,"meta":180,"style":180},"#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,313,314,320,326,338,343,359,370,376,381,392,397,404,421,438,443,457,472,477,510,536,541,547,558],{"__ignoreMap":180},[184,315,316,318],{"class":186,"line":187},[184,317,191],{"class":190},[184,319,203],{"class":194},[184,321,322],{"class":186,"line":198},[184,323,325],{"emptyLinePlaceholder":324},true,"\n",[184,327,328,331,334],{"class":186,"line":257},[184,329,330],{"class":190},"enum",[184,332,333],{"class":190}," class",[184,335,337],{"class":336},"sScJk"," Status\n",[184,339,340],{"class":186,"line":273},[184,341,342],{"class":223},"{\n",[184,344,346,350,353,356],{"class":186,"line":345},5,[184,347,349],{"class":348},"sj4cs","    ok",[184,351,352],{"class":190}," =",[184,354,355],{"class":348}," 200",[184,357,358],{"class":223},",\n",[184,360,362,365,367],{"class":186,"line":361},6,[184,363,364],{"class":348},"    not_found",[184,366,352],{"class":190},[184,368,369],{"class":348}," 404\n",[184,371,373],{"class":186,"line":372},7,[184,374,375],{"class":223},"};\n",[184,377,379],{"class":186,"line":378},8,[184,380,325],{"emptyLinePlaceholder":324},[184,382,384,386,389],{"class":186,"line":383},9,[184,385,31],{"class":190},[184,387,388],{"class":336}," main",[184,390,391],{"class":223},"()\n",[184,393,395],{"class":186,"line":394},10,[184,396,342],{"class":223},[184,398,400],{"class":186,"line":399},11,[184,401,403],{"class":402},"sJ8bj","    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n",[184,405,407,410,413,415,418],{"class":186,"line":406},12,[184,408,409],{"class":190},"    double",[184,411,412],{"class":223}," score ",[184,414,227],{"class":190},[184,416,417],{"class":348}," 89.7",[184,419,420],{"class":223},";\n",[184,422,424,427,430,432,435],{"class":186,"line":423},13,[184,425,426],{"class":190},"    int",[184,428,429],{"class":223}," integer_score ",[184,431,227],{"class":190},[184,433,434],{"class":190}," static_cast\u003Cint>",[184,436,437],{"class":223},"(score);\n",[184,439,441],{"class":186,"line":440},14,[184,442,325],{"emptyLinePlaceholder":324},[184,444,446,449,451,454],{"class":186,"line":445},15,[184,447,448],{"class":223},"    Status status ",[184,450,227],{"class":190},[184,452,453],{"class":336}," Status",[184,455,456],{"class":223},"::not_found;\n",[184,458,460,462,465,467,469],{"class":186,"line":459},16,[184,461,426],{"class":190},[184,463,464],{"class":223}," status_code ",[184,466,227],{"class":190},[184,468,434],{"class":190},[184,470,471],{"class":223},"(status);\n",[184,473,475],{"class":186,"line":474},17,[184,476,325],{"emptyLinePlaceholder":324},[184,478,480,483,486,489,492,495,497,499,502,505,508],{"class":186,"line":479},18,[184,481,482],{"class":336},"    std",[184,484,485],{"class":223},"::cout ",[184,487,488],{"class":190},"\u003C\u003C",[184,490,491],{"class":194}," \"integer_score = \"",[184,493,494],{"class":190}," \u003C\u003C",[184,496,429],{"class":223},[184,498,488],{"class":190},[184,500,501],{"class":194}," \"",[184,503,504],{"class":348},"\\n",[184,506,507],{"class":194},"\"",[184,509,420],{"class":223},[184,511,513,515,517,519,522,524,526,528,530,532,534],{"class":186,"line":512},19,[184,514,482],{"class":336},[184,516,485],{"class":223},[184,518,488],{"class":190},[184,520,521],{"class":194}," \"status_code = \"",[184,523,494],{"class":190},[184,525,464],{"class":223},[184,527,488],{"class":190},[184,529,501],{"class":194},[184,531,504],{"class":348},[184,533,507],{"class":194},[184,535,420],{"class":223},[184,537,539],{"class":186,"line":538},20,[184,540,325],{"emptyLinePlaceholder":324},[184,542,544],{"class":186,"line":543},21,[184,545,546],{"class":402},"    \u002F\u002F 返回 0 表示程序正常结束。\n",[184,548,550,553,556],{"class":186,"line":549},22,[184,551,552],{"class":190},"    return",[184,554,555],{"class":348}," 0",[184,557,420],{"class":223},[184,559,561],{"class":186,"line":560},23,[184,562,563],{"class":223},"}\n",[14,565,566,569],{},[207,567,568],{},"运行结果","：",[175,571,576],{"className":572,"code":574,"language":575,"meta":180},[573],"language-text","integer_score = 89\nstatus_code = 404\n","text",[25,577,574],{"__ignoreMap":180},[296,579,581],{"id":580},"示例-2dynamic_cast-安全判断真实对象类型","示例 2：dynamic_cast 安全判断真实对象类型",[14,583,584,587],{},[25,585,586],{},"dynamic_cast"," 常用于多态基类。向下转换时，它会在运行期检查对象真实类型。",[175,589,591],{"className":177,"code":590,"language":179,"meta":180,"style":180},"#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,592,593,599,603,611,615,633,637,641,651,655,668,673,691,696,700,704,713,717,721,725,749,753,776,780,797,802,814,819,825,830,848,853,858,863,872,877,882,888,894,899,913,925,930,935,944],{"__ignoreMap":180},[184,594,595,597],{"class":186,"line":187},[184,596,191],{"class":190},[184,598,203],{"class":194},[184,600,601],{"class":186,"line":198},[184,602,325],{"emptyLinePlaceholder":324},[184,604,605,608],{"class":186,"line":257},[184,606,607],{"class":190},"struct",[184,609,610],{"class":336}," Animal\n",[184,612,613],{"class":186,"line":273},[184,614,342],{"class":223},[184,616,617,620,623,626,628,631],{"class":186,"line":345},[184,618,619],{"class":190},"    virtual",[184,621,622],{"class":336}," ~Animal",[184,624,625],{"class":223},"() ",[184,627,227],{"class":190},[184,629,630],{"class":190}," default",[184,632,420],{"class":223},[184,634,635],{"class":186,"line":361},[184,636,375],{"class":223},[184,638,639],{"class":186,"line":372},[184,640,325],{"emptyLinePlaceholder":324},[184,642,643,645,648],{"class":186,"line":378},[184,644,607],{"class":190},[184,646,647],{"class":336}," Cat",[184,649,650],{"class":223}," : Animal\n",[184,652,653],{"class":186,"line":383},[184,654,342],{"class":223},[184,656,657,660,663,665],{"class":186,"line":394},[184,658,659],{"class":190},"    void",[184,661,662],{"class":336}," meow",[184,664,625],{"class":223},[184,666,667],{"class":190},"const\n",[184,669,670],{"class":186,"line":399},[184,671,672],{"class":223},"    {\n",[184,674,675,678,680,682,685,687,689],{"class":186,"line":406},[184,676,677],{"class":336},"        std",[184,679,485],{"class":223},[184,681,488],{"class":190},[184,683,684],{"class":194}," \"cat: meow",[184,686,504],{"class":348},[184,688,507],{"class":194},[184,690,420],{"class":223},[184,692,693],{"class":186,"line":423},[184,694,695],{"class":223},"    }\n",[184,697,698],{"class":186,"line":440},[184,699,375],{"class":223},[184,701,702],{"class":186,"line":445},[184,703,325],{"emptyLinePlaceholder":324},[184,705,706,708,711],{"class":186,"line":459},[184,707,607],{"class":190},[184,709,710],{"class":336}," Dog",[184,712,650],{"class":223},[184,714,715],{"class":186,"line":474},[184,716,342],{"class":223},[184,718,719],{"class":186,"line":479},[184,720,375],{"class":223},[184,722,723],{"class":186,"line":512},[184,724,325],{"emptyLinePlaceholder":324},[184,726,727,730,733,736,739,742,746],{"class":186,"line":538},[184,728,729],{"class":190},"void",[184,731,732],{"class":336}," try_meow",[184,734,735],{"class":223},"(",[184,737,738],{"class":336},"Animal",[184,740,741],{"class":190},"*",[184,743,745],{"class":744},"s4XuR"," animal",[184,747,748],{"class":223},")\n",[184,750,751],{"class":186,"line":543},[184,752,342],{"class":223},[184,754,755,758,760,763,765,767,770,773],{"class":186,"line":549},[184,756,757],{"class":223},"    Cat",[184,759,741],{"class":190},[184,761,762],{"class":223}," cat ",[184,764,227],{"class":190},[184,766,248],{"class":190},[184,768,769],{"class":223},"Cat",[184,771,772],{"class":190},"*>",[184,774,775],{"class":223},"(animal);\n",[184,777,778],{"class":186,"line":560},[184,779,325],{"emptyLinePlaceholder":324},[184,781,783,786,789,792,795],{"class":186,"line":782},24,[184,784,785],{"class":190},"    if",[184,787,788],{"class":223}," (cat ",[184,790,791],{"class":190},"!=",[184,793,794],{"class":348}," nullptr",[184,796,748],{"class":223},[184,798,800],{"class":186,"line":799},25,[184,801,672],{"class":223},[184,803,805,808,811],{"class":186,"line":804},26,[184,806,807],{"class":223},"        cat->",[184,809,810],{"class":336},"meow",[184,812,813],{"class":223},"();\n",[184,815,817],{"class":186,"line":816},27,[184,818,695],{"class":223},[184,820,822],{"class":186,"line":821},28,[184,823,824],{"class":190},"    else\n",[184,826,828],{"class":186,"line":827},29,[184,829,672],{"class":223},[184,831,833,835,837,839,842,844,846],{"class":186,"line":832},30,[184,834,677],{"class":336},[184,836,485],{"class":223},[184,838,488],{"class":190},[184,840,841],{"class":194}," \"not a cat",[184,843,504],{"class":348},[184,845,507],{"class":194},[184,847,420],{"class":223},[184,849,851],{"class":186,"line":850},31,[184,852,695],{"class":223},[184,854,856],{"class":186,"line":855},32,[184,857,563],{"class":223},[184,859,861],{"class":186,"line":860},33,[184,862,325],{"emptyLinePlaceholder":324},[184,864,866,868,870],{"class":186,"line":865},34,[184,867,31],{"class":190},[184,869,388],{"class":336},[184,871,391],{"class":223},[184,873,875],{"class":186,"line":874},35,[184,876,342],{"class":223},[184,878,880],{"class":186,"line":879},36,[184,881,403],{"class":402},[184,883,885],{"class":186,"line":884},37,[184,886,887],{"class":223},"    Cat cat;\n",[184,889,891],{"class":186,"line":890},38,[184,892,893],{"class":223},"    Dog dog;\n",[184,895,897],{"class":186,"line":896},39,[184,898,325],{"emptyLinePlaceholder":324},[184,900,902,905,907,910],{"class":186,"line":901},40,[184,903,904],{"class":336},"    try_meow",[184,906,735],{"class":223},[184,908,909],{"class":190},"&",[184,911,912],{"class":223},"cat);\n",[184,914,916,918,920,922],{"class":186,"line":915},41,[184,917,904],{"class":336},[184,919,735],{"class":223},[184,921,909],{"class":190},[184,923,924],{"class":223},"dog);\n",[184,926,928],{"class":186,"line":927},42,[184,929,325],{"emptyLinePlaceholder":324},[184,931,933],{"class":186,"line":932},43,[184,934,546],{"class":402},[184,936,938,940,942],{"class":186,"line":937},44,[184,939,552],{"class":190},[184,941,555],{"class":348},[184,943,420],{"class":223},[184,945,947],{"class":186,"line":946},45,[184,948,563],{"class":223},[14,950,951,569],{},[207,952,568],{},[175,954,957],{"className":955,"code":956,"language":575,"meta":180},[573],"cat: meow\nnot a cat\n",[25,958,956],{"__ignoreMap":180},[960,961,962],"blockquote",{},[14,963,964,965,967,968,970,971,974],{},"注意：",[25,966,586],{}," 用在指针上，转换失败会得到 ",[25,969,123],{},"；用在引用上，转换失败会抛出 ",[25,972,973],{},"std::bad_cast","。它要求基类至少有一个虚函数，通常是虚析构函数。",[296,976,978],{"id":977},"示例-3const_cast-只改变-const-限定","示例 3：const_cast 只改变 const 限定",[14,980,981,984,985,137,987,989,990,28,992,994],{},[25,982,983],{},"const_cast"," 只能添加或移除 ",[25,986,47],{},[25,988,140],{},"，不能把 ",[25,991,31],{},[25,993,27],{},"，也不能把不相关类型互转。",[175,996,998],{"className":177,"code":997,"language":179,"meta":180,"style":180},"#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,999,1000,1006,1010,1018,1022,1026,1040,1056,1060,1076,1088,1092,1117,1121,1125,1133],{"__ignoreMap":180},[184,1001,1002,1004],{"class":186,"line":187},[184,1003,191],{"class":190},[184,1005,203],{"class":194},[184,1007,1008],{"class":186,"line":198},[184,1009,325],{"emptyLinePlaceholder":324},[184,1011,1012,1014,1016],{"class":186,"line":257},[184,1013,31],{"class":190},[184,1015,388],{"class":336},[184,1017,391],{"class":223},[184,1019,1020],{"class":186,"line":273},[184,1021,342],{"class":223},[184,1023,1024],{"class":186,"line":345},[184,1025,403],{"class":402},[184,1027,1028,1030,1033,1035,1038],{"class":186,"line":361},[184,1029,426],{"class":190},[184,1031,1032],{"class":223}," value ",[184,1034,227],{"class":190},[184,1036,1037],{"class":348}," 10",[184,1039,420],{"class":223},[184,1041,1042,1045,1048,1051,1053],{"class":186,"line":372},[184,1043,1044],{"class":190},"    const",[184,1046,1047],{"class":190}," int&",[184,1049,1050],{"class":223}," readonly_ref ",[184,1052,227],{"class":190},[184,1054,1055],{"class":223}," value;\n",[184,1057,1058],{"class":186,"line":378},[184,1059,325],{"emptyLinePlaceholder":324},[184,1061,1062,1065,1068,1070,1073],{"class":186,"line":383},[184,1063,1064],{"class":190},"    int&",[184,1066,1067],{"class":223}," writable_ref ",[184,1069,227],{"class":190},[184,1071,1072],{"class":190}," const_cast\u003Cint&>",[184,1074,1075],{"class":223},"(readonly_ref);\n",[184,1077,1078,1081,1083,1086],{"class":186,"line":394},[184,1079,1080],{"class":223},"    writable_ref ",[184,1082,227],{"class":190},[184,1084,1085],{"class":348}," 20",[184,1087,420],{"class":223},[184,1089,1090],{"class":186,"line":399},[184,1091,325],{"emptyLinePlaceholder":324},[184,1093,1094,1096,1098,1100,1103,1105,1107,1109,1111,1113,1115],{"class":186,"line":406},[184,1095,482],{"class":336},[184,1097,485],{"class":223},[184,1099,488],{"class":190},[184,1101,1102],{"class":194}," \"value = \"",[184,1104,494],{"class":190},[184,1106,1032],{"class":223},[184,1108,488],{"class":190},[184,1110,501],{"class":194},[184,1112,504],{"class":348},[184,1114,507],{"class":194},[184,1116,420],{"class":223},[184,1118,1119],{"class":186,"line":423},[184,1120,325],{"emptyLinePlaceholder":324},[184,1122,1123],{"class":186,"line":440},[184,1124,546],{"class":402},[184,1126,1127,1129,1131],{"class":186,"line":445},[184,1128,552],{"class":190},[184,1130,555],{"class":348},[184,1132,420],{"class":223},[184,1134,1135],{"class":186,"line":459},[184,1136,563],{"class":223},[14,1138,1139,569],{},[207,1140,568],{},[175,1142,1145],{"className":1143,"code":1144,"language":575,"meta":180},[573],"value = 20\n",[25,1146,1144],{"__ignoreMap":180},[14,1148,1149,1150,1153,1154,1156,1157,1160,1161,1163,1164,1166],{},"这个例子能修改成功，是因为真正的原始对象 ",[25,1151,1152],{},"value"," 不是 ",[25,1155,47],{},"，只是通过 ",[25,1158,1159],{},"const int&"," 观察它。如果原始对象本身就是 ",[25,1162,47],{},"，再用 ",[25,1165,983],{}," 强行修改就是未定义行为。",[296,1168,1170],{"id":1169},"示例-4reinterpret_cast-做底层重解释","示例 4：reinterpret_cast 做底层重解释",[14,1172,1173,1176],{},[25,1174,1175],{},"reinterpret_cast"," 表示“把这段二进制数据按另一种类型解释”。它绕过了很多类型系统保护，通常只应该出现在非常底层的代码里。",[175,1178,1180],{"className":177,"code":1179,"language":179,"meta":180,"style":180},"#include \u003Ccstdint>\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 \"*again = \" \u003C\u003C *again \u003C\u003C \"\\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,1181,1182,1188,1194,1198,1206,1210,1214,1227,1243,1247,1275,1290,1294,1323,1337,1369,1373,1377,1385],{"__ignoreMap":180},[184,1183,1184,1186],{"class":186,"line":187},[184,1185,191],{"class":190},[184,1187,195],{"class":194},[184,1189,1190,1192],{"class":186,"line":198},[184,1191,191],{"class":190},[184,1193,203],{"class":194},[184,1195,1196],{"class":186,"line":257},[184,1197,325],{"emptyLinePlaceholder":324},[184,1199,1200,1202,1204],{"class":186,"line":273},[184,1201,31],{"class":190},[184,1203,388],{"class":336},[184,1205,391],{"class":223},[184,1207,1208],{"class":186,"line":345},[184,1209,342],{"class":223},[184,1211,1212],{"class":186,"line":361},[184,1213,403],{"class":402},[184,1215,1216,1218,1220,1222,1225],{"class":186,"line":372},[184,1217,426],{"class":190},[184,1219,1032],{"class":223},[184,1221,227],{"class":190},[184,1223,1224],{"class":348}," 42",[184,1226,420],{"class":223},[184,1228,1229,1232,1235,1237,1240],{"class":186,"line":378},[184,1230,1231],{"class":190},"    int*",[184,1233,1234],{"class":223}," p ",[184,1236,227],{"class":190},[184,1238,1239],{"class":190}," &",[184,1241,1242],{"class":223},"value;\n",[184,1244,1245],{"class":186,"line":383},[184,1246,325],{"emptyLinePlaceholder":324},[184,1248,1249,1251,1254,1257,1260,1262,1264,1267,1269,1272],{"class":186,"line":394},[184,1250,482],{"class":336},[184,1252,1253],{"class":223},"::",[184,1255,1256],{"class":190},"uintptr_t",[184,1258,1259],{"class":223}," raw ",[184,1261,227],{"class":190},[184,1263,280],{"class":190},[184,1265,1266],{"class":336},"std",[184,1268,1253],{"class":223},[184,1270,1271],{"class":190},"uintptr_t>",[184,1273,1274],{"class":223},"(p);\n",[184,1276,1277,1279,1282,1284,1287],{"class":186,"line":399},[184,1278,1231],{"class":190},[184,1280,1281],{"class":223}," again ",[184,1283,227],{"class":190},[184,1285,1286],{"class":190}," reinterpret_cast\u003Cint*>",[184,1288,1289],{"class":223},"(raw);\n",[184,1291,1292],{"class":186,"line":406},[184,1293,325],{"emptyLinePlaceholder":324},[184,1295,1296,1298,1300,1302,1305,1307,1310,1313,1315,1317,1319,1321],{"class":186,"line":423},[184,1297,482],{"class":336},[184,1299,485],{"class":223},[184,1301,488],{"class":190},[184,1303,1304],{"class":194}," \"*again = \"",[184,1306,494],{"class":190},[184,1308,1309],{"class":190}," *",[184,1311,1312],{"class":223},"again ",[184,1314,488],{"class":190},[184,1316,501],{"class":194},[184,1318,504],{"class":348},[184,1320,507],{"class":194},[184,1322,420],{"class":223},[184,1324,1325,1327,1329,1331,1334],{"class":186,"line":440},[184,1326,482],{"class":336},[184,1328,485],{"class":223},[184,1330,488],{"class":190},[184,1332,1333],{"class":336}," std",[184,1335,1336],{"class":223},"::boolalpha;\n",[184,1338,1339,1341,1343,1345,1348,1350,1353,1356,1359,1361,1363,1365,1367],{"class":186,"line":445},[184,1340,482],{"class":336},[184,1342,485],{"class":223},[184,1344,488],{"class":190},[184,1346,1347],{"class":194}," \"same pointer = \"",[184,1349,494],{"class":190},[184,1351,1352],{"class":223}," (p ",[184,1354,1355],{"class":190},"==",[184,1357,1358],{"class":223}," again) ",[184,1360,488],{"class":190},[184,1362,501],{"class":194},[184,1364,504],{"class":348},[184,1366,507],{"class":194},[184,1368,420],{"class":223},[184,1370,1371],{"class":186,"line":459},[184,1372,325],{"emptyLinePlaceholder":324},[184,1374,1375],{"class":186,"line":474},[184,1376,546],{"class":402},[184,1378,1379,1381,1383],{"class":186,"line":479},[184,1380,552],{"class":190},[184,1382,555],{"class":348},[184,1384,420],{"class":223},[184,1386,1387],{"class":186,"line":512},[184,1388,563],{"class":223},[14,1390,1391,569],{},[207,1392,568],{},[175,1394,1397],{"className":1395,"code":1396,"language":575,"meta":180},[573],"*again = 42\nsame pointer = true\n",[25,1398,1396],{"__ignoreMap":180},[14,1400,1401],{},"这个例子只用于说明“指针可以转成能容纳指针的整数，再转回来”。不要随便拿转换后的整数做地址计算，也不要把不相关对象强行解释成另一个对象类型。",[10,1403,1404],{"id":1404},"四种转换怎么选",[72,1406,1407,1420],{},[75,1408,1409],{},[78,1410,1411,1414,1417],{},[81,1412,1413],{"align":83},"需求",[81,1415,1416],{"align":83},"推荐写法",[81,1418,1419],{"align":83},"说明",[92,1421,1422,1439,1454,1469,1485],{},[78,1423,1424,1431,1436],{},[97,1425,1426,1428,1429],{"align":83},[25,1427,27],{}," 转 ",[25,1430,31],{},[97,1432,1433],{"align":83},[25,1434,1435],{},"static_cast\u003Cint>(x)",[97,1437,1438],{"align":83},"明确可能丢失小数",[78,1440,1441,1446,1451],{},[97,1442,1443,1445],{"align":83},[25,1444,37],{}," 转整数",[97,1447,1448],{"align":83},[25,1449,1450],{},"static_cast\u003Cint>(e)",[97,1452,1453],{"align":83},"枚举类不会隐式转整数",[78,1455,1456,1459,1464],{},[97,1457,1458],{"align":83},"基类指针转派生类指针，并且不确定真实类型",[97,1460,1461],{"align":83},[25,1462,1463],{},"dynamic_cast\u003CDerived*>(p)",[97,1465,1466,1467],{"align":83},"转换失败可判断 ",[25,1468,123],{},[78,1470,1471,1477,1482],{},[97,1472,1473,1474,1476],{"align":83},"去掉 ",[25,1475,47],{}," 适配旧接口",[97,1478,1479],{"align":83},[25,1480,1481],{},"const_cast\u003CT*>(p)",[97,1483,1484],{"align":83},"前提是旧接口不会修改真正的 const 对象",[78,1486,1487,1490,1495],{},[97,1488,1489],{"align":83},"指针和整数互转、底层字节解释",[97,1491,1492],{"align":83},[25,1493,1494],{},"reinterpret_cast\u003CT>(x)",[97,1496,1497],{"align":83},"非常底层，优先避免",[10,1499,1501],{"id":1500},"c风格强转为什么不推荐","C风格强转为什么不推荐",[14,1503,1504],{},"C 风格强转写起来短：",[175,1506,1508],{"className":177,"code":1507,"language":179,"meta":180,"style":180},"int n = (int)3.14;\n",[25,1509,1510],{"__ignoreMap":180},[184,1511,1512,1514,1517,1519,1522,1524,1527,1530],{"class":186,"line":187},[184,1513,31],{"class":190},[184,1515,1516],{"class":223}," n ",[184,1518,227],{"class":190},[184,1520,1521],{"class":223}," (",[184,1523,31],{"class":190},[184,1525,1526],{"class":223},")",[184,1528,1529],{"class":348},"3.14",[184,1531,420],{"class":223},[14,1533,1534,1536,1537,28,1539,1542],{},[207,1535,209],{}," 这段会把 ",[25,1538,1529],{},[25,1540,1541],{},"3","，但读代码时看不出它属于哪类转换。",[14,1544,1545],{},"更推荐写成：",[175,1547,1549],{"className":177,"code":1548,"language":179,"meta":180,"style":180},"int n = static_cast\u003Cint>(3.14);\n",[25,1550,1551],{"__ignoreMap":180},[184,1552,1553,1555,1557,1559,1561,1563,1565],{"class":186,"line":187},[184,1554,31],{"class":190},[184,1556,1516],{"class":223},[184,1558,227],{"class":190},[184,1560,434],{"class":190},[184,1562,735],{"class":223},[184,1564,1529],{"class":348},[184,1566,1567],{"class":223},");\n",[14,1569,1570,1572,1573,1575],{},[207,1571,209],{}," 这段同样会得到 ",[25,1574,1541],{},"，但转换意图更明确：这是常规数值转换。",[14,1577,1578,1579,1581,1582,1584,1585,1587],{},"C 风格强转可能在背后组合多种转换能力，既可能像 ",[25,1580,304],{},"，也可能像 ",[25,1583,983],{},"，甚至接近 ",[25,1586,1175],{},"。代码越底层、类型越复杂，这种“不说明白”的风险就越大。",[10,1589,1590],{"id":1590},"常见错误",[296,1592,1594],{"id":1593},"用-static_cast-做不安全向下转换","用 static_cast 做不安全向下转换",[175,1596,1598],{"className":177,"code":1597,"language":179,"meta":180,"style":180},"Animal* animal = new Dog;\nCat* cat = static_cast\u003CCat*>(animal);  \u002F\u002F 危险：编译可能通过，但真实对象不是 Cat\n",[25,1599,1600,1617],{"__ignoreMap":180},[184,1601,1602,1604,1606,1609,1611,1614],{"class":186,"line":187},[184,1603,738],{"class":223},[184,1605,741],{"class":190},[184,1607,1608],{"class":223}," animal ",[184,1610,227],{"class":190},[184,1612,1613],{"class":190}," new",[184,1615,1616],{"class":223}," Dog;\n",[184,1618,1619,1621,1623,1625,1627,1629,1631,1633,1636],{"class":186,"line":198},[184,1620,769],{"class":223},[184,1622,741],{"class":190},[184,1624,762],{"class":223},[184,1626,227],{"class":190},[184,1628,230],{"class":190},[184,1630,769],{"class":223},[184,1632,772],{"class":190},[184,1634,1635],{"class":223},"(animal);",[184,1637,1638],{"class":402},"  \u002F\u002F 危险：编译可能通过，但真实对象不是 Cat\n",[14,1640,1641,1643,1644,1647],{},[207,1642,209],{}," 这段是错误示例，真实对象类型不匹配时继续使用 ",[25,1645,1646],{},"cat"," 会产生未定义行为。",[14,1649,1650,1651,32],{},"如果不确定真实类型，应该使用 ",[25,1652,586],{},[296,1654,1656],{"id":1655},"修改真正的-const-对象","修改真正的 const 对象",[175,1658,1660],{"className":177,"code":1659,"language":179,"meta":180,"style":180},"const int value = 10;\nint& ref = const_cast\u003Cint&>(value);\nref = 20;  \u002F\u002F 未定义行为\n",[25,1661,1662,1677,1692],{"__ignoreMap":180},[184,1663,1664,1666,1669,1671,1673,1675],{"class":186,"line":187},[184,1665,47],{"class":190},[184,1667,1668],{"class":190}," int",[184,1670,1032],{"class":223},[184,1672,227],{"class":190},[184,1674,1037],{"class":348},[184,1676,420],{"class":223},[184,1678,1679,1682,1685,1687,1689],{"class":186,"line":198},[184,1680,1681],{"class":190},"int&",[184,1683,1684],{"class":223}," ref ",[184,1686,227],{"class":190},[184,1688,1072],{"class":190},[184,1690,1691],{"class":223},"(value);\n",[184,1693,1694,1697,1699,1701,1704],{"class":186,"line":257},[184,1695,1696],{"class":223},"ref ",[184,1698,227],{"class":190},[184,1700,1085],{"class":348},[184,1702,1703],{"class":223},";",[184,1705,1706],{"class":402},"  \u002F\u002F 未定义行为\n",[14,1708,1709,1711,1712,1714],{},[207,1710,209],{}," 这段是错误示例，",[25,1713,983],{}," 可以骗过编译器，但不能让真正的常量安全地变成可修改对象。",[296,1716,1718],{"id":1717},"滥用-reinterpret_cast","滥用 reinterpret_cast",[175,1720,1722],{"className":177,"code":1721,"language":179,"meta":180,"style":180},"double d = 3.14;\nint* p = reinterpret_cast\u003Cint*>(&d);  \u002F\u002F 危险：把 double 对象当 int 对象访问\n",[25,1723,1724,1738],{"__ignoreMap":180},[184,1725,1726,1728,1731,1733,1736],{"class":186,"line":187},[184,1727,27],{"class":190},[184,1729,1730],{"class":223}," d ",[184,1732,227],{"class":190},[184,1734,1735],{"class":348}," 3.14",[184,1737,420],{"class":223},[184,1739,1740,1743,1745,1747,1749,1751,1753,1756],{"class":186,"line":198},[184,1741,1742],{"class":190},"int*",[184,1744,1234],{"class":223},[184,1746,227],{"class":190},[184,1748,1286],{"class":190},[184,1750,735],{"class":223},[184,1752,909],{"class":190},[184,1754,1755],{"class":223},"d);",[184,1757,1758],{"class":402},"  \u002F\u002F 危险：把 double 对象当 int 对象访问\n",[14,1760,1761,1763],{},[207,1762,209],{}," 这段是错误示例，违反类型别名规则或对象表示假设时，行为不可预测。",[10,1765,1766],{"id":1766},"使用建议",[1768,1769,1770,1775,1781,1789,1794],"ol",{},[21,1771,1772,1773,32],{},"普通转换优先用 ",[25,1774,304],{},[21,1776,1777,1778,1780],{},"多态向下转换优先用 ",[25,1779,586],{},"，并检查失败情况。",[21,1782,1783,1785,1786,1788],{},[25,1784,983],{}," 只用于适配旧接口，不要用它修改真正的 ",[25,1787,47],{}," 对象。",[21,1790,1791,1793],{},[25,1792,1175],{}," 只放在非常底层、边界清晰的代码里，并集中封装。",[21,1795,1796],{},"不要为了少打几个字使用 C 风格强转。",[10,1798,1799],{"id":1799},"小结",[18,1801,1802,1807,1812,1822],{},[21,1803,1804,1806],{},[25,1805,304],{},"：常规转换，最常用。",[21,1808,1809,1811],{},[25,1810,586],{},"：多态类型安全向下转换。",[21,1813,1814,1816,1817,137,1819,1821],{},[25,1815,983],{},"：只改变 ",[25,1818,47],{},[25,1820,140],{}," 限定。",[21,1823,1824,1826],{},[25,1825,1175],{},"：底层重解释，风险最高。",[14,1828,1829],{},"一句话记忆：能不用就不用；必须用时，把转换意图写清楚。",[1831,1832,1833],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}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 pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":180,"searchDepth":198,"depth":198,"links":1835},[1836,1837,1838,1839,1840,1841,1847,1848,1849,1854,1855],{"id":12,"depth":198,"text":12},{"id":67,"depth":198,"text":67},{"id":163,"depth":198,"text":164},{"id":170,"depth":198,"text":170},{"id":213,"depth":198,"text":213},{"id":294,"depth":198,"text":294,"children":1842},[1843,1844,1845,1846],{"id":298,"depth":257,"text":299},{"id":580,"depth":257,"text":581},{"id":977,"depth":257,"text":978},{"id":1169,"depth":257,"text":1170},{"id":1404,"depth":198,"text":1404},{"id":1500,"depth":198,"text":1501},{"id":1590,"depth":198,"text":1590,"children":1850},[1851,1852,1853],{"id":1593,"depth":257,"text":1594},{"id":1655,"depth":257,"text":1656},{"id":1717,"depth":257,"text":1718},{"id":1766,"depth":198,"text":1766},{"id":1799,"depth":198,"text":1799},0,"1900","2023-10-05","2023-10-05-cplusplus-jiao-xue","\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md",false,{},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan",{"title":5,"description":180},"wiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","lw_uZk_Wf5tfWVE2WJSHiypdN7P6exgbFjCuXhD5O08",[1870,1875,1880,1885,1890,1895,1900,1905,1910,1915,1920,1925,1930,1935,1940,1945,1950,1955,1960,1965,1970,1975,1980,1985,1990,1995,2000,2005,2010,2015,2020,2025,2030,2031,2036,2040,2045,2049,2054,2059,2064,2069,2074,2079,2084,2089,2094,2099,2104,2109,2114,2119,2124,2129,2134,2139,2144,2149,2154,2159,2164,2169,2174,2179,2184,2189,2194,2199,2204,2209,2214,2219,2224,2229,2234,2239,2244,2249],{"path":1871,"stem":1872,"title":1873,"date":1858,"chapterOrder":1874,"chapterDepth":1856,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F0100-C++开发环境搭建与测试","C++开发环境搭建与测试","0100",{"path":1876,"stem":1877,"title":1878,"date":1858,"chapterOrder":1879,"chapterDepth":1856,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++基础初识","0200",{"path":1881,"stem":1882,"title":1883,"date":1858,"chapterOrder":1884,"chapterDepth":1856,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0300-shu-ju-lei-xing-yu-shu-ju-cun-fang","wiki\u002F2023-10-05-Cplusplus教学\u002F0300-数据类型与数据存放","数据类型与数据存放","0300",{"path":1886,"stem":1887,"title":1888,"date":1858,"chapterOrder":1889,"chapterDepth":1856,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","wiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","输入输出","0400",{"path":1891,"stem":1892,"title":1893,"date":1858,"chapterOrder":1894,"chapterDepth":1856,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","wiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","运算符","0500",{"path":1896,"stem":1897,"title":1898,"date":1858,"chapterOrder":1899,"chapterDepth":1856,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","wiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","程序流程结构","0600",{"path":1901,"stem":1902,"title":1903,"date":1858,"chapterOrder":1904,"chapterDepth":1856,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","wiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","数组","0700",{"path":1906,"stem":1907,"title":1908,"date":1858,"chapterOrder":1909,"chapterDepth":1856,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","函数与头文件","0800",{"path":1911,"stem":1912,"title":1913,"date":1858,"chapterOrder":1914,"chapterDepth":1856,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","指针","0900",{"path":1916,"stem":1917,"title":1918,"date":1858,"chapterOrder":1919,"chapterDepth":1856,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","wiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","结构体与共用体","1000",{"path":1921,"stem":1922,"title":1923,"date":1858,"chapterOrder":1924,"chapterDepth":1856,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1100-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1100-内存分区与生命周期","内存分区与生命周期","1100",{"path":1926,"stem":1927,"title":1928,"date":1858,"chapterOrder":1929,"chapterDepth":1856,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","wiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","引用","1200",{"path":1931,"stem":1932,"title":1933,"date":1858,"chapterOrder":1934,"chapterDepth":1856,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao-yu-ming-ming-kong-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高与命名空间","函数提高与命名空间","1300",{"path":1936,"stem":1937,"title":1938,"date":1858,"chapterOrder":1939,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","封装","1400-0100",{"path":1941,"stem":1942,"title":1943,"date":1858,"chapterOrder":1944,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0200-dui-xiang-chu-shi-hua-he-qing-li","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0200-对象初始化和清理","对象初始化和清理","1400-0200",{"path":1946,"stem":1947,"title":1948,"date":1858,"chapterOrder":1949,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0300-dui-xiang-mo-xing-yu-this-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0300-对象模型与this指针","对象模型与this指针","1400-0300",{"path":1951,"stem":1952,"title":1953,"date":1858,"chapterOrder":1954,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0400-you-yuan-yu-yun-suan-fu-zhong-zai","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0400-友元与运算符重载","友元与运算符重载","1400-0400",{"path":1956,"stem":1957,"title":1958,"date":1858,"chapterOrder":1959,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","继承","1400-0500",{"path":1961,"stem":1962,"title":1963,"date":1858,"chapterOrder":1964,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","多态","1400-0600",{"path":1966,"stem":1967,"title":1968,"date":1858,"chapterOrder":1969,"chapterDepth":1856,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","类和对象","1400",{"path":1971,"stem":1972,"title":1973,"date":1858,"chapterOrder":1974,"chapterDepth":1856,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","wiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","文件操作","1500",{"path":1976,"stem":1977,"title":1978,"date":1858,"chapterOrder":1979,"chapterDepth":1856,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","wiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","异常处理","1600",{"path":1981,"stem":1982,"title":1983,"date":1858,"chapterOrder":1984,"chapterDepth":1856,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","模板","1700",{"path":1986,"stem":1987,"title":1988,"date":1858,"chapterOrder":1989,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","STL初识","1800-0100",{"path":1991,"stem":1992,"title":1993,"date":1858,"chapterOrder":1994,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0200-std-array","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0200-std-array","std::array","1800-0200",{"path":1996,"stem":1997,"title":1998,"date":1858,"chapterOrder":1999,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string容器","1800-0300",{"path":2001,"stem":2002,"title":2003,"date":1858,"chapterOrder":2004,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-yu-deque-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector与deque容器","vector与deque容器","1800-0400",{"path":2006,"stem":2007,"title":2008,"date":1858,"chapterOrder":2009,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-stack-queue-list-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-stack-queue-list容器","stack \u002F queue \u002F list 容器","1800-0500",{"path":2011,"stem":2012,"title":2013,"date":1858,"chapterOrder":2014,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-set-map-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-set-map容器","set \u002F map 容器","1800-0600",{"path":2016,"stem":2017,"title":2018,"date":1858,"chapterOrder":2019,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-han-shu-dui-xiang-yu-wei-ci","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-函数对象与谓词","函数对象与谓词","1800-0700",{"path":2021,"stem":2022,"title":2023,"date":1858,"chapterOrder":2024,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-chang-yong-suan-fa","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-常用算法","常用算法","1800-0800",{"path":2026,"stem":2027,"title":2028,"date":1858,"chapterOrder":2029,"chapterDepth":1856,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","STL提高编程","1800",{"path":1865,"stem":1867,"title":5,"date":1858,"chapterOrder":1857,"chapterDepth":1856,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},{"path":2032,"stem":2033,"title":2034,"date":1858,"chapterOrder":2035,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","auto","2000-0100",{"path":2037,"stem":2038,"title":123,"date":1858,"chapterOrder":2039,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","2000-0200",{"path":2041,"stem":2042,"title":2043,"date":1858,"chapterOrder":2044,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","using","2000-0300",{"path":2046,"stem":2047,"title":37,"date":1858,"chapterOrder":2048,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0400-enum-class","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0400-enum-class","2000-0400",{"path":2050,"stem":2051,"title":2052,"date":1858,"chapterOrder":2053,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0500-fan-wei-for-xun-huan","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0500-范围for循环","范围 for 循环","2000-0500",{"path":2055,"stem":2056,"title":2057,"date":1858,"chapterOrder":2058,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","结构化绑定","2000-0600",{"path":2060,"stem":2061,"title":2062,"date":1858,"chapterOrder":2063,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","constexpr","2000-0700",{"path":2065,"stem":2066,"title":2067,"date":1858,"chapterOrder":2068,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII","2000-0800",{"path":2070,"stem":2071,"title":2072,"date":1858,"chapterOrder":2073,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","智能指针","2000-0900",{"path":2075,"stem":2076,"title":2077,"date":1858,"chapterOrder":2078,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义","右值引用和移动语义","2000-1000",{"path":2080,"stem":2081,"title":2082,"date":1858,"chapterOrder":2083,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","Lambda 表达式","2000-1100",{"path":2085,"stem":2086,"title":2087,"date":1858,"chapterOrder":2088,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","std::function","2000-1200",{"path":2090,"stem":2091,"title":2092,"date":1858,"chapterOrder":2093,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","std::bind","2000-1300",{"path":2095,"stem":2096,"title":2097,"date":1858,"chapterOrder":2098,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional","std::optional","2000-1400",{"path":2100,"stem":2101,"title":2102,"date":1858,"chapterOrder":2103,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1500-std-variant","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1500-std-variant","std::variant","2000-1500",{"path":2105,"stem":2106,"title":2107,"date":1858,"chapterOrder":2108,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1600-std-span","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1600-std-span","std::span","2000-1600",{"path":2110,"stem":2111,"title":2112,"date":1858,"chapterOrder":2113,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1700-std-format-print","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1700-std-format-print","std::format \u002F std::print","2000-1700",{"path":2115,"stem":2116,"title":2117,"date":1858,"chapterOrder":2118,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1800-std-chrono","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1800-std-chrono","std::chrono","2000-1800",{"path":2120,"stem":2121,"title":2122,"date":1858,"chapterOrder":2123,"chapterDepth":198,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0100-std-thread","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0100-std-thread","std::thread 与 join","2000-1900-0100",{"path":2125,"stem":2126,"title":2127,"date":1858,"chapterOrder":2128,"chapterDepth":198,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-mutex-lock-guard","mutex 与 lock_guard","2000-1900-0200",{"path":2130,"stem":2131,"title":2132,"date":1858,"chapterOrder":2133,"chapterDepth":198,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0300-std-atomic","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0300-std-atomic","std::atomic","2000-1900-0300",{"path":2135,"stem":2136,"title":2137,"date":1858,"chapterOrder":2138,"chapterDepth":198,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0400-condition-variable","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0400-condition-variable","condition_variable","2000-1900-0400",{"path":2140,"stem":2141,"title":2142,"date":1858,"chapterOrder":2143,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发编程","并发编程","2000-1900",{"path":2145,"stem":2146,"title":2147,"date":1858,"chapterOrder":2148,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2000-std-filesystem","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-2000-std-filesystem","std::filesystem","2000-2000",{"path":2150,"stem":2151,"title":2152,"date":1858,"chapterOrder":2153,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","modules 简介","2000-2100",{"path":2155,"stem":2156,"title":2157,"date":1858,"chapterOrder":2158,"chapterDepth":1856,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","现代C++","2000",{"path":2160,"stem":2161,"title":2162,"date":1858,"chapterOrder":2163,"chapterDepth":198,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0100-ding-shi-qi-yu-yi-bu-io","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0100-定时器与异步IO","定时器与异步 IO","2100-0100-0100",{"path":2165,"stem":2166,"title":2167,"date":1858,"chapterOrder":2168,"chapterDepth":198,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0200-boost-asio-ji-chu","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0200-Boost.Asio基础","Boost.Asio 基础","2100-0100-0200",{"path":2170,"stem":2171,"title":2172,"date":1858,"chapterOrder":2173,"chapterDepth":198,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0300-chuan-kou-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0300-串口通信","串口通信","2100-0100-0300",{"path":2175,"stem":2176,"title":2177,"date":1858,"chapterOrder":2178,"chapterDepth":198,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0400-tcp-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0400-TCP通信","TCP 通信","2100-0100-0400",{"path":2180,"stem":2181,"title":2182,"date":1858,"chapterOrder":2183,"chapterDepth":198,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0500-udp-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0500-UDP通信","UDP 通信","2100-0100-0500",{"path":2185,"stem":2186,"title":2187,"date":1858,"chapterOrder":2188,"chapterDepth":198,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0600-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0600-机器人工程写法与ROS2集成","机器人工程写法与 ROS2 集成","2100-0100-0600",{"path":2190,"stem":2191,"title":2192,"date":1858,"chapterOrder":2193,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","Boost.Asio异步IO库","2100-0100",{"path":2195,"stem":2196,"title":2197,"date":1858,"chapterOrder":2198,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0200-eigen-xian-xing-dai-shu-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0200-Eigen线性代数库","Eigen线性代数库","2100-0200",{"path":2200,"stem":2201,"title":2202,"date":1858,"chapterOrder":2203,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0300-opencv-ji-suan-ji-shi-jue-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0300-OpenCV计算机视觉库","OpenCV计算机视觉库","2100-0300",{"path":2205,"stem":2206,"title":2207,"date":1858,"chapterOrder":2208,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0400-pcl-dian-yun-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0400-PCL点云库","PCL点云库","2100-0400",{"path":2210,"stem":2211,"title":2212,"date":1858,"chapterOrder":2213,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0500-sophus-li-qun-li-dai-shu-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0500-Sophus李群李代数库","Sophus 李群李代数库","2100-0500",{"path":2215,"stem":2216,"title":2217,"date":1858,"chapterOrder":2218,"chapterDepth":1856,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","常用库学习","2100",{"path":2220,"stem":2221,"title":2222,"date":1858,"chapterOrder":2223,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0100-cmakepresets-yu-gou-jian-an-zhuang","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0100-CMakePresets与构建安装","CMakePresets与构建安装","2200-0100",{"path":2225,"stem":2226,"title":2227,"date":1858,"chapterOrder":2228,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项","顶层CMake与公共编译选项","2200-0200",{"path":2230,"stem":2231,"title":2232,"date":1858,"chapterOrder":2233,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0300-src-yu-lib-mo-kuai-cmake-xiang-jie","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0300-src与lib模块CMake详解","src与lib模块CMake详解","2200-0300",{"path":2235,"stem":2236,"title":2237,"date":1858,"chapterOrder":2238,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法","第三方库依赖写法","2200-0400",{"path":2240,"stem":2241,"title":2242,"date":1858,"chapterOrder":2243,"chapterDepth":187,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0500-mu-ban-kuo-zhan-yu-chang-jian-wen-ti","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0500-模板扩展与常见问题","模板扩展与常见问题","2200-0500",{"path":2245,"stem":2246,"title":2247,"date":1858,"chapterOrder":2248,"chapterDepth":1856,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":1863},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake工程模板","2200",{"path":1860,"stem":2250,"title":2251,"date":1858,"chapterOrder":2252,"chapterDepth":1856,"docKey":1859,"docRoot":1860,"docTitle":1861,"isWikiDoc":324,"isWikiIndex":324},"wiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++教程",null,1784505233779]