[{"data":1,"prerenderedAt":6542},["ShallowReactive",2],{"wiki-page-\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1450-han-shu-zhi-zhen":3,"wiki-doc-items-\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1450-han-shu-zhi-zhen":6115,"language-switcher-data-\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1450-han-shu-zhi-zhen":6526,"wiki-i18n-paths-\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1450-han-shu-zhi-zhen":6541},{"id":4,"title":5,"body":6,"canonicalPath":6096,"chapterDepth":6097,"chapterOrder":6098,"date":6099,"description":78,"docI18nKey":6100,"docKey":6101,"docRoot":6102,"docTitle":6103,"extension":6104,"i18nKey":6105,"isBlogPost":6106,"isWikiDoc":322,"isWikiIndex":6106,"layout":6107,"legacyPath":6107,"locale":6108,"localeSlug":6109,"meta":6110,"navigation":322,"path":6096,"seo":6111,"sourcePath":6112,"sourceStem":6105,"stem":6113,"wikiDepth":85,"__hash__":6114},"content\u002F_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1450-函数指针.md","函數指針",{"type":7,"value":8,"toc":6053},"minimark",[9,12,36,40,43,50,53,69,72,115,118,138,141,174,177,193,196,245,250,254,269,272,299,304,573,578,586,595,599,602,606,866,870,876,881,885,888,892,1125,1129,1135,1139,1145,1148,1160,1164,1415,1419,1425,1433,1437,1440,1443,1514,1517,1521,1677,1681,1687,1691,1694,1697,1711,1724,1728,2026,2030,2036,2051,2055,2058,2061,2065,2272,2276,2282,2285,2288,2291,2300,2303,2318,2325,2350,2354,2360,2364,2533,2537,2543,2547,2561,2574,2578,2847,2851,2857,2860,2864,2870,2883,2887,3173,3177,3183,3193,3201,3210,3220,3224,3434,3438,3444,3447,3493,3497,3502,3509,3515,3527,3545,3549,3749,3753,3759,3773,3780,3784,3790,3807,3818,3848,3853,3857,4141,4145,4151,4158,4205,4213,4217,4226,4230,4585,4589,4595,4603,4607,4611,4614,4640,4647,4654,4658,4928,4932,4938,4941,4982,4985,4993,4999,5012,5016,5226,5230,5235,5243,5250,5254,5263,5284,5296,5300,5546,5550,5556,5565,5570,5577,5657,5660,5663,5667,5710,5714,5746,5750,5808,5812,5885,5889,5941,5945,6003,6006,6049],[10,11,5],"h2",{"id":5},[13,14,15],"blockquote",{},[16,17,18,22,23,27,28,31,32,35],"p",{},[19,20,21],"strong",{},"閲讀提示："," 本章前半部分只使用已經學過的函數、指針和類，需要按順序掌握。後半部分會擴展到 ",[24,25,26],"code",{},"nullptr","、",[24,29,30],{},"using","、Lambda 和 ",[24,33,34],{},"std::function"," 等現代 C++ 特性。擴展部分會提前解釋新語法和 API 的基本用法，但需要學完後面的“現代 C++”章節才能完全看懂。初次學習時可以先了解結論，暫時跳過擴展部分。",[37,38,39],"h3",{"id":39},"函數指針的基本概念",[16,41,42],{},"前面已經學習過：普通指針可以保存變量的地址，通過指針能夠間接訪問變量。",[16,44,45,46,49],{},"函數編譯後也存放在內存中，因此函數同樣有地址。",[19,47,48],{},"函數指針就是保存函數地址的指針變量","。通過函數指針，可以間接調用它所指向的函數。",[16,51,52],{},"函數指針常用於：",[54,55,56,60,63,66],"ul",{},[57,58,59],"li",{},"把一個函數傳給另一個函數，也就是回調函數",[57,61,62],{},"在程序運行過程中選擇不同的處理函數",[57,64,65],{},"把多個形式相同的函數放進表中統一管理",[57,67,68],{},"保存並調用類的成員函數",[16,70,71],{},"假設有下面的函數：",[73,74,79],"pre",{"className":75,"code":76,"language":77,"meta":78,"style":78},"language-cpp shiki shiki-themes github-light github-dark","int add(int a, int b);\n","cpp","",[24,80,81],{"__ignoreMap":78},[82,83,86,90,94,98,100,104,107,109,112],"span",{"class":84,"line":85},"line",1,[82,87,89],{"class":88},"szBVR","int",[82,91,93],{"class":92},"sScJk"," add",[82,95,97],{"class":96},"sVt8B","(",[82,99,89],{"class":88},[82,101,103],{"class":102},"s4XuR"," a",[82,105,106],{"class":96},", ",[82,108,89],{"class":88},[82,110,111],{"class":102}," b",[82,113,114],{"class":96},");\n",[16,116,117],{},"指向它的函數指針可以聲明為：",[73,119,121],{"className":75,"code":120,"language":77,"meta":78,"style":78},"int (*function_pointer)(int, int);\n",[24,122,123],{"__ignoreMap":78},[82,124,125,127,130,132,134,136],{"class":84,"line":85},[82,126,89],{"class":88},[82,128,129],{"class":96}," (*function_pointer)(",[82,131,89],{"class":88},[82,133,106],{"class":96},[82,135,89],{"class":88},[82,137,114],{"class":96},[16,139,140],{},"這條聲明可以從變量名向外閲讀：",[142,143,144,150,156,165],"ol",{},[57,145,146,149],{},[24,147,148],{},"function_pointer"," 是變量名。",[57,151,152,155],{},[24,153,154],{},"*function_pointer"," 説明它是一個指針。",[57,157,158,161,162,164],{},[24,159,160],{},"(int, int)"," 説明它指向的函數接收兩個 ",[24,163,89],{}," 參數。",[57,166,167,168,170,171,173],{},"最前面的 ",[24,169,89],{}," 説明該函數返回一個 ",[24,172,89],{},"。",[16,175,176],{},"函數指針的基本語法為：",[73,178,180],{"className":75,"code":179,"language":77,"meta":78,"style":78},"返回值类型 (*函数指针变量名)(参数类型列表);\n",[24,181,182],{"__ignoreMap":78},[82,183,184,187,190],{"class":84,"line":85},[82,185,186],{"class":96},"返回值类型 (",[82,188,189],{"class":88},"*",[82,191,192],{"class":96},"函数指针变量名)(参数类型列表);\n",[16,194,195],{},"變量名兩側的括號不能省略：",[73,197,199],{"className":75,"code":198,"language":77,"meta":78,"style":78},"int (*operation)(int, int); \u002F\u002F operation 是函数指针\nint *operation(int, int);   \u002F\u002F operation 是函数，返回值是 int*\n",[24,200,201,221],{"__ignoreMap":78},[82,202,203,205,208,210,212,214,217],{"class":84,"line":85},[82,204,89],{"class":88},[82,206,207],{"class":96}," (*operation)(",[82,209,89],{"class":88},[82,211,106],{"class":96},[82,213,89],{"class":88},[82,215,216],{"class":96},");",[82,218,220],{"class":219},"sJ8bj"," \u002F\u002F operation 是函数指针\n",[82,222,224,226,229,232,234,236,238,240,242],{"class":84,"line":223},2,[82,225,89],{"class":88},[82,227,228],{"class":88}," *",[82,230,231],{"class":92},"operation",[82,233,97],{"class":96},[82,235,89],{"class":88},[82,237,106],{"class":96},[82,239,89],{"class":88},[82,241,216],{"class":96},[82,243,244],{"class":219},"   \u002F\u002F operation 是函数，返回值是 int*\n",[13,246,247],{},[16,248,249],{},"總結：函數指針類型不僅包含返回值類型，還包含完整的參數類型列表。",[37,251,253],{"id":252},"示例1保存函數地址並調用函數","示例1：保存函數地址並調用函數",[16,255,256,257,260,261,264,265,268],{},"函數名在大多數表達式中會自動轉換為函數地址，因此可以直接把 ",[24,258,259],{},"add"," 賦給函數指針。也可以寫成 ",[24,262,263],{},"&add","，其中 ",[24,266,267],{},"&"," 表示獲取函數地址，兩種寫法效果相同。",[16,270,271],{},"通過函數指針調用函數也有兩種寫法：",[73,273,275],{"className":75,"code":274,"language":77,"meta":78,"style":78},"function_pointer(参数);    \u002F\u002F 推荐写法\n(*function_pointer)(参数); \u002F\u002F 先解引用再调用\n",[24,276,277,287],{"__ignoreMap":78},[82,278,279,281,284],{"class":84,"line":85},[82,280,148],{"class":92},[82,282,283],{"class":96},"(参数);",[82,285,286],{"class":219},"    \u002F\u002F 推荐写法\n",[82,288,289,291,293,296],{"class":84,"line":223},[82,290,97],{"class":96},[82,292,189],{"class":88},[82,294,295],{"class":96},"function_pointer)(参数);",[82,297,298],{"class":219}," \u002F\u002F 先解引用再调用\n",[16,300,301],{},[19,302,303],{},"示例：",[73,305,307],{"className":75,"code":306,"language":77,"meta":78,"style":78},"#include \u003Ciostream>\n\nint add(int a, int b)\n{\n    return a + b;\n}\n\nint main()\n{\n    int (*function_pointer)(int, int) = add;\n\n    std::cout \u003C\u003C function_pointer(3, 5) \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C (*function_pointer)(10, 20) \u003C\u003C \"\\n\";\n\n    function_pointer = &add;\n    std::cout \u003C\u003C function_pointer(7, 8) \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[24,308,309,318,324,346,352,367,373,378,389,394,417,422,464,501,506,520,553,558,568],{"__ignoreMap":78},[82,310,311,314],{"class":84,"line":85},[82,312,313],{"class":88},"#include",[82,315,317],{"class":316},"sZZnC"," \u003Ciostream>\n",[82,319,320],{"class":84,"line":223},[82,321,323],{"emptyLinePlaceholder":322},true,"\n",[82,325,327,329,331,333,335,337,339,341,343],{"class":84,"line":326},3,[82,328,89],{"class":88},[82,330,93],{"class":92},[82,332,97],{"class":96},[82,334,89],{"class":88},[82,336,103],{"class":102},[82,338,106],{"class":96},[82,340,89],{"class":88},[82,342,111],{"class":102},[82,344,345],{"class":96},")\n",[82,347,349],{"class":84,"line":348},4,[82,350,351],{"class":96},"{\n",[82,353,355,358,361,364],{"class":84,"line":354},5,[82,356,357],{"class":88},"    return",[82,359,360],{"class":96}," a ",[82,362,363],{"class":88},"+",[82,365,366],{"class":96}," b;\n",[82,368,370],{"class":84,"line":369},6,[82,371,372],{"class":96},"}\n",[82,374,376],{"class":84,"line":375},7,[82,377,323],{"emptyLinePlaceholder":322},[82,379,381,383,386],{"class":84,"line":380},8,[82,382,89],{"class":88},[82,384,385],{"class":92}," main",[82,387,388],{"class":96},"()\n",[82,390,392],{"class":84,"line":391},9,[82,393,351],{"class":96},[82,395,397,400,402,404,406,408,411,414],{"class":84,"line":396},10,[82,398,399],{"class":88},"    int",[82,401,129],{"class":96},[82,403,89],{"class":88},[82,405,106],{"class":96},[82,407,89],{"class":88},[82,409,410],{"class":96},") ",[82,412,413],{"class":88},"=",[82,415,416],{"class":96}," add;\n",[82,418,420],{"class":84,"line":419},11,[82,421,323],{"emptyLinePlaceholder":322},[82,423,425,428,431,434,437,439,443,445,448,450,452,455,458,461],{"class":84,"line":424},12,[82,426,427],{"class":92},"    std",[82,429,430],{"class":96},"::cout ",[82,432,433],{"class":88},"\u003C\u003C",[82,435,436],{"class":92}," function_pointer",[82,438,97],{"class":96},[82,440,442],{"class":441},"sj4cs","3",[82,444,106],{"class":96},[82,446,447],{"class":441},"5",[82,449,410],{"class":96},[82,451,433],{"class":88},[82,453,454],{"class":316}," \"",[82,456,457],{"class":441},"\\n",[82,459,460],{"class":316},"\"",[82,462,463],{"class":96},";\n",[82,465,467,469,471,473,476,478,481,484,486,489,491,493,495,497,499],{"class":84,"line":466},13,[82,468,427],{"class":92},[82,470,430],{"class":96},[82,472,433],{"class":88},[82,474,475],{"class":96}," (",[82,477,189],{"class":88},[82,479,480],{"class":96},"function_pointer)(",[82,482,483],{"class":441},"10",[82,485,106],{"class":96},[82,487,488],{"class":441},"20",[82,490,410],{"class":96},[82,492,433],{"class":88},[82,494,454],{"class":316},[82,496,457],{"class":441},[82,498,460],{"class":316},[82,500,463],{"class":96},[82,502,504],{"class":84,"line":503},14,[82,505,323],{"emptyLinePlaceholder":322},[82,507,509,512,514,517],{"class":84,"line":508},15,[82,510,511],{"class":96},"    function_pointer ",[82,513,413],{"class":88},[82,515,516],{"class":88}," &",[82,518,519],{"class":96},"add;\n",[82,521,523,525,527,529,531,533,536,538,541,543,545,547,549,551],{"class":84,"line":522},16,[82,524,427],{"class":92},[82,526,430],{"class":96},[82,528,433],{"class":88},[82,530,436],{"class":92},[82,532,97],{"class":96},[82,534,535],{"class":441},"7",[82,537,106],{"class":96},[82,539,540],{"class":441},"8",[82,542,410],{"class":96},[82,544,433],{"class":88},[82,546,454],{"class":316},[82,548,457],{"class":441},[82,550,460],{"class":316},[82,552,463],{"class":96},[82,554,556],{"class":84,"line":555},17,[82,557,323],{"emptyLinePlaceholder":322},[82,559,561,563,566],{"class":84,"line":560},18,[82,562,357],{"class":88},[82,564,565],{"class":441}," 0",[82,567,463],{"class":96},[82,569,571],{"class":84,"line":570},19,[82,572,372],{"class":96},[16,574,575],{},[19,576,577],{},"運行結果：",[73,579,584],{"className":580,"code":582,"language":583,"meta":78},[581],"language-text","8\n30\n15\n","text",[24,585,582],{"__ignoreMap":78},[13,587,588],{},[16,589,590,591,594],{},"總結：通常直接用函數名賦值，並使用 ",[24,592,593],{},"function_pointer(...)"," 調用，代碼更簡潔。",[37,596,598],{"id":597},"示例2函數指針類型必須匹配","示例2：函數指針類型必須匹配",[16,600,601],{},"函數指針只能指向類型兼容的函數。返回值類型和每個參數的類型都要匹配。",[16,603,604],{},[19,605,303],{},[73,607,609],{"className":75,"code":608,"language":77,"meta":78,"style":78},"#include \u003Ciostream>\n\nint add(int a, int b)\n{\n    return a + b;\n}\n\ndouble divide(double a, double b)\n{\n    return a \u002F b;\n}\n\nint main()\n{\n    int (*integer_operation)(int, int) = add;\n    double (*decimal_operation)(double, double) = divide;\n\n    std::cout \u003C\u003C integer_operation(4, 6) \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C decimal_operation(7.0, 2.0) \u003C\u003C \"\\n\";\n\n    \u002F\u002F integer_operation = divide;\n    \u002F\u002F 错误：divide 的类型是 double(double, double)，类型不匹配\n\n    return 0;\n}\n",[24,610,611,617,621,641,645,655,659,663,685,689,700,704,708,716,720,739,760,764,797,830,835,841,847,852,861],{"__ignoreMap":78},[82,612,613,615],{"class":84,"line":85},[82,614,313],{"class":88},[82,616,317],{"class":316},[82,618,619],{"class":84,"line":223},[82,620,323],{"emptyLinePlaceholder":322},[82,622,623,625,627,629,631,633,635,637,639],{"class":84,"line":326},[82,624,89],{"class":88},[82,626,93],{"class":92},[82,628,97],{"class":96},[82,630,89],{"class":88},[82,632,103],{"class":102},[82,634,106],{"class":96},[82,636,89],{"class":88},[82,638,111],{"class":102},[82,640,345],{"class":96},[82,642,643],{"class":84,"line":348},[82,644,351],{"class":96},[82,646,647,649,651,653],{"class":84,"line":354},[82,648,357],{"class":88},[82,650,360],{"class":96},[82,652,363],{"class":88},[82,654,366],{"class":96},[82,656,657],{"class":84,"line":369},[82,658,372],{"class":96},[82,660,661],{"class":84,"line":375},[82,662,323],{"emptyLinePlaceholder":322},[82,664,665,668,671,673,675,677,679,681,683],{"class":84,"line":380},[82,666,667],{"class":88},"double",[82,669,670],{"class":92}," divide",[82,672,97],{"class":96},[82,674,667],{"class":88},[82,676,103],{"class":102},[82,678,106],{"class":96},[82,680,667],{"class":88},[82,682,111],{"class":102},[82,684,345],{"class":96},[82,686,687],{"class":84,"line":391},[82,688,351],{"class":96},[82,690,691,693,695,698],{"class":84,"line":396},[82,692,357],{"class":88},[82,694,360],{"class":96},[82,696,697],{"class":88},"\u002F",[82,699,366],{"class":96},[82,701,702],{"class":84,"line":419},[82,703,372],{"class":96},[82,705,706],{"class":84,"line":424},[82,707,323],{"emptyLinePlaceholder":322},[82,709,710,712,714],{"class":84,"line":466},[82,711,89],{"class":88},[82,713,385],{"class":92},[82,715,388],{"class":96},[82,717,718],{"class":84,"line":503},[82,719,351],{"class":96},[82,721,722,724,727,729,731,733,735,737],{"class":84,"line":508},[82,723,399],{"class":88},[82,725,726],{"class":96}," (*integer_operation)(",[82,728,89],{"class":88},[82,730,106],{"class":96},[82,732,89],{"class":88},[82,734,410],{"class":96},[82,736,413],{"class":88},[82,738,416],{"class":96},[82,740,741,744,747,749,751,753,755,757],{"class":84,"line":522},[82,742,743],{"class":88},"    double",[82,745,746],{"class":96}," (*decimal_operation)(",[82,748,667],{"class":88},[82,750,106],{"class":96},[82,752,667],{"class":88},[82,754,410],{"class":96},[82,756,413],{"class":88},[82,758,759],{"class":96}," divide;\n",[82,761,762],{"class":84,"line":555},[82,763,323],{"emptyLinePlaceholder":322},[82,765,766,768,770,772,775,777,780,782,785,787,789,791,793,795],{"class":84,"line":560},[82,767,427],{"class":92},[82,769,430],{"class":96},[82,771,433],{"class":88},[82,773,774],{"class":92}," integer_operation",[82,776,97],{"class":96},[82,778,779],{"class":441},"4",[82,781,106],{"class":96},[82,783,784],{"class":441},"6",[82,786,410],{"class":96},[82,788,433],{"class":88},[82,790,454],{"class":316},[82,792,457],{"class":441},[82,794,460],{"class":316},[82,796,463],{"class":96},[82,798,799,801,803,805,808,810,813,815,818,820,822,824,826,828],{"class":84,"line":570},[82,800,427],{"class":92},[82,802,430],{"class":96},[82,804,433],{"class":88},[82,806,807],{"class":92}," decimal_operation",[82,809,97],{"class":96},[82,811,812],{"class":441},"7.0",[82,814,106],{"class":96},[82,816,817],{"class":441},"2.0",[82,819,410],{"class":96},[82,821,433],{"class":88},[82,823,454],{"class":316},[82,825,457],{"class":441},[82,827,460],{"class":316},[82,829,463],{"class":96},[82,831,833],{"class":84,"line":832},20,[82,834,323],{"emptyLinePlaceholder":322},[82,836,838],{"class":84,"line":837},21,[82,839,840],{"class":219},"    \u002F\u002F integer_operation = divide;\n",[82,842,844],{"class":84,"line":843},22,[82,845,846],{"class":219},"    \u002F\u002F 错误：divide 的类型是 double(double, double)，类型不匹配\n",[82,848,850],{"class":84,"line":849},23,[82,851,323],{"emptyLinePlaceholder":322},[82,853,855,857,859],{"class":84,"line":854},24,[82,856,357],{"class":88},[82,858,565],{"class":441},[82,860,463],{"class":96},[82,862,864],{"class":84,"line":863},25,[82,865,372],{"class":96},[16,867,868],{},[19,869,577],{},[73,871,874],{"className":872,"code":873,"language":583,"meta":78},[581],"10\n3.5\n",[24,875,873],{"__ignoreMap":78},[13,877,878],{},[16,879,880],{},"注意：不要依賴參數調用時可能發生的隱式類型轉換。函數本身的類型必須與函數指針類型兼容。",[37,882,884],{"id":883},"示例3運行時切換不同的函數","示例3：運行時切換不同的函數",[16,886,887],{},"只要函數類型相同，一個函數指針就可以在不同時間指向不同函數。這可以把“選擇執行哪個操作”和“執行操作”分開。",[16,889,890],{},[19,891,303],{},[73,893,895],{"className":75,"code":894,"language":77,"meta":78,"style":78},"#include \u003Ciostream>\n\nint add(int a, int b)\n{\n    return a + b;\n}\n\nint subtract(int a, int b)\n{\n    return a - b;\n}\n\nint main()\n{\n    int (*operation)(int, int) = add;\n    std::cout \u003C\u003C \"add: \" \u003C\u003C operation(10, 4) \u003C\u003C \"\\n\";\n\n    operation = subtract;\n    std::cout \u003C\u003C \"subtract: \" \u003C\u003C operation(10, 4) \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[24,896,897,903,907,927,931,941,945,949,970,974,985,989,993,1001,1005,1023,1060,1064,1074,1109,1113,1121],{"__ignoreMap":78},[82,898,899,901],{"class":84,"line":85},[82,900,313],{"class":88},[82,902,317],{"class":316},[82,904,905],{"class":84,"line":223},[82,906,323],{"emptyLinePlaceholder":322},[82,908,909,911,913,915,917,919,921,923,925],{"class":84,"line":326},[82,910,89],{"class":88},[82,912,93],{"class":92},[82,914,97],{"class":96},[82,916,89],{"class":88},[82,918,103],{"class":102},[82,920,106],{"class":96},[82,922,89],{"class":88},[82,924,111],{"class":102},[82,926,345],{"class":96},[82,928,929],{"class":84,"line":348},[82,930,351],{"class":96},[82,932,933,935,937,939],{"class":84,"line":354},[82,934,357],{"class":88},[82,936,360],{"class":96},[82,938,363],{"class":88},[82,940,366],{"class":96},[82,942,943],{"class":84,"line":369},[82,944,372],{"class":96},[82,946,947],{"class":84,"line":375},[82,948,323],{"emptyLinePlaceholder":322},[82,950,951,953,956,958,960,962,964,966,968],{"class":84,"line":380},[82,952,89],{"class":88},[82,954,955],{"class":92}," subtract",[82,957,97],{"class":96},[82,959,89],{"class":88},[82,961,103],{"class":102},[82,963,106],{"class":96},[82,965,89],{"class":88},[82,967,111],{"class":102},[82,969,345],{"class":96},[82,971,972],{"class":84,"line":391},[82,973,351],{"class":96},[82,975,976,978,980,983],{"class":84,"line":396},[82,977,357],{"class":88},[82,979,360],{"class":96},[82,981,982],{"class":88},"-",[82,984,366],{"class":96},[82,986,987],{"class":84,"line":419},[82,988,372],{"class":96},[82,990,991],{"class":84,"line":424},[82,992,323],{"emptyLinePlaceholder":322},[82,994,995,997,999],{"class":84,"line":466},[82,996,89],{"class":88},[82,998,385],{"class":92},[82,1000,388],{"class":96},[82,1002,1003],{"class":84,"line":503},[82,1004,351],{"class":96},[82,1006,1007,1009,1011,1013,1015,1017,1019,1021],{"class":84,"line":508},[82,1008,399],{"class":88},[82,1010,207],{"class":96},[82,1012,89],{"class":88},[82,1014,106],{"class":96},[82,1016,89],{"class":88},[82,1018,410],{"class":96},[82,1020,413],{"class":88},[82,1022,416],{"class":96},[82,1024,1025,1027,1029,1031,1034,1037,1040,1042,1044,1046,1048,1050,1052,1054,1056,1058],{"class":84,"line":522},[82,1026,427],{"class":92},[82,1028,430],{"class":96},[82,1030,433],{"class":88},[82,1032,1033],{"class":316}," \"add: \"",[82,1035,1036],{"class":88}," \u003C\u003C",[82,1038,1039],{"class":92}," operation",[82,1041,97],{"class":96},[82,1043,483],{"class":441},[82,1045,106],{"class":96},[82,1047,779],{"class":441},[82,1049,410],{"class":96},[82,1051,433],{"class":88},[82,1053,454],{"class":316},[82,1055,457],{"class":441},[82,1057,460],{"class":316},[82,1059,463],{"class":96},[82,1061,1062],{"class":84,"line":555},[82,1063,323],{"emptyLinePlaceholder":322},[82,1065,1066,1069,1071],{"class":84,"line":560},[82,1067,1068],{"class":96},"    operation ",[82,1070,413],{"class":88},[82,1072,1073],{"class":96}," subtract;\n",[82,1075,1076,1078,1080,1082,1085,1087,1089,1091,1093,1095,1097,1099,1101,1103,1105,1107],{"class":84,"line":570},[82,1077,427],{"class":92},[82,1079,430],{"class":96},[82,1081,433],{"class":88},[82,1083,1084],{"class":316}," \"subtract: \"",[82,1086,1036],{"class":88},[82,1088,1039],{"class":92},[82,1090,97],{"class":96},[82,1092,483],{"class":441},[82,1094,106],{"class":96},[82,1096,779],{"class":441},[82,1098,410],{"class":96},[82,1100,433],{"class":88},[82,1102,454],{"class":316},[82,1104,457],{"class":441},[82,1106,460],{"class":316},[82,1108,463],{"class":96},[82,1110,1111],{"class":84,"line":832},[82,1112,323],{"emptyLinePlaceholder":322},[82,1114,1115,1117,1119],{"class":84,"line":837},[82,1116,357],{"class":88},[82,1118,565],{"class":441},[82,1120,463],{"class":96},[82,1122,1123],{"class":84,"line":843},[82,1124,372],{"class":96},[16,1126,1127],{},[19,1128,577],{},[73,1130,1133],{"className":1131,"code":1132,"language":583,"meta":78},[581],"add: 14\nsubtract: 6\n",[24,1134,1132],{"__ignoreMap":78},[37,1136,1138],{"id":1137},"示例4把函數指針作為參數回調函數","示例4：把函數指針作為參數——回調函數",[16,1140,1141,1142,173],{},"函數指針也可以作為另一個函數的參數。被傳入並由其他代碼調用的函數通常稱為",[19,1143,1144],{},"回調函數",[16,1146,1147],{},"回調函數不是一種新的函數類型。“回調”描述的是函數的使用方式：調用者把函數地址交給另一段代碼，另一段代碼在需要時調用這個函數。",[16,1149,1150,1151,1154,1155,1157,1158,173],{},"下面的 ",[24,1152,1153],{},"calculate"," 不關心具體執行加法還是乘法，只要求傳入的函數能夠接收兩個 ",[24,1156,89],{}," 並返回 ",[24,1159,89],{},[16,1161,1162],{},[19,1163,303],{},[73,1165,1167],{"className":75,"code":1166,"language":77,"meta":78,"style":78},"#include \u003Ciostream>\n\nint add(int a, int b)\n{\n    return a + b;\n}\n\nint multiply(int a, int b)\n{\n    return a * b;\n}\n\nint calculate(int a, int b, int (*operation)(int, int))\n{\n    return operation(a, b);\n}\n\nint main()\n{\n    std::cout \u003C\u003C calculate(6, 4, add) \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C calculate(6, 4, multiply) \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[24,1168,1169,1175,1179,1199,1203,1213,1217,1221,1242,1246,1256,1260,1264,1304,1308,1317,1321,1325,1333,1337,1368,1399,1403,1411],{"__ignoreMap":78},[82,1170,1171,1173],{"class":84,"line":85},[82,1172,313],{"class":88},[82,1174,317],{"class":316},[82,1176,1177],{"class":84,"line":223},[82,1178,323],{"emptyLinePlaceholder":322},[82,1180,1181,1183,1185,1187,1189,1191,1193,1195,1197],{"class":84,"line":326},[82,1182,89],{"class":88},[82,1184,93],{"class":92},[82,1186,97],{"class":96},[82,1188,89],{"class":88},[82,1190,103],{"class":102},[82,1192,106],{"class":96},[82,1194,89],{"class":88},[82,1196,111],{"class":102},[82,1198,345],{"class":96},[82,1200,1201],{"class":84,"line":348},[82,1202,351],{"class":96},[82,1204,1205,1207,1209,1211],{"class":84,"line":354},[82,1206,357],{"class":88},[82,1208,360],{"class":96},[82,1210,363],{"class":88},[82,1212,366],{"class":96},[82,1214,1215],{"class":84,"line":369},[82,1216,372],{"class":96},[82,1218,1219],{"class":84,"line":375},[82,1220,323],{"emptyLinePlaceholder":322},[82,1222,1223,1225,1228,1230,1232,1234,1236,1238,1240],{"class":84,"line":380},[82,1224,89],{"class":88},[82,1226,1227],{"class":92}," multiply",[82,1229,97],{"class":96},[82,1231,89],{"class":88},[82,1233,103],{"class":102},[82,1235,106],{"class":96},[82,1237,89],{"class":88},[82,1239,111],{"class":102},[82,1241,345],{"class":96},[82,1243,1244],{"class":84,"line":391},[82,1245,351],{"class":96},[82,1247,1248,1250,1252,1254],{"class":84,"line":396},[82,1249,357],{"class":88},[82,1251,360],{"class":96},[82,1253,189],{"class":88},[82,1255,366],{"class":96},[82,1257,1258],{"class":84,"line":419},[82,1259,372],{"class":96},[82,1261,1262],{"class":84,"line":424},[82,1263,323],{"emptyLinePlaceholder":322},[82,1265,1266,1268,1271,1273,1275,1277,1279,1281,1283,1285,1287,1290,1292,1295,1297,1299,1301],{"class":84,"line":466},[82,1267,89],{"class":88},[82,1269,1270],{"class":92}," calculate",[82,1272,97],{"class":96},[82,1274,89],{"class":88},[82,1276,103],{"class":102},[82,1278,106],{"class":96},[82,1280,89],{"class":88},[82,1282,111],{"class":102},[82,1284,106],{"class":96},[82,1286,89],{"class":88},[82,1288,1289],{"class":96}," (*",[82,1291,231],{"class":102},[82,1293,1294],{"class":96},")(",[82,1296,89],{"class":88},[82,1298,106],{"class":96},[82,1300,89],{"class":88},[82,1302,1303],{"class":96},"))\n",[82,1305,1306],{"class":84,"line":503},[82,1307,351],{"class":96},[82,1309,1310,1312,1314],{"class":84,"line":508},[82,1311,357],{"class":88},[82,1313,1039],{"class":92},[82,1315,1316],{"class":96},"(a, b);\n",[82,1318,1319],{"class":84,"line":522},[82,1320,372],{"class":96},[82,1322,1323],{"class":84,"line":555},[82,1324,323],{"emptyLinePlaceholder":322},[82,1326,1327,1329,1331],{"class":84,"line":560},[82,1328,89],{"class":88},[82,1330,385],{"class":92},[82,1332,388],{"class":96},[82,1334,1335],{"class":84,"line":570},[82,1336,351],{"class":96},[82,1338,1339,1341,1343,1345,1347,1349,1351,1353,1355,1358,1360,1362,1364,1366],{"class":84,"line":832},[82,1340,427],{"class":92},[82,1342,430],{"class":96},[82,1344,433],{"class":88},[82,1346,1270],{"class":92},[82,1348,97],{"class":96},[82,1350,784],{"class":441},[82,1352,106],{"class":96},[82,1354,779],{"class":441},[82,1356,1357],{"class":96},", add) ",[82,1359,433],{"class":88},[82,1361,454],{"class":316},[82,1363,457],{"class":441},[82,1365,460],{"class":316},[82,1367,463],{"class":96},[82,1369,1370,1372,1374,1376,1378,1380,1382,1384,1386,1389,1391,1393,1395,1397],{"class":84,"line":837},[82,1371,427],{"class":92},[82,1373,430],{"class":96},[82,1375,433],{"class":88},[82,1377,1270],{"class":92},[82,1379,97],{"class":96},[82,1381,784],{"class":441},[82,1383,106],{"class":96},[82,1385,779],{"class":441},[82,1387,1388],{"class":96},", multiply) ",[82,1390,433],{"class":88},[82,1392,454],{"class":316},[82,1394,457],{"class":441},[82,1396,460],{"class":316},[82,1398,463],{"class":96},[82,1400,1401],{"class":84,"line":843},[82,1402,323],{"emptyLinePlaceholder":322},[82,1404,1405,1407,1409],{"class":84,"line":849},[82,1406,357],{"class":88},[82,1408,565],{"class":441},[82,1410,463],{"class":96},[82,1412,1413],{"class":84,"line":854},[82,1414,372],{"class":96},[16,1416,1417],{},[19,1418,577],{},[73,1420,1423],{"className":1421,"code":1422,"language":583,"meta":78},[581],"10\n24\n",[24,1424,1422],{"__ignoreMap":78},[13,1426,1427],{},[16,1428,1429,1430,1432],{},"總結：回調可以讓 ",[24,1431,1153],{}," 保持不變，只通過傳入不同函數來改變計算行為。",[37,1434,1436],{"id":1435},"示例5函數指針作為參數時也可以省略參數名","示例5：函數指針作為參數時也可以省略參數名",[16,1438,1439],{},"函數聲明只需要告訴編譯器參數類型，不一定要寫參數名。函數指針參數也遵守這個規則。",[16,1441,1442],{},"下面兩條函數聲明含義相同：",[73,1444,1446],{"className":75,"code":1445,"language":77,"meta":78,"style":78},"int calculate(int a, int b, int (*operation)(int, int));\nint calculate(int, int, int (*)(int, int));\n",[24,1447,1448,1485],{"__ignoreMap":78},[82,1449,1450,1452,1454,1456,1458,1460,1462,1464,1466,1468,1470,1472,1474,1476,1478,1480,1482],{"class":84,"line":85},[82,1451,89],{"class":88},[82,1453,1270],{"class":92},[82,1455,97],{"class":96},[82,1457,89],{"class":88},[82,1459,103],{"class":102},[82,1461,106],{"class":96},[82,1463,89],{"class":88},[82,1465,111],{"class":102},[82,1467,106],{"class":96},[82,1469,89],{"class":88},[82,1471,1289],{"class":96},[82,1473,231],{"class":102},[82,1475,1294],{"class":96},[82,1477,89],{"class":88},[82,1479,106],{"class":96},[82,1481,89],{"class":88},[82,1483,1484],{"class":96},"));\n",[82,1486,1487,1489,1491,1493,1495,1497,1499,1501,1503,1506,1508,1510,1512],{"class":84,"line":223},[82,1488,89],{"class":88},[82,1490,1270],{"class":92},[82,1492,97],{"class":96},[82,1494,89],{"class":88},[82,1496,106],{"class":96},[82,1498,89],{"class":88},[82,1500,106],{"class":96},[82,1502,89],{"class":88},[82,1504,1505],{"class":96}," (*)(",[82,1507,89],{"class":88},[82,1509,106],{"class":96},[82,1511,89],{"class":88},[82,1513,1484],{"class":96},[16,1515,1516],{},"第一種寫法更容易閲讀，通常建議在教程、頭文件和函數定義中保留有意義的參數名。",[16,1518,1519],{},[19,1520,303],{},[73,1522,1524],{"className":75,"code":1523,"language":77,"meta":78,"style":78},"#include \u003Ciostream>\n\nvoid print_number(int value)\n{\n    std::cout \u003C\u003C value \u003C\u003C \"\\n\";\n}\n\nvoid run_twice(int value, void (*callback)(int))\n{\n    callback(value);\n    callback(value);\n}\n\nint main()\n{\n    run_twice(42, print_number);\n    return 0;\n}\n",[24,1525,1526,1532,1536,1553,1557,1578,1582,1586,1614,1618,1626,1632,1636,1640,1648,1652,1665,1673],{"__ignoreMap":78},[82,1527,1528,1530],{"class":84,"line":85},[82,1529,313],{"class":88},[82,1531,317],{"class":316},[82,1533,1534],{"class":84,"line":223},[82,1535,323],{"emptyLinePlaceholder":322},[82,1537,1538,1541,1544,1546,1548,1551],{"class":84,"line":326},[82,1539,1540],{"class":88},"void",[82,1542,1543],{"class":92}," print_number",[82,1545,97],{"class":96},[82,1547,89],{"class":88},[82,1549,1550],{"class":102}," value",[82,1552,345],{"class":96},[82,1554,1555],{"class":84,"line":348},[82,1556,351],{"class":96},[82,1558,1559,1561,1563,1565,1568,1570,1572,1574,1576],{"class":84,"line":354},[82,1560,427],{"class":92},[82,1562,430],{"class":96},[82,1564,433],{"class":88},[82,1566,1567],{"class":96}," value ",[82,1569,433],{"class":88},[82,1571,454],{"class":316},[82,1573,457],{"class":441},[82,1575,460],{"class":316},[82,1577,463],{"class":96},[82,1579,1580],{"class":84,"line":369},[82,1581,372],{"class":96},[82,1583,1584],{"class":84,"line":375},[82,1585,323],{"emptyLinePlaceholder":322},[82,1587,1588,1590,1593,1595,1597,1599,1601,1603,1605,1608,1610,1612],{"class":84,"line":380},[82,1589,1540],{"class":88},[82,1591,1592],{"class":92}," run_twice",[82,1594,97],{"class":96},[82,1596,89],{"class":88},[82,1598,1550],{"class":102},[82,1600,106],{"class":96},[82,1602,1540],{"class":88},[82,1604,1289],{"class":96},[82,1606,1607],{"class":102},"callback",[82,1609,1294],{"class":96},[82,1611,89],{"class":88},[82,1613,1303],{"class":96},[82,1615,1616],{"class":84,"line":391},[82,1617,351],{"class":96},[82,1619,1620,1623],{"class":84,"line":396},[82,1621,1622],{"class":92},"    callback",[82,1624,1625],{"class":96},"(value);\n",[82,1627,1628,1630],{"class":84,"line":419},[82,1629,1622],{"class":92},[82,1631,1625],{"class":96},[82,1633,1634],{"class":84,"line":424},[82,1635,372],{"class":96},[82,1637,1638],{"class":84,"line":466},[82,1639,323],{"emptyLinePlaceholder":322},[82,1641,1642,1644,1646],{"class":84,"line":503},[82,1643,89],{"class":88},[82,1645,385],{"class":92},[82,1647,388],{"class":96},[82,1649,1650],{"class":84,"line":508},[82,1651,351],{"class":96},[82,1653,1654,1657,1659,1662],{"class":84,"line":522},[82,1655,1656],{"class":92},"    run_twice",[82,1658,97],{"class":96},[82,1660,1661],{"class":441},"42",[82,1663,1664],{"class":96},", print_number);\n",[82,1666,1667,1669,1671],{"class":84,"line":555},[82,1668,357],{"class":88},[82,1670,565],{"class":441},[82,1672,463],{"class":96},[82,1674,1675],{"class":84,"line":560},[82,1676,372],{"class":96},[16,1678,1679],{},[19,1680,577],{},[73,1682,1685],{"className":1683,"code":1684,"language":583,"meta":78},[581],"42\n42\n",[24,1686,1684],{"__ignoreMap":78},[37,1688,1690],{"id":1689},"示例6函數指針數組","示例6：函數指針數組",[16,1692,1693],{},"如果多個函數擁有相同類型，就可以把它們的地址保存在同一個數組中，再通過數組下標選擇函數。",[16,1695,1696],{},"函數指針數組的基本語法為：",[73,1698,1700],{"className":75,"code":1699,"language":77,"meta":78,"style":78},"返回值类型 (*数组名[元素个数])(参数类型列表);\n",[24,1701,1702],{"__ignoreMap":78},[82,1703,1704,1706,1708],{"class":84,"line":85},[82,1705,186],{"class":96},[82,1707,189],{"class":88},[82,1709,1710],{"class":96},"数组名[元素个数])(参数类型列表);\n",[16,1712,1713,1714,27,1717,1720,1721,173],{},"數組下標必須在有效範圍內。下面的數組有 3 個元素，因此有效下標是 ",[24,1715,1716],{},"0",[24,1718,1719],{},"1"," 和 ",[24,1722,1723],{},"2",[16,1725,1726],{},[19,1727,303],{},[73,1729,1731],{"className":75,"code":1730,"language":77,"meta":78,"style":78},"#include \u003Ciostream>\n\nint add(int a, int b)\n{\n    return a + b;\n}\n\nint subtract(int a, int b)\n{\n    return a - b;\n}\n\nint multiply(int a, int b)\n{\n    return a * b;\n}\n\nint main()\n{\n    int (*operations[3])(int, int) = {add, subtract, multiply};\n\n    std::cout \u003C\u003C operations[0](8, 2) \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C operations[1](8, 2) \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C operations[2](8, 2) \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[24,1732,1733,1739,1743,1763,1767,1777,1781,1785,1805,1809,1819,1823,1827,1847,1851,1861,1865,1869,1877,1881,1906,1910,1944,1976,2008,2012,2021],{"__ignoreMap":78},[82,1734,1735,1737],{"class":84,"line":85},[82,1736,313],{"class":88},[82,1738,317],{"class":316},[82,1740,1741],{"class":84,"line":223},[82,1742,323],{"emptyLinePlaceholder":322},[82,1744,1745,1747,1749,1751,1753,1755,1757,1759,1761],{"class":84,"line":326},[82,1746,89],{"class":88},[82,1748,93],{"class":92},[82,1750,97],{"class":96},[82,1752,89],{"class":88},[82,1754,103],{"class":102},[82,1756,106],{"class":96},[82,1758,89],{"class":88},[82,1760,111],{"class":102},[82,1762,345],{"class":96},[82,1764,1765],{"class":84,"line":348},[82,1766,351],{"class":96},[82,1768,1769,1771,1773,1775],{"class":84,"line":354},[82,1770,357],{"class":88},[82,1772,360],{"class":96},[82,1774,363],{"class":88},[82,1776,366],{"class":96},[82,1778,1779],{"class":84,"line":369},[82,1780,372],{"class":96},[82,1782,1783],{"class":84,"line":375},[82,1784,323],{"emptyLinePlaceholder":322},[82,1786,1787,1789,1791,1793,1795,1797,1799,1801,1803],{"class":84,"line":380},[82,1788,89],{"class":88},[82,1790,955],{"class":92},[82,1792,97],{"class":96},[82,1794,89],{"class":88},[82,1796,103],{"class":102},[82,1798,106],{"class":96},[82,1800,89],{"class":88},[82,1802,111],{"class":102},[82,1804,345],{"class":96},[82,1806,1807],{"class":84,"line":391},[82,1808,351],{"class":96},[82,1810,1811,1813,1815,1817],{"class":84,"line":396},[82,1812,357],{"class":88},[82,1814,360],{"class":96},[82,1816,982],{"class":88},[82,1818,366],{"class":96},[82,1820,1821],{"class":84,"line":419},[82,1822,372],{"class":96},[82,1824,1825],{"class":84,"line":424},[82,1826,323],{"emptyLinePlaceholder":322},[82,1828,1829,1831,1833,1835,1837,1839,1841,1843,1845],{"class":84,"line":466},[82,1830,89],{"class":88},[82,1832,1227],{"class":92},[82,1834,97],{"class":96},[82,1836,89],{"class":88},[82,1838,103],{"class":102},[82,1840,106],{"class":96},[82,1842,89],{"class":88},[82,1844,111],{"class":102},[82,1846,345],{"class":96},[82,1848,1849],{"class":84,"line":503},[82,1850,351],{"class":96},[82,1852,1853,1855,1857,1859],{"class":84,"line":508},[82,1854,357],{"class":88},[82,1856,360],{"class":96},[82,1858,189],{"class":88},[82,1860,366],{"class":96},[82,1862,1863],{"class":84,"line":522},[82,1864,372],{"class":96},[82,1866,1867],{"class":84,"line":555},[82,1868,323],{"emptyLinePlaceholder":322},[82,1870,1871,1873,1875],{"class":84,"line":560},[82,1872,89],{"class":88},[82,1874,385],{"class":92},[82,1876,388],{"class":96},[82,1878,1879],{"class":84,"line":570},[82,1880,351],{"class":96},[82,1882,1883,1885,1888,1890,1893,1895,1897,1899,1901,1903],{"class":84,"line":832},[82,1884,399],{"class":88},[82,1886,1887],{"class":96}," (*operations[",[82,1889,442],{"class":441},[82,1891,1892],{"class":96},"])(",[82,1894,89],{"class":88},[82,1896,106],{"class":96},[82,1898,89],{"class":88},[82,1900,410],{"class":96},[82,1902,413],{"class":88},[82,1904,1905],{"class":96}," {add, subtract, multiply};\n",[82,1907,1908],{"class":84,"line":837},[82,1909,323],{"emptyLinePlaceholder":322},[82,1911,1912,1914,1916,1918,1921,1923,1926,1928,1930,1932,1934,1936,1938,1940,1942],{"class":84,"line":843},[82,1913,427],{"class":92},[82,1915,430],{"class":96},[82,1917,433],{"class":88},[82,1919,1920],{"class":96}," operations[",[82,1922,1716],{"class":441},[82,1924,1925],{"class":96},"](",[82,1927,540],{"class":441},[82,1929,106],{"class":96},[82,1931,1723],{"class":441},[82,1933,410],{"class":96},[82,1935,433],{"class":88},[82,1937,454],{"class":316},[82,1939,457],{"class":441},[82,1941,460],{"class":316},[82,1943,463],{"class":96},[82,1945,1946,1948,1950,1952,1954,1956,1958,1960,1962,1964,1966,1968,1970,1972,1974],{"class":84,"line":849},[82,1947,427],{"class":92},[82,1949,430],{"class":96},[82,1951,433],{"class":88},[82,1953,1920],{"class":96},[82,1955,1719],{"class":441},[82,1957,1925],{"class":96},[82,1959,540],{"class":441},[82,1961,106],{"class":96},[82,1963,1723],{"class":441},[82,1965,410],{"class":96},[82,1967,433],{"class":88},[82,1969,454],{"class":316},[82,1971,457],{"class":441},[82,1973,460],{"class":316},[82,1975,463],{"class":96},[82,1977,1978,1980,1982,1984,1986,1988,1990,1992,1994,1996,1998,2000,2002,2004,2006],{"class":84,"line":854},[82,1979,427],{"class":92},[82,1981,430],{"class":96},[82,1983,433],{"class":88},[82,1985,1920],{"class":96},[82,1987,1723],{"class":441},[82,1989,1925],{"class":96},[82,1991,540],{"class":441},[82,1993,106],{"class":96},[82,1995,1723],{"class":441},[82,1997,410],{"class":96},[82,1999,433],{"class":88},[82,2001,454],{"class":316},[82,2003,457],{"class":441},[82,2005,460],{"class":316},[82,2007,463],{"class":96},[82,2009,2010],{"class":84,"line":863},[82,2011,323],{"emptyLinePlaceholder":322},[82,2013,2015,2017,2019],{"class":84,"line":2014},26,[82,2016,357],{"class":88},[82,2018,565],{"class":441},[82,2020,463],{"class":96},[82,2022,2024],{"class":84,"line":2023},27,[82,2025,372],{"class":96},[16,2027,2028],{},[19,2029,577],{},[73,2031,2034],{"className":2032,"code":2033,"language":583,"meta":78},[581],"10\n6\n16\n",[24,2035,2033],{"__ignoreMap":78},[16,2037,2038,2039,2042,2043,2046,2047,2050],{},"這種根據下標選擇行為的寫法稱為",[19,2040,2041],{},"表驅動","。它可以減少很長的 ",[24,2044,2045],{},"if...else"," 或 ",[24,2048,2049],{},"switch","，但使用下標前必須檢查範圍。",[37,2052,2054],{"id":2053},"示例7函數重載與函數指針","示例7：函數重載與函數指針",[16,2056,2057],{},"前面已經學習過函數重載：多個函數可以使用同一個名字，只要參數列表不同。",[16,2059,2060],{},"當重載函數名賦給類型明確的函數指針時，編譯器會根據函數指針的類型選擇匹配的重載版本。",[16,2062,2063],{},[19,2064,303],{},[73,2066,2068],{"className":75,"code":2067,"language":77,"meta":78,"style":78},"#include \u003Ciostream>\n\nint square(int value)\n{\n    return value * value;\n}\n\ndouble square(double value)\n{\n    return value * value;\n}\n\nint main()\n{\n    int (*integer_square)(int) = square;\n    double (*decimal_square)(double) = square;\n\n    std::cout \u003C\u003C integer_square(5) \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C decimal_square(1.5) \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[24,2069,2070,2076,2080,2095,2099,2110,2114,2118,2132,2136,2146,2150,2154,2162,2166,2182,2197,2201,2228,2256,2260,2268],{"__ignoreMap":78},[82,2071,2072,2074],{"class":84,"line":85},[82,2073,313],{"class":88},[82,2075,317],{"class":316},[82,2077,2078],{"class":84,"line":223},[82,2079,323],{"emptyLinePlaceholder":322},[82,2081,2082,2084,2087,2089,2091,2093],{"class":84,"line":326},[82,2083,89],{"class":88},[82,2085,2086],{"class":92}," square",[82,2088,97],{"class":96},[82,2090,89],{"class":88},[82,2092,1550],{"class":102},[82,2094,345],{"class":96},[82,2096,2097],{"class":84,"line":348},[82,2098,351],{"class":96},[82,2100,2101,2103,2105,2107],{"class":84,"line":354},[82,2102,357],{"class":88},[82,2104,1567],{"class":96},[82,2106,189],{"class":88},[82,2108,2109],{"class":96}," value;\n",[82,2111,2112],{"class":84,"line":369},[82,2113,372],{"class":96},[82,2115,2116],{"class":84,"line":375},[82,2117,323],{"emptyLinePlaceholder":322},[82,2119,2120,2122,2124,2126,2128,2130],{"class":84,"line":380},[82,2121,667],{"class":88},[82,2123,2086],{"class":92},[82,2125,97],{"class":96},[82,2127,667],{"class":88},[82,2129,1550],{"class":102},[82,2131,345],{"class":96},[82,2133,2134],{"class":84,"line":391},[82,2135,351],{"class":96},[82,2137,2138,2140,2142,2144],{"class":84,"line":396},[82,2139,357],{"class":88},[82,2141,1567],{"class":96},[82,2143,189],{"class":88},[82,2145,2109],{"class":96},[82,2147,2148],{"class":84,"line":419},[82,2149,372],{"class":96},[82,2151,2152],{"class":84,"line":424},[82,2153,323],{"emptyLinePlaceholder":322},[82,2155,2156,2158,2160],{"class":84,"line":466},[82,2157,89],{"class":88},[82,2159,385],{"class":92},[82,2161,388],{"class":96},[82,2163,2164],{"class":84,"line":503},[82,2165,351],{"class":96},[82,2167,2168,2170,2173,2175,2177,2179],{"class":84,"line":508},[82,2169,399],{"class":88},[82,2171,2172],{"class":96}," (*integer_square)(",[82,2174,89],{"class":88},[82,2176,410],{"class":96},[82,2178,413],{"class":88},[82,2180,2181],{"class":96}," square;\n",[82,2183,2184,2186,2189,2191,2193,2195],{"class":84,"line":522},[82,2185,743],{"class":88},[82,2187,2188],{"class":96}," (*decimal_square)(",[82,2190,667],{"class":88},[82,2192,410],{"class":96},[82,2194,413],{"class":88},[82,2196,2181],{"class":96},[82,2198,2199],{"class":84,"line":555},[82,2200,323],{"emptyLinePlaceholder":322},[82,2202,2203,2205,2207,2209,2212,2214,2216,2218,2220,2222,2224,2226],{"class":84,"line":560},[82,2204,427],{"class":92},[82,2206,430],{"class":96},[82,2208,433],{"class":88},[82,2210,2211],{"class":92}," integer_square",[82,2213,97],{"class":96},[82,2215,447],{"class":441},[82,2217,410],{"class":96},[82,2219,433],{"class":88},[82,2221,454],{"class":316},[82,2223,457],{"class":441},[82,2225,460],{"class":316},[82,2227,463],{"class":96},[82,2229,2230,2232,2234,2236,2239,2241,2244,2246,2248,2250,2252,2254],{"class":84,"line":570},[82,2231,427],{"class":92},[82,2233,430],{"class":96},[82,2235,433],{"class":88},[82,2237,2238],{"class":92}," decimal_square",[82,2240,97],{"class":96},[82,2242,2243],{"class":441},"1.5",[82,2245,410],{"class":96},[82,2247,433],{"class":88},[82,2249,454],{"class":316},[82,2251,457],{"class":441},[82,2253,460],{"class":316},[82,2255,463],{"class":96},[82,2257,2258],{"class":84,"line":832},[82,2259,323],{"emptyLinePlaceholder":322},[82,2261,2262,2264,2266],{"class":84,"line":837},[82,2263,357],{"class":88},[82,2265,565],{"class":441},[82,2267,463],{"class":96},[82,2269,2270],{"class":84,"line":843},[82,2271,372],{"class":96},[16,2273,2274],{},[19,2275,577],{},[73,2277,2280],{"className":2278,"code":2279,"language":583,"meta":78},[581],"25\n2.25\n",[24,2281,2279],{"__ignoreMap":78},[16,2283,2284],{},"如果沒有足夠的類型信息，單獨寫一個重載函數名可能產生二義性。現代 C++ 擴展部分會介紹如何使用顯式類型轉換進一步指定重載版本。",[10,2286,2287],{"id":2287},"成員函數指針",[37,2289,2290],{"id":2290},"普通函數指針與成員函數指針的區別",[16,2292,2293,2294,2297,2298,173],{},"非靜態成員函數必須依附某個對象調用，因為函數內部可能訪問該對象的數據成員和 ",[24,2295,2296],{},"this"," 指針。因此，非靜態成員函數不能保存在普通函數指針中，需要使用",[19,2299,2287],{},[16,2301,2302],{},"成員函數指針的類型中必須寫出它所屬的類：",[73,2304,2306],{"className":75,"code":2305,"language":77,"meta":78,"style":78},"返回值类型 (类名::*指针变量名)(参数类型列表);\n",[24,2307,2308],{"__ignoreMap":78},[82,2309,2310,2313,2315],{"class":84,"line":85},[82,2311,2312],{"class":96},"返回值类型 (类名::",[82,2314,189],{"class":88},[82,2316,2317],{"class":96},"指针变量名)(参数类型列表);\n",[16,2319,2320,2321,2324],{},"取得成員函數地址時必須寫 ",[24,2322,2323],{},"&类名::函数名","。調用時還需要提供一個對象：",[73,2326,2328],{"className":75,"code":2327,"language":77,"meta":78,"style":78},"(对象.*成员函数指针)(参数);\n(对象指针->*成员函数指针)(参数);\n",[24,2329,2330,2340],{"__ignoreMap":78},[82,2331,2332,2335,2337],{"class":84,"line":85},[82,2333,2334],{"class":96},"(对象.",[82,2336,189],{"class":88},[82,2338,2339],{"class":96},"成员函数指针)(参数);\n",[82,2341,2342,2345,2348],{"class":84,"line":223},[82,2343,2344],{"class":96},"(对象指针",[82,2346,2347],{"class":88},"->*",[82,2349,2339],{"class":96},[37,2351,2353],{"id":2352},"示例8靜態成員函數使用普通函數指針","示例8：靜態成員函數使用普通函數指針",[16,2355,2356,2357,2359],{},"靜態成員函數屬於類，但不依附某個具體對象，也沒有 ",[24,2358,2296],{}," 指針。因此，可以使用普通函數指針保存靜態成員函數的地址。",[16,2361,2362],{},[19,2363,303],{},[73,2365,2367],{"className":75,"code":2366,"language":77,"meta":78,"style":78},"#include \u003Ciostream>\n\nclass Calculator\n{\npublic:\n    static int add(int a, int b)\n    {\n        return a + b;\n    }\n};\n\nint main()\n{\n    int (*operation)(int, int) = &Calculator::add;\n    std::cout \u003C\u003C operation(6, 9) \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[24,2368,2369,2375,2379,2387,2391,2396,2420,2425,2436,2441,2446,2450,2458,2462,2486,2517,2521,2529],{"__ignoreMap":78},[82,2370,2371,2373],{"class":84,"line":85},[82,2372,313],{"class":88},[82,2374,317],{"class":316},[82,2376,2377],{"class":84,"line":223},[82,2378,323],{"emptyLinePlaceholder":322},[82,2380,2381,2384],{"class":84,"line":326},[82,2382,2383],{"class":88},"class",[82,2385,2386],{"class":92}," Calculator\n",[82,2388,2389],{"class":84,"line":348},[82,2390,351],{"class":96},[82,2392,2393],{"class":84,"line":354},[82,2394,2395],{"class":88},"public:\n",[82,2397,2398,2401,2404,2406,2408,2410,2412,2414,2416,2418],{"class":84,"line":369},[82,2399,2400],{"class":88},"    static",[82,2402,2403],{"class":88}," int",[82,2405,93],{"class":92},[82,2407,97],{"class":96},[82,2409,89],{"class":88},[82,2411,103],{"class":102},[82,2413,106],{"class":96},[82,2415,89],{"class":88},[82,2417,111],{"class":102},[82,2419,345],{"class":96},[82,2421,2422],{"class":84,"line":375},[82,2423,2424],{"class":96},"    {\n",[82,2426,2427,2430,2432,2434],{"class":84,"line":380},[82,2428,2429],{"class":88},"        return",[82,2431,360],{"class":96},[82,2433,363],{"class":88},[82,2435,366],{"class":96},[82,2437,2438],{"class":84,"line":391},[82,2439,2440],{"class":96},"    }\n",[82,2442,2443],{"class":84,"line":396},[82,2444,2445],{"class":96},"};\n",[82,2447,2448],{"class":84,"line":419},[82,2449,323],{"emptyLinePlaceholder":322},[82,2451,2452,2454,2456],{"class":84,"line":424},[82,2453,89],{"class":88},[82,2455,385],{"class":92},[82,2457,388],{"class":96},[82,2459,2460],{"class":84,"line":466},[82,2461,351],{"class":96},[82,2463,2464,2466,2468,2470,2472,2474,2476,2478,2480,2483],{"class":84,"line":503},[82,2465,399],{"class":88},[82,2467,207],{"class":96},[82,2469,89],{"class":88},[82,2471,106],{"class":96},[82,2473,89],{"class":88},[82,2475,410],{"class":96},[82,2477,413],{"class":88},[82,2479,516],{"class":88},[82,2481,2482],{"class":92},"Calculator",[82,2484,2485],{"class":96},"::add;\n",[82,2487,2488,2490,2492,2494,2496,2498,2500,2502,2505,2507,2509,2511,2513,2515],{"class":84,"line":508},[82,2489,427],{"class":92},[82,2491,430],{"class":96},[82,2493,433],{"class":88},[82,2495,1039],{"class":92},[82,2497,97],{"class":96},[82,2499,784],{"class":441},[82,2501,106],{"class":96},[82,2503,2504],{"class":441},"9",[82,2506,410],{"class":96},[82,2508,433],{"class":88},[82,2510,454],{"class":316},[82,2512,457],{"class":441},[82,2514,460],{"class":316},[82,2516,463],{"class":96},[82,2518,2519],{"class":84,"line":522},[82,2520,323],{"emptyLinePlaceholder":322},[82,2522,2523,2525,2527],{"class":84,"line":555},[82,2524,357],{"class":88},[82,2526,565],{"class":441},[82,2528,463],{"class":96},[82,2530,2531],{"class":84,"line":560},[82,2532,372],{"class":96},[16,2534,2535],{},[19,2536,577],{},[73,2538,2541],{"className":2539,"code":2540,"language":583,"meta":78},[581],"15\n",[24,2542,2540],{"__ignoreMap":78},[37,2544,2546],{"id":2545},"示例9通過對象調用非靜態成員函數指針","示例9：通過對象調用非靜態成員函數指針",[16,2548,1150,2549,2552,2553,2556,2557,2560],{},[24,2550,2551],{},"scale"," 是非靜態成員函數，會訪問當前對象的 ",[24,2554,2555],{},"factor_","，因此調用時必須指定一個 ",[24,2558,2559],{},"Multiplier"," 對象。",[16,2562,2563,2564,2567,2568,2571,2572,173],{},"運算符 ",[24,2565,2566],{},".*"," 表示“通過對象使用成員指針”。調用表達式外層的括號不能省略，因為函數調用運算符 ",[24,2569,2570],{},"()"," 的優先級高於 ",[24,2573,2566],{},[16,2575,2576],{},[19,2577,303],{},[73,2579,2581],{"className":75,"code":2580,"language":77,"meta":78,"style":78},"#include \u003Ciostream>\n\nclass Multiplier\n{\nprivate:\n    int factor_;\n\npublic:\n    Multiplier(int factor)\n        : factor_(factor)\n    {\n    }\n\n    int scale(int value)\n    {\n        return value * factor_;\n    }\n};\n\nint main()\n{\n    int (Multiplier::*operation)(int) = &Multiplier::scale;\n\n    Multiplier twice(2);\n    Multiplier triple(3);\n\n    std::cout \u003C\u003C (twice.*operation)(5) \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C (triple.*operation)(5) \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[24,2582,2583,2589,2593,2600,2604,2609,2616,2620,2624,2638,2648,2652,2656,2660,2675,2679,2689,2693,2697,2701,2709,2713,2742,2746,2760,2773,2777,2802,2828,2833,2842],{"__ignoreMap":78},[82,2584,2585,2587],{"class":84,"line":85},[82,2586,313],{"class":88},[82,2588,317],{"class":316},[82,2590,2591],{"class":84,"line":223},[82,2592,323],{"emptyLinePlaceholder":322},[82,2594,2595,2597],{"class":84,"line":326},[82,2596,2383],{"class":88},[82,2598,2599],{"class":92}," Multiplier\n",[82,2601,2602],{"class":84,"line":348},[82,2603,351],{"class":96},[82,2605,2606],{"class":84,"line":354},[82,2607,2608],{"class":88},"private:\n",[82,2610,2611,2613],{"class":84,"line":369},[82,2612,399],{"class":88},[82,2614,2615],{"class":96}," factor_;\n",[82,2617,2618],{"class":84,"line":375},[82,2619,323],{"emptyLinePlaceholder":322},[82,2621,2622],{"class":84,"line":380},[82,2623,2395],{"class":88},[82,2625,2626,2629,2631,2633,2636],{"class":84,"line":391},[82,2627,2628],{"class":92},"    Multiplier",[82,2630,97],{"class":96},[82,2632,89],{"class":88},[82,2634,2635],{"class":102}," factor",[82,2637,345],{"class":96},[82,2639,2640,2643,2645],{"class":84,"line":396},[82,2641,2642],{"class":96},"        : ",[82,2644,2555],{"class":92},[82,2646,2647],{"class":96},"(factor)\n",[82,2649,2650],{"class":84,"line":419},[82,2651,2424],{"class":96},[82,2653,2654],{"class":84,"line":424},[82,2655,2440],{"class":96},[82,2657,2658],{"class":84,"line":466},[82,2659,323],{"emptyLinePlaceholder":322},[82,2661,2662,2664,2667,2669,2671,2673],{"class":84,"line":503},[82,2663,399],{"class":88},[82,2665,2666],{"class":92}," scale",[82,2668,97],{"class":96},[82,2670,89],{"class":88},[82,2672,1550],{"class":102},[82,2674,345],{"class":96},[82,2676,2677],{"class":84,"line":508},[82,2678,2424],{"class":96},[82,2680,2681,2683,2685,2687],{"class":84,"line":522},[82,2682,2429],{"class":88},[82,2684,1567],{"class":96},[82,2686,189],{"class":88},[82,2688,2615],{"class":96},[82,2690,2691],{"class":84,"line":555},[82,2692,2440],{"class":96},[82,2694,2695],{"class":84,"line":560},[82,2696,2445],{"class":96},[82,2698,2699],{"class":84,"line":570},[82,2700,323],{"emptyLinePlaceholder":322},[82,2702,2703,2705,2707],{"class":84,"line":832},[82,2704,89],{"class":88},[82,2706,385],{"class":92},[82,2708,388],{"class":96},[82,2710,2711],{"class":84,"line":837},[82,2712,351],{"class":96},[82,2714,2715,2717,2719,2721,2724,2726,2729,2731,2733,2735,2737,2739],{"class":84,"line":843},[82,2716,399],{"class":88},[82,2718,475],{"class":96},[82,2720,2559],{"class":92},[82,2722,2723],{"class":96},"::",[82,2725,189],{"class":88},[82,2727,2728],{"class":96},"operation)(",[82,2730,89],{"class":88},[82,2732,410],{"class":96},[82,2734,413],{"class":88},[82,2736,516],{"class":88},[82,2738,2559],{"class":92},[82,2740,2741],{"class":96},"::scale;\n",[82,2743,2744],{"class":84,"line":849},[82,2745,323],{"emptyLinePlaceholder":322},[82,2747,2748,2751,2754,2756,2758],{"class":84,"line":854},[82,2749,2750],{"class":96},"    Multiplier ",[82,2752,2753],{"class":92},"twice",[82,2755,97],{"class":96},[82,2757,1723],{"class":441},[82,2759,114],{"class":96},[82,2761,2762,2764,2767,2769,2771],{"class":84,"line":863},[82,2763,2750],{"class":96},[82,2765,2766],{"class":92},"triple",[82,2768,97],{"class":96},[82,2770,442],{"class":441},[82,2772,114],{"class":96},[82,2774,2775],{"class":84,"line":2014},[82,2776,323],{"emptyLinePlaceholder":322},[82,2778,2779,2781,2783,2785,2788,2790,2792,2794,2796,2798,2800],{"class":84,"line":2023},[82,2780,427],{"class":92},[82,2782,430],{"class":96},[82,2784,433],{"class":88},[82,2786,2787],{"class":96}," (twice.*operation)(",[82,2789,447],{"class":441},[82,2791,410],{"class":96},[82,2793,433],{"class":88},[82,2795,454],{"class":316},[82,2797,457],{"class":441},[82,2799,460],{"class":316},[82,2801,463],{"class":96},[82,2803,2805,2807,2809,2811,2814,2816,2818,2820,2822,2824,2826],{"class":84,"line":2804},28,[82,2806,427],{"class":92},[82,2808,430],{"class":96},[82,2810,433],{"class":88},[82,2812,2813],{"class":96}," (triple.*operation)(",[82,2815,447],{"class":441},[82,2817,410],{"class":96},[82,2819,433],{"class":88},[82,2821,454],{"class":316},[82,2823,457],{"class":441},[82,2825,460],{"class":316},[82,2827,463],{"class":96},[82,2829,2831],{"class":84,"line":2830},29,[82,2832,323],{"emptyLinePlaceholder":322},[82,2834,2836,2838,2840],{"class":84,"line":2835},30,[82,2837,357],{"class":88},[82,2839,565],{"class":441},[82,2841,463],{"class":96},[82,2843,2845],{"class":84,"line":2844},31,[82,2846,372],{"class":96},[16,2848,2849],{},[19,2850,577],{},[73,2852,2855],{"className":2853,"code":2854,"language":583,"meta":78},[581],"10\n15\n",[24,2856,2854],{"__ignoreMap":78},[16,2858,2859],{},"同一個成員函數指針配合不同對象調用時，會訪問各個對象自己的數據。",[37,2861,2863],{"id":2862},"示例10通過對象指針調用成員函數指針","示例10：通過對象指針調用成員函數指針",[16,2865,2866,2867,2869],{},"如果手中保存的是對象指針，需要使用 ",[24,2868,2347],{}," 運算符。",[73,2871,2873],{"className":75,"code":2872,"language":77,"meta":78,"style":78},"(对象指针->*成员函数指针)(参数);\n",[24,2874,2875],{"__ignoreMap":78},[82,2876,2877,2879,2881],{"class":84,"line":85},[82,2878,2344],{"class":96},[82,2880,2347],{"class":88},[82,2882,2339],{"class":96},[16,2884,2885],{},[19,2886,303],{},[73,2888,2890],{"className":75,"code":2889,"language":77,"meta":78,"style":78},"#include \u003Ciostream>\n\nclass Counter\n{\nprivate:\n    int value_;\n\npublic:\n    Counter()\n        : value_(0)\n    {\n    }\n\n    void add(int amount)\n    {\n        value_ += amount;\n    }\n\n    int value()\n    {\n        return value_;\n    }\n};\n\nint main()\n{\n    void (Counter::*action)(int) = &Counter::add;\n\n    Counter counter;\n    Counter* object_pointer = &counter;\n\n    (object_pointer->*action)(5);\n    (object_pointer->*action)(7);\n\n    std::cout \u003C\u003C counter.value() \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[24,2891,2892,2898,2902,2909,2913,2917,2924,2928,2932,2939,2952,2956,2960,2964,2980,2984,2995,2999,3003,3011,3015,3021,3025,3029,3033,3041,3045,3073,3077,3082,3098,3102,3112,3121,3126,3154,3159,3168],{"__ignoreMap":78},[82,2893,2894,2896],{"class":84,"line":85},[82,2895,313],{"class":88},[82,2897,317],{"class":316},[82,2899,2900],{"class":84,"line":223},[82,2901,323],{"emptyLinePlaceholder":322},[82,2903,2904,2906],{"class":84,"line":326},[82,2905,2383],{"class":88},[82,2907,2908],{"class":92}," Counter\n",[82,2910,2911],{"class":84,"line":348},[82,2912,351],{"class":96},[82,2914,2915],{"class":84,"line":354},[82,2916,2608],{"class":88},[82,2918,2919,2921],{"class":84,"line":369},[82,2920,399],{"class":88},[82,2922,2923],{"class":96}," value_;\n",[82,2925,2926],{"class":84,"line":375},[82,2927,323],{"emptyLinePlaceholder":322},[82,2929,2930],{"class":84,"line":380},[82,2931,2395],{"class":88},[82,2933,2934,2937],{"class":84,"line":391},[82,2935,2936],{"class":92},"    Counter",[82,2938,388],{"class":96},[82,2940,2941,2943,2946,2948,2950],{"class":84,"line":396},[82,2942,2642],{"class":96},[82,2944,2945],{"class":92},"value_",[82,2947,97],{"class":96},[82,2949,1716],{"class":441},[82,2951,345],{"class":96},[82,2953,2954],{"class":84,"line":419},[82,2955,2424],{"class":96},[82,2957,2958],{"class":84,"line":424},[82,2959,2440],{"class":96},[82,2961,2962],{"class":84,"line":466},[82,2963,323],{"emptyLinePlaceholder":322},[82,2965,2966,2969,2971,2973,2975,2978],{"class":84,"line":503},[82,2967,2968],{"class":88},"    void",[82,2970,93],{"class":92},[82,2972,97],{"class":96},[82,2974,89],{"class":88},[82,2976,2977],{"class":102}," amount",[82,2979,345],{"class":96},[82,2981,2982],{"class":84,"line":508},[82,2983,2424],{"class":96},[82,2985,2986,2989,2992],{"class":84,"line":522},[82,2987,2988],{"class":96},"        value_ ",[82,2990,2991],{"class":88},"+=",[82,2993,2994],{"class":96}," amount;\n",[82,2996,2997],{"class":84,"line":555},[82,2998,2440],{"class":96},[82,3000,3001],{"class":84,"line":560},[82,3002,323],{"emptyLinePlaceholder":322},[82,3004,3005,3007,3009],{"class":84,"line":570},[82,3006,399],{"class":88},[82,3008,1550],{"class":92},[82,3010,388],{"class":96},[82,3012,3013],{"class":84,"line":832},[82,3014,2424],{"class":96},[82,3016,3017,3019],{"class":84,"line":837},[82,3018,2429],{"class":88},[82,3020,2923],{"class":96},[82,3022,3023],{"class":84,"line":843},[82,3024,2440],{"class":96},[82,3026,3027],{"class":84,"line":849},[82,3028,2445],{"class":96},[82,3030,3031],{"class":84,"line":854},[82,3032,323],{"emptyLinePlaceholder":322},[82,3034,3035,3037,3039],{"class":84,"line":863},[82,3036,89],{"class":88},[82,3038,385],{"class":92},[82,3040,388],{"class":96},[82,3042,3043],{"class":84,"line":2014},[82,3044,351],{"class":96},[82,3046,3047,3049,3051,3054,3056,3058,3061,3063,3065,3067,3069,3071],{"class":84,"line":2023},[82,3048,2968],{"class":88},[82,3050,475],{"class":96},[82,3052,3053],{"class":92},"Counter",[82,3055,2723],{"class":96},[82,3057,189],{"class":88},[82,3059,3060],{"class":96},"action)(",[82,3062,89],{"class":88},[82,3064,410],{"class":96},[82,3066,413],{"class":88},[82,3068,516],{"class":88},[82,3070,3053],{"class":92},[82,3072,2485],{"class":96},[82,3074,3075],{"class":84,"line":2804},[82,3076,323],{"emptyLinePlaceholder":322},[82,3078,3079],{"class":84,"line":2830},[82,3080,3081],{"class":96},"    Counter counter;\n",[82,3083,3084,3086,3088,3091,3093,3095],{"class":84,"line":2835},[82,3085,2936],{"class":96},[82,3087,189],{"class":88},[82,3089,3090],{"class":96}," object_pointer ",[82,3092,413],{"class":88},[82,3094,516],{"class":88},[82,3096,3097],{"class":96},"counter;\n",[82,3099,3100],{"class":84,"line":2844},[82,3101,323],{"emptyLinePlaceholder":322},[82,3103,3105,3108,3110],{"class":84,"line":3104},32,[82,3106,3107],{"class":96},"    (object_pointer->*action)(",[82,3109,447],{"class":441},[82,3111,114],{"class":96},[82,3113,3115,3117,3119],{"class":84,"line":3114},33,[82,3116,3107],{"class":96},[82,3118,535],{"class":441},[82,3120,114],{"class":96},[82,3122,3124],{"class":84,"line":3123},34,[82,3125,323],{"emptyLinePlaceholder":322},[82,3127,3129,3131,3133,3135,3138,3141,3144,3146,3148,3150,3152],{"class":84,"line":3128},35,[82,3130,427],{"class":92},[82,3132,430],{"class":96},[82,3134,433],{"class":88},[82,3136,3137],{"class":96}," counter.",[82,3139,3140],{"class":92},"value",[82,3142,3143],{"class":96},"() ",[82,3145,433],{"class":88},[82,3147,454],{"class":316},[82,3149,457],{"class":441},[82,3151,460],{"class":316},[82,3153,463],{"class":96},[82,3155,3157],{"class":84,"line":3156},36,[82,3158,323],{"emptyLinePlaceholder":322},[82,3160,3162,3164,3166],{"class":84,"line":3161},37,[82,3163,357],{"class":88},[82,3165,565],{"class":441},[82,3167,463],{"class":96},[82,3169,3171],{"class":84,"line":3170},38,[82,3172,372],{"class":96},[16,3174,3175],{},[19,3176,577],{},[73,3178,3181],{"className":3179,"code":3180,"language":583,"meta":78},[581],"12\n",[24,3182,3180],{"__ignoreMap":78},[13,3184,3185],{},[16,3186,3187,3188,3190,3191,173],{},"總結：對象使用 ",[24,3189,2566],{},"，對象指針使用 ",[24,3192,2347],{},[37,3194,3196,3197,3200],{"id":3195},"示例11const-成員函數指針","示例11：",[24,3198,3199],{},"const"," 成員函數指針",[16,3202,3203,3204,3206,3207,3209],{},"成員函數參數列表後的 ",[24,3205,3199],{}," 表示該成員函數不會修改對象的普通數據成員，可以在 ",[24,3208,3199],{}," 對象上調用。",[16,3211,3212,3214,3215,3217,3218,173],{},[24,3213,3199],{}," 是成員函數類型的一部分。因此，指向 ",[24,3216,3199],{}," 成員函數時，函數指針聲明中也必須帶有 ",[24,3219,3199],{},[16,3221,3222],{},[19,3223,303],{},[73,3225,3227],{"className":75,"code":3226,"language":77,"meta":78,"style":78},"#include \u003Ciostream>\n\nclass Sensor\n{\nprivate:\n    int value_;\n\npublic:\n    Sensor(int value)\n        : value_(value)\n    {\n    }\n\n    int read() const\n    {\n        return value_;\n    }\n};\n\nint main()\n{\n    int (Sensor::*reader)() const = &Sensor::read;\n\n    const Sensor sensor(42);\n    std::cout \u003C\u003C (sensor.*reader)() \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[24,3228,3229,3235,3239,3246,3250,3254,3260,3264,3268,3281,3290,3294,3298,3302,3314,3318,3324,3328,3332,3336,3344,3348,3376,3380,3397,3418,3422,3430],{"__ignoreMap":78},[82,3230,3231,3233],{"class":84,"line":85},[82,3232,313],{"class":88},[82,3234,317],{"class":316},[82,3236,3237],{"class":84,"line":223},[82,3238,323],{"emptyLinePlaceholder":322},[82,3240,3241,3243],{"class":84,"line":326},[82,3242,2383],{"class":88},[82,3244,3245],{"class":92}," Sensor\n",[82,3247,3248],{"class":84,"line":348},[82,3249,351],{"class":96},[82,3251,3252],{"class":84,"line":354},[82,3253,2608],{"class":88},[82,3255,3256,3258],{"class":84,"line":369},[82,3257,399],{"class":88},[82,3259,2923],{"class":96},[82,3261,3262],{"class":84,"line":375},[82,3263,323],{"emptyLinePlaceholder":322},[82,3265,3266],{"class":84,"line":380},[82,3267,2395],{"class":88},[82,3269,3270,3273,3275,3277,3279],{"class":84,"line":391},[82,3271,3272],{"class":92},"    Sensor",[82,3274,97],{"class":96},[82,3276,89],{"class":88},[82,3278,1550],{"class":102},[82,3280,345],{"class":96},[82,3282,3283,3285,3287],{"class":84,"line":396},[82,3284,2642],{"class":96},[82,3286,2945],{"class":92},[82,3288,3289],{"class":96},"(value)\n",[82,3291,3292],{"class":84,"line":419},[82,3293,2424],{"class":96},[82,3295,3296],{"class":84,"line":424},[82,3297,2440],{"class":96},[82,3299,3300],{"class":84,"line":466},[82,3301,323],{"emptyLinePlaceholder":322},[82,3303,3304,3306,3309,3311],{"class":84,"line":503},[82,3305,399],{"class":88},[82,3307,3308],{"class":92}," read",[82,3310,3143],{"class":96},[82,3312,3313],{"class":88},"const\n",[82,3315,3316],{"class":84,"line":508},[82,3317,2424],{"class":96},[82,3319,3320,3322],{"class":84,"line":522},[82,3321,2429],{"class":88},[82,3323,2923],{"class":96},[82,3325,3326],{"class":84,"line":555},[82,3327,2440],{"class":96},[82,3329,3330],{"class":84,"line":560},[82,3331,2445],{"class":96},[82,3333,3334],{"class":84,"line":570},[82,3335,323],{"emptyLinePlaceholder":322},[82,3337,3338,3340,3342],{"class":84,"line":832},[82,3339,89],{"class":88},[82,3341,385],{"class":92},[82,3343,388],{"class":96},[82,3345,3346],{"class":84,"line":837},[82,3347,351],{"class":96},[82,3349,3350,3352,3354,3357,3359,3361,3364,3366,3369,3371,3373],{"class":84,"line":843},[82,3351,399],{"class":88},[82,3353,475],{"class":96},[82,3355,3356],{"class":92},"Sensor",[82,3358,2723],{"class":96},[82,3360,189],{"class":88},[82,3362,3363],{"class":96},"reader)() ",[82,3365,3199],{"class":88},[82,3367,3368],{"class":88}," =",[82,3370,516],{"class":88},[82,3372,3356],{"class":92},[82,3374,3375],{"class":96},"::read;\n",[82,3377,3378],{"class":84,"line":849},[82,3379,323],{"emptyLinePlaceholder":322},[82,3381,3382,3385,3388,3391,3393,3395],{"class":84,"line":854},[82,3383,3384],{"class":88},"    const",[82,3386,3387],{"class":96}," Sensor ",[82,3389,3390],{"class":92},"sensor",[82,3392,97],{"class":96},[82,3394,1661],{"class":441},[82,3396,114],{"class":96},[82,3398,3399,3401,3403,3405,3408,3410,3412,3414,3416],{"class":84,"line":863},[82,3400,427],{"class":92},[82,3402,430],{"class":96},[82,3404,433],{"class":88},[82,3406,3407],{"class":96}," (sensor.*reader)() ",[82,3409,433],{"class":88},[82,3411,454],{"class":316},[82,3413,457],{"class":441},[82,3415,460],{"class":316},[82,3417,463],{"class":96},[82,3419,3420],{"class":84,"line":2014},[82,3421,323],{"emptyLinePlaceholder":322},[82,3423,3424,3426,3428],{"class":84,"line":2023},[82,3425,357],{"class":88},[82,3427,565],{"class":441},[82,3429,463],{"class":96},[82,3431,3432],{"class":84,"line":2804},[82,3433,372],{"class":96},[16,3435,3436],{},[19,3437,577],{},[73,3439,3442],{"className":3440,"code":3441,"language":583,"meta":78},[581],"42\n",[24,3443,3441],{"__ignoreMap":78},[16,3445,3446],{},"下面兩個成員函數指針類型並不相同：",[73,3448,3450],{"className":75,"code":3449,"language":77,"meta":78,"style":78},"int (Sensor::*reader1)();       \u002F\u002F 指向非 const 成员函数\nint (Sensor::*reader2)() const; \u002F\u002F 指向 const 成员函数\n",[24,3451,3452,3470],{"__ignoreMap":78},[82,3453,3454,3456,3458,3460,3462,3464,3467],{"class":84,"line":85},[82,3455,89],{"class":88},[82,3457,475],{"class":96},[82,3459,3356],{"class":92},[82,3461,2723],{"class":96},[82,3463,189],{"class":88},[82,3465,3466],{"class":96},"reader1)();",[82,3468,3469],{"class":219},"       \u002F\u002F 指向非 const 成员函数\n",[82,3471,3472,3474,3476,3478,3480,3482,3485,3487,3490],{"class":84,"line":223},[82,3473,89],{"class":88},[82,3475,475],{"class":96},[82,3477,3356],{"class":92},[82,3479,2723],{"class":96},[82,3481,189],{"class":88},[82,3483,3484],{"class":96},"reader2)() ",[82,3486,3199],{"class":88},[82,3488,3489],{"class":96},";",[82,3491,3492],{"class":219}," \u002F\u002F 指向 const 成员函数\n",[10,3494,3496],{"id":3495},"現代-c-擴展可選讀","現代 C++ 擴展（可選讀）",[13,3498,3499],{},[16,3500,3501],{},"以下內容用於説明函數指針與現代 C++ 特性的聯繫。這裏會解釋示例所需的基本語法，但完整理解仍需要學習後面的“現代 C++”章節。初次學習可以先閲讀結論，以後再回來複習。",[37,3503,3505,3506,3508],{"id":3504},"擴展示例1使用-nullptr-表示空函數指針","擴展示例1：使用 ",[24,3507,26],{}," 表示空函數指針",[16,3510,3511,3514],{},[19,3512,3513],{},"需要的標準版本："," C++11。",[16,3516,3517,3519,3520,3523,3524,3526],{},[24,3518,26],{}," 是 C++11 引入的空指針字面量，表示“沒有指向任何對象或函數”。它比舊式的 ",[24,3521,3522],{},"NULL"," 和數字 ",[24,3525,1716],{}," 類型更明確。",[16,3528,3529,3530,3533,3534,3537,3538,173,3541,3544],{},"函數指針可以放進 ",[24,3531,3532],{},"if"," 條件中檢查：非空指針轉換為 ",[24,3535,3536],{},"true","，空指針轉換為 ",[24,3539,3540],{},"false",[19,3542,3543],{},"調用空函數指針會產生未定義行為","，因此可能為空時必須先檢查。",[16,3546,3547],{},[19,3548,303],{},[73,3550,3552],{"className":75,"code":3551,"language":77,"meta":78,"style":78},"#include \u003Ciostream>\n\nvoid greet()\n{\n    std::cout \u003C\u003C \"hello\\n\";\n}\n\nint main()\n{\n    void (*task)() = nullptr;\n\n    if (task)\n    {\n        task();\n    }\n    else\n    {\n        std::cout \u003C\u003C \"task is empty\\n\";\n    }\n\n    task = greet;\n\n    if (task != nullptr)\n    {\n        task();\n    }\n\n    return 0;\n}\n",[24,3553,3554,3560,3564,3573,3577,3594,3598,3602,3610,3614,3628,3632,3640,3644,3652,3656,3661,3665,3683,3687,3691,3701,3705,3719,3723,3729,3733,3737,3745],{"__ignoreMap":78},[82,3555,3556,3558],{"class":84,"line":85},[82,3557,313],{"class":88},[82,3559,317],{"class":316},[82,3561,3562],{"class":84,"line":223},[82,3563,323],{"emptyLinePlaceholder":322},[82,3565,3566,3568,3571],{"class":84,"line":326},[82,3567,1540],{"class":88},[82,3569,3570],{"class":92}," greet",[82,3572,388],{"class":96},[82,3574,3575],{"class":84,"line":348},[82,3576,351],{"class":96},[82,3578,3579,3581,3583,3585,3588,3590,3592],{"class":84,"line":354},[82,3580,427],{"class":92},[82,3582,430],{"class":96},[82,3584,433],{"class":88},[82,3586,3587],{"class":316}," \"hello",[82,3589,457],{"class":441},[82,3591,460],{"class":316},[82,3593,463],{"class":96},[82,3595,3596],{"class":84,"line":369},[82,3597,372],{"class":96},[82,3599,3600],{"class":84,"line":375},[82,3601,323],{"emptyLinePlaceholder":322},[82,3603,3604,3606,3608],{"class":84,"line":380},[82,3605,89],{"class":88},[82,3607,385],{"class":92},[82,3609,388],{"class":96},[82,3611,3612],{"class":84,"line":391},[82,3613,351],{"class":96},[82,3615,3616,3618,3621,3623,3626],{"class":84,"line":396},[82,3617,2968],{"class":88},[82,3619,3620],{"class":96}," (*task)() ",[82,3622,413],{"class":88},[82,3624,3625],{"class":441}," nullptr",[82,3627,463],{"class":96},[82,3629,3630],{"class":84,"line":419},[82,3631,323],{"emptyLinePlaceholder":322},[82,3633,3634,3637],{"class":84,"line":424},[82,3635,3636],{"class":88},"    if",[82,3638,3639],{"class":96}," (task)\n",[82,3641,3642],{"class":84,"line":466},[82,3643,2424],{"class":96},[82,3645,3646,3649],{"class":84,"line":503},[82,3647,3648],{"class":92},"        task",[82,3650,3651],{"class":96},"();\n",[82,3653,3654],{"class":84,"line":508},[82,3655,2440],{"class":96},[82,3657,3658],{"class":84,"line":522},[82,3659,3660],{"class":88},"    else\n",[82,3662,3663],{"class":84,"line":555},[82,3664,2424],{"class":96},[82,3666,3667,3670,3672,3674,3677,3679,3681],{"class":84,"line":560},[82,3668,3669],{"class":92},"        std",[82,3671,430],{"class":96},[82,3673,433],{"class":88},[82,3675,3676],{"class":316}," \"task is empty",[82,3678,457],{"class":441},[82,3680,460],{"class":316},[82,3682,463],{"class":96},[82,3684,3685],{"class":84,"line":570},[82,3686,2440],{"class":96},[82,3688,3689],{"class":84,"line":832},[82,3690,323],{"emptyLinePlaceholder":322},[82,3692,3693,3696,3698],{"class":84,"line":837},[82,3694,3695],{"class":96},"    task ",[82,3697,413],{"class":88},[82,3699,3700],{"class":96}," greet;\n",[82,3702,3703],{"class":84,"line":843},[82,3704,323],{"emptyLinePlaceholder":322},[82,3706,3707,3709,3712,3715,3717],{"class":84,"line":849},[82,3708,3636],{"class":88},[82,3710,3711],{"class":96}," (task ",[82,3713,3714],{"class":88},"!=",[82,3716,3625],{"class":441},[82,3718,345],{"class":96},[82,3720,3721],{"class":84,"line":854},[82,3722,2424],{"class":96},[82,3724,3725,3727],{"class":84,"line":863},[82,3726,3648],{"class":92},[82,3728,3651],{"class":96},[82,3730,3731],{"class":84,"line":2014},[82,3732,2440],{"class":96},[82,3734,3735],{"class":84,"line":2023},[82,3736,323],{"emptyLinePlaceholder":322},[82,3738,3739,3741,3743],{"class":84,"line":2804},[82,3740,357],{"class":88},[82,3742,565],{"class":441},[82,3744,463],{"class":96},[82,3746,3747],{"class":84,"line":2830},[82,3748,372],{"class":96},[16,3750,3751],{},[19,3752,577],{},[73,3754,3757],{"className":3755,"code":3756,"language":583,"meta":78},[581],"task is empty\nhello\n",[24,3758,3756],{"__ignoreMap":78},[13,3760,3761],{},[16,3762,3763,3764,173,3767,3769,3770,3772],{},"注意：函數指針只保存函數地址，不負責管理內存，不需要也不能對它使用 ",[24,3765,3766],{},"delete",[24,3768,26],{}," 的完整用法見後面的 ",[24,3771,26],{}," 章節。",[37,3774,3776,3777,3779],{"id":3775},"擴展示例2使用-using-給函數指針類型起別名","擴展示例2：使用 ",[24,3778,30],{}," 給函數指針類型起別名",[16,3781,3782,3514],{},[19,3783,3513],{},[16,3785,3786,3787,3789],{},"直接書寫函數指針類型比較困難。C++11 可以使用 ",[24,3788,30],{}," 給已有類型起別名：",[73,3791,3793],{"className":75,"code":3792,"language":77,"meta":78,"style":78},"using 新名字 = 已有类型;\n",[24,3794,3795],{"__ignoreMap":78},[82,3796,3797,3799,3802,3804],{"class":84,"line":85},[82,3798,30],{"class":88},[82,3800,3801],{"class":96}," 新名字 ",[82,3803,413],{"class":88},[82,3805,3806],{"class":96}," 已有类型;\n",[16,3808,3809,3810,3813,3814,3817],{},"下面的語句表示 ",[24,3811,3812],{},"Operation"," 是 ",[24,3815,3816],{},"int (*)(int, int)"," 的別名：",[73,3819,3821],{"className":75,"code":3820,"language":77,"meta":78,"style":78},"using Operation = int (*)(int, int);\n",[24,3822,3823],{"__ignoreMap":78},[82,3824,3825,3827,3830,3832,3834,3836,3838,3840,3842,3844,3846],{"class":84,"line":85},[82,3826,30],{"class":88},[82,3828,3829],{"class":92}," Operation",[82,3831,3368],{"class":88},[82,3833,2403],{"class":88},[82,3835,475],{"class":96},[82,3837,189],{"class":88},[82,3839,1294],{"class":96},[82,3841,89],{"class":88},[82,3843,106],{"class":96},[82,3845,89],{"class":88},[82,3847,114],{"class":96},[16,3849,3850,3852],{},[24,3851,30],{}," 不會創建新的類型，也沒有運行時開銷，只是讓類型更容易閲讀。",[16,3854,3855],{},[19,3856,303],{},[73,3858,3860],{"className":75,"code":3859,"language":77,"meta":78,"style":78},"#include \u003Ciostream>\n\nusing Operation = int (*)(int, int);\n\nint add(int a, int b)\n{\n    return a + b;\n}\n\nint multiply(int a, int b)\n{\n    return a * b;\n}\n\nint calculate(int a, int b, Operation operation)\n{\n    return operation(a, b);\n}\n\nint main()\n{\n    Operation operation = add;\n    std::cout \u003C\u003C calculate(3, 8, operation) \u003C\u003C \"\\n\";\n\n    operation = multiply;\n    std::cout \u003C\u003C calculate(3, 8, operation) \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[24,3861,3862,3868,3872,3896,3900,3920,3924,3934,3938,3942,3962,3966,3976,3980,3984,4010,4014,4022,4026,4030,4038,4042,4051,4082,4086,4095,4125,4129,4137],{"__ignoreMap":78},[82,3863,3864,3866],{"class":84,"line":85},[82,3865,313],{"class":88},[82,3867,317],{"class":316},[82,3869,3870],{"class":84,"line":223},[82,3871,323],{"emptyLinePlaceholder":322},[82,3873,3874,3876,3878,3880,3882,3884,3886,3888,3890,3892,3894],{"class":84,"line":326},[82,3875,30],{"class":88},[82,3877,3829],{"class":92},[82,3879,3368],{"class":88},[82,3881,2403],{"class":88},[82,3883,475],{"class":96},[82,3885,189],{"class":88},[82,3887,1294],{"class":96},[82,3889,89],{"class":88},[82,3891,106],{"class":96},[82,3893,89],{"class":88},[82,3895,114],{"class":96},[82,3897,3898],{"class":84,"line":348},[82,3899,323],{"emptyLinePlaceholder":322},[82,3901,3902,3904,3906,3908,3910,3912,3914,3916,3918],{"class":84,"line":354},[82,3903,89],{"class":88},[82,3905,93],{"class":92},[82,3907,97],{"class":96},[82,3909,89],{"class":88},[82,3911,103],{"class":102},[82,3913,106],{"class":96},[82,3915,89],{"class":88},[82,3917,111],{"class":102},[82,3919,345],{"class":96},[82,3921,3922],{"class":84,"line":369},[82,3923,351],{"class":96},[82,3925,3926,3928,3930,3932],{"class":84,"line":375},[82,3927,357],{"class":88},[82,3929,360],{"class":96},[82,3931,363],{"class":88},[82,3933,366],{"class":96},[82,3935,3936],{"class":84,"line":380},[82,3937,372],{"class":96},[82,3939,3940],{"class":84,"line":391},[82,3941,323],{"emptyLinePlaceholder":322},[82,3943,3944,3946,3948,3950,3952,3954,3956,3958,3960],{"class":84,"line":396},[82,3945,89],{"class":88},[82,3947,1227],{"class":92},[82,3949,97],{"class":96},[82,3951,89],{"class":88},[82,3953,103],{"class":102},[82,3955,106],{"class":96},[82,3957,89],{"class":88},[82,3959,111],{"class":102},[82,3961,345],{"class":96},[82,3963,3964],{"class":84,"line":419},[82,3965,351],{"class":96},[82,3967,3968,3970,3972,3974],{"class":84,"line":424},[82,3969,357],{"class":88},[82,3971,360],{"class":96},[82,3973,189],{"class":88},[82,3975,366],{"class":96},[82,3977,3978],{"class":84,"line":466},[82,3979,372],{"class":96},[82,3981,3982],{"class":84,"line":503},[82,3983,323],{"emptyLinePlaceholder":322},[82,3985,3986,3988,3990,3992,3994,3996,3998,4000,4002,4004,4006,4008],{"class":84,"line":508},[82,3987,89],{"class":88},[82,3989,1270],{"class":92},[82,3991,97],{"class":96},[82,3993,89],{"class":88},[82,3995,103],{"class":102},[82,3997,106],{"class":96},[82,3999,89],{"class":88},[82,4001,111],{"class":102},[82,4003,106],{"class":96},[82,4005,3812],{"class":92},[82,4007,1039],{"class":102},[82,4009,345],{"class":96},[82,4011,4012],{"class":84,"line":522},[82,4013,351],{"class":96},[82,4015,4016,4018,4020],{"class":84,"line":555},[82,4017,357],{"class":88},[82,4019,1039],{"class":92},[82,4021,1316],{"class":96},[82,4023,4024],{"class":84,"line":560},[82,4025,372],{"class":96},[82,4027,4028],{"class":84,"line":570},[82,4029,323],{"emptyLinePlaceholder":322},[82,4031,4032,4034,4036],{"class":84,"line":832},[82,4033,89],{"class":88},[82,4035,385],{"class":92},[82,4037,388],{"class":96},[82,4039,4040],{"class":84,"line":837},[82,4041,351],{"class":96},[82,4043,4044,4047,4049],{"class":84,"line":843},[82,4045,4046],{"class":96},"    Operation operation ",[82,4048,413],{"class":88},[82,4050,416],{"class":96},[82,4052,4053,4055,4057,4059,4061,4063,4065,4067,4069,4072,4074,4076,4078,4080],{"class":84,"line":849},[82,4054,427],{"class":92},[82,4056,430],{"class":96},[82,4058,433],{"class":88},[82,4060,1270],{"class":92},[82,4062,97],{"class":96},[82,4064,442],{"class":441},[82,4066,106],{"class":96},[82,4068,540],{"class":441},[82,4070,4071],{"class":96},", operation) ",[82,4073,433],{"class":88},[82,4075,454],{"class":316},[82,4077,457],{"class":441},[82,4079,460],{"class":316},[82,4081,463],{"class":96},[82,4083,4084],{"class":84,"line":854},[82,4085,323],{"emptyLinePlaceholder":322},[82,4087,4088,4090,4092],{"class":84,"line":863},[82,4089,1068],{"class":96},[82,4091,413],{"class":88},[82,4093,4094],{"class":96}," multiply;\n",[82,4096,4097,4099,4101,4103,4105,4107,4109,4111,4113,4115,4117,4119,4121,4123],{"class":84,"line":2014},[82,4098,427],{"class":92},[82,4100,430],{"class":96},[82,4102,433],{"class":88},[82,4104,1270],{"class":92},[82,4106,97],{"class":96},[82,4108,442],{"class":441},[82,4110,106],{"class":96},[82,4112,540],{"class":441},[82,4114,4071],{"class":96},[82,4116,433],{"class":88},[82,4118,454],{"class":316},[82,4120,457],{"class":441},[82,4122,460],{"class":316},[82,4124,463],{"class":96},[82,4126,4127],{"class":84,"line":2023},[82,4128,323],{"emptyLinePlaceholder":322},[82,4130,4131,4133,4135],{"class":84,"line":2804},[82,4132,357],{"class":88},[82,4134,565],{"class":441},[82,4136,463],{"class":96},[82,4138,4139],{"class":84,"line":2830},[82,4140,372],{"class":96},[16,4142,4143],{},[19,4144,577],{},[73,4146,4149],{"className":4147,"code":4148,"language":583,"meta":78},[581],"11\n24\n",[24,4150,4148],{"__ignoreMap":78},[16,4152,4153,4154,4157],{},"舊代碼中也可能看到 ",[24,4155,4156],{},"typedef"," 寫法，兩者含義相同：",[73,4159,4161],{"className":75,"code":4160,"language":77,"meta":78,"style":78},"typedef int (*Operation1)(int, int);\nusing Operation2 = int (*)(int, int);\n",[24,4162,4163,4180],{"__ignoreMap":78},[82,4164,4165,4167,4169,4172,4174,4176,4178],{"class":84,"line":85},[82,4166,4156],{"class":88},[82,4168,2403],{"class":88},[82,4170,4171],{"class":96}," (*Operation1)(",[82,4173,89],{"class":88},[82,4175,106],{"class":96},[82,4177,89],{"class":88},[82,4179,114],{"class":96},[82,4181,4182,4184,4187,4189,4191,4193,4195,4197,4199,4201,4203],{"class":84,"line":223},[82,4183,30],{"class":88},[82,4185,4186],{"class":92}," Operation2",[82,4188,3368],{"class":88},[82,4190,2403],{"class":88},[82,4192,475],{"class":96},[82,4194,189],{"class":88},[82,4196,1294],{"class":96},[82,4198,89],{"class":88},[82,4200,106],{"class":96},[82,4202,89],{"class":88},[82,4204,114],{"class":96},[16,4206,4207,4208,4210,4211,3772],{},"現代 C++ 通常優先使用更容易閲讀的 ",[24,4209,30],{},"。完整用法見後面的 ",[24,4212,30],{},[37,4214,4216],{"id":4215},"擴展示例3從函數返回函數指針","擴展示例3：從函數返回函數指針",[16,4218,4219,4220,4223,4224,173],{},"有了類型別名，函數也可以方便地返回一個函數指針。下面的 ",[24,4221,4222],{},"select_operation"," 根據字符返回對應函數的地址。如果字符無法識別，則返回 ",[24,4225,26],{},[16,4227,4228],{},[19,4229,303],{},[73,4231,4233],{"className":75,"code":4232,"language":77,"meta":78,"style":78},"#include \u003Ciostream>\n\nusing Operation = int (*)(int, int);\n\nint add(int a, int b)\n{\n    return a + b;\n}\n\nint subtract(int a, int b)\n{\n    return a - b;\n}\n\nOperation select_operation(char symbol)\n{\n    if (symbol == '+')\n    {\n        return add;\n    }\n\n    if (symbol == '-')\n    {\n        return subtract;\n    }\n\n    return nullptr;\n}\n\nint main()\n{\n    Operation operation = select_operation('-');\n\n    if (operation)\n    {\n        std::cout \u003C\u003C operation(20, 7) \u003C\u003C \"\\n\";\n    }\n    else\n    {\n        std::cout \u003C\u003C \"unknown operation\\n\";\n    }\n\n    return 0;\n}\n",[24,4234,4235,4241,4245,4269,4273,4293,4297,4307,4311,4315,4335,4339,4349,4353,4357,4374,4378,4393,4397,4403,4407,4411,4424,4428,4434,4438,4442,4450,4454,4458,4466,4470,4485,4489,4496,4500,4530,4534,4538,4543,4561,4566,4571,4580],{"__ignoreMap":78},[82,4236,4237,4239],{"class":84,"line":85},[82,4238,313],{"class":88},[82,4240,317],{"class":316},[82,4242,4243],{"class":84,"line":223},[82,4244,323],{"emptyLinePlaceholder":322},[82,4246,4247,4249,4251,4253,4255,4257,4259,4261,4263,4265,4267],{"class":84,"line":326},[82,4248,30],{"class":88},[82,4250,3829],{"class":92},[82,4252,3368],{"class":88},[82,4254,2403],{"class":88},[82,4256,475],{"class":96},[82,4258,189],{"class":88},[82,4260,1294],{"class":96},[82,4262,89],{"class":88},[82,4264,106],{"class":96},[82,4266,89],{"class":88},[82,4268,114],{"class":96},[82,4270,4271],{"class":84,"line":348},[82,4272,323],{"emptyLinePlaceholder":322},[82,4274,4275,4277,4279,4281,4283,4285,4287,4289,4291],{"class":84,"line":354},[82,4276,89],{"class":88},[82,4278,93],{"class":92},[82,4280,97],{"class":96},[82,4282,89],{"class":88},[82,4284,103],{"class":102},[82,4286,106],{"class":96},[82,4288,89],{"class":88},[82,4290,111],{"class":102},[82,4292,345],{"class":96},[82,4294,4295],{"class":84,"line":369},[82,4296,351],{"class":96},[82,4298,4299,4301,4303,4305],{"class":84,"line":375},[82,4300,357],{"class":88},[82,4302,360],{"class":96},[82,4304,363],{"class":88},[82,4306,366],{"class":96},[82,4308,4309],{"class":84,"line":380},[82,4310,372],{"class":96},[82,4312,4313],{"class":84,"line":391},[82,4314,323],{"emptyLinePlaceholder":322},[82,4316,4317,4319,4321,4323,4325,4327,4329,4331,4333],{"class":84,"line":396},[82,4318,89],{"class":88},[82,4320,955],{"class":92},[82,4322,97],{"class":96},[82,4324,89],{"class":88},[82,4326,103],{"class":102},[82,4328,106],{"class":96},[82,4330,89],{"class":88},[82,4332,111],{"class":102},[82,4334,345],{"class":96},[82,4336,4337],{"class":84,"line":419},[82,4338,351],{"class":96},[82,4340,4341,4343,4345,4347],{"class":84,"line":424},[82,4342,357],{"class":88},[82,4344,360],{"class":96},[82,4346,982],{"class":88},[82,4348,366],{"class":96},[82,4350,4351],{"class":84,"line":466},[82,4352,372],{"class":96},[82,4354,4355],{"class":84,"line":503},[82,4356,323],{"emptyLinePlaceholder":322},[82,4358,4359,4361,4364,4366,4369,4372],{"class":84,"line":508},[82,4360,3812],{"class":92},[82,4362,4363],{"class":92}," select_operation",[82,4365,97],{"class":96},[82,4367,4368],{"class":88},"char",[82,4370,4371],{"class":102}," symbol",[82,4373,345],{"class":96},[82,4375,4376],{"class":84,"line":522},[82,4377,351],{"class":96},[82,4379,4380,4382,4385,4388,4391],{"class":84,"line":555},[82,4381,3636],{"class":88},[82,4383,4384],{"class":96}," (symbol ",[82,4386,4387],{"class":88},"==",[82,4389,4390],{"class":316}," '+'",[82,4392,345],{"class":96},[82,4394,4395],{"class":84,"line":560},[82,4396,2424],{"class":96},[82,4398,4399,4401],{"class":84,"line":570},[82,4400,2429],{"class":88},[82,4402,416],{"class":96},[82,4404,4405],{"class":84,"line":832},[82,4406,2440],{"class":96},[82,4408,4409],{"class":84,"line":837},[82,4410,323],{"emptyLinePlaceholder":322},[82,4412,4413,4415,4417,4419,4422],{"class":84,"line":843},[82,4414,3636],{"class":88},[82,4416,4384],{"class":96},[82,4418,4387],{"class":88},[82,4420,4421],{"class":316}," '-'",[82,4423,345],{"class":96},[82,4425,4426],{"class":84,"line":849},[82,4427,2424],{"class":96},[82,4429,4430,4432],{"class":84,"line":854},[82,4431,2429],{"class":88},[82,4433,1073],{"class":96},[82,4435,4436],{"class":84,"line":863},[82,4437,2440],{"class":96},[82,4439,4440],{"class":84,"line":2014},[82,4441,323],{"emptyLinePlaceholder":322},[82,4443,4444,4446,4448],{"class":84,"line":2023},[82,4445,357],{"class":88},[82,4447,3625],{"class":441},[82,4449,463],{"class":96},[82,4451,4452],{"class":84,"line":2804},[82,4453,372],{"class":96},[82,4455,4456],{"class":84,"line":2830},[82,4457,323],{"emptyLinePlaceholder":322},[82,4459,4460,4462,4464],{"class":84,"line":2835},[82,4461,89],{"class":88},[82,4463,385],{"class":92},[82,4465,388],{"class":96},[82,4467,4468],{"class":84,"line":2844},[82,4469,351],{"class":96},[82,4471,4472,4474,4476,4478,4480,4483],{"class":84,"line":3104},[82,4473,4046],{"class":96},[82,4475,413],{"class":88},[82,4477,4363],{"class":92},[82,4479,97],{"class":96},[82,4481,4482],{"class":316},"'-'",[82,4484,114],{"class":96},[82,4486,4487],{"class":84,"line":3114},[82,4488,323],{"emptyLinePlaceholder":322},[82,4490,4491,4493],{"class":84,"line":3123},[82,4492,3636],{"class":88},[82,4494,4495],{"class":96}," (operation)\n",[82,4497,4498],{"class":84,"line":3128},[82,4499,2424],{"class":96},[82,4501,4502,4504,4506,4508,4510,4512,4514,4516,4518,4520,4522,4524,4526,4528],{"class":84,"line":3156},[82,4503,3669],{"class":92},[82,4505,430],{"class":96},[82,4507,433],{"class":88},[82,4509,1039],{"class":92},[82,4511,97],{"class":96},[82,4513,488],{"class":441},[82,4515,106],{"class":96},[82,4517,535],{"class":441},[82,4519,410],{"class":96},[82,4521,433],{"class":88},[82,4523,454],{"class":316},[82,4525,457],{"class":441},[82,4527,460],{"class":316},[82,4529,463],{"class":96},[82,4531,4532],{"class":84,"line":3161},[82,4533,2440],{"class":96},[82,4535,4536],{"class":84,"line":3170},[82,4537,3660],{"class":88},[82,4539,4541],{"class":84,"line":4540},39,[82,4542,2424],{"class":96},[82,4544,4546,4548,4550,4552,4555,4557,4559],{"class":84,"line":4545},40,[82,4547,3669],{"class":92},[82,4549,430],{"class":96},[82,4551,433],{"class":88},[82,4553,4554],{"class":316}," \"unknown operation",[82,4556,457],{"class":441},[82,4558,460],{"class":316},[82,4560,463],{"class":96},[82,4562,4564],{"class":84,"line":4563},41,[82,4565,2440],{"class":96},[82,4567,4569],{"class":84,"line":4568},42,[82,4570,323],{"emptyLinePlaceholder":322},[82,4572,4574,4576,4578],{"class":84,"line":4573},43,[82,4575,357],{"class":88},[82,4577,565],{"class":441},[82,4579,463],{"class":96},[82,4581,4583],{"class":84,"line":4582},44,[82,4584,372],{"class":96},[16,4586,4587],{},[19,4588,577],{},[73,4590,4593],{"className":4591,"code":4592,"language":583,"meta":78},[581],"13\n",[24,4594,4592],{"__ignoreMap":78},[13,4596,4597],{},[16,4598,4599,4600,4602],{},"總結：複雜的函數指針類型應先使用 ",[24,4601,30],{}," 起別名，再作為參數類型或返回值類型。",[37,4604,4606],{"id":4605},"擴展示例4無捕獲-lambda-轉換為函數指針","擴展示例4：無捕獲 Lambda 轉換為函數指針",[16,4608,4609,3514],{},[19,4610,3513],{},[16,4612,4613],{},"Lambda 表達式可以在使用位置定義一個小型匿名函數。基本語法如下：",[73,4615,4617],{"className":75,"code":4616,"language":77,"meta":78,"style":78},"[捕获列表](参数列表) -> 返回值类型\n{\n    函数体\n};\n",[24,4618,4619,4627,4631,4636],{"__ignoreMap":78},[82,4620,4621,4624],{"class":84,"line":85},[82,4622,4623],{"class":96},"[捕获列表](参数列表) -> ",[82,4625,4626],{"class":88},"返回值类型\n",[82,4628,4629],{"class":84,"line":223},[82,4630,351],{"class":96},[82,4632,4633],{"class":84,"line":326},[82,4634,4635],{"class":96},"    函数体\n",[82,4637,4638],{"class":84,"line":348},[82,4639,2445],{"class":96},[16,4641,4642,4643,4646],{},"返回值類型通常可以由編譯器推導，因此 ",[24,4644,4645],{},"-> 返回值类型"," 經常省略。",[16,4648,4649,4650,4653],{},"當捕獲列表為空，也就是寫成 ",[24,4651,4652],{},"[]"," 時，Lambda 可以轉換為簽名兼容的普通函數指針。",[16,4655,4656],{},[19,4657,303],{},[73,4659,4661],{"className":75,"code":4660,"language":77,"meta":78,"style":78},"#include \u003Ciostream>\n\nusing Operation = int (*)(int, int);\n\nint calculate(int a, int b, Operation operation)\n{\n    return operation(a, b);\n}\n\nint main()\n{\n    Operation maximum = [](int a, int b) {\n        return a > b ? a : b;\n    };\n\n    std::cout \u003C\u003C calculate(12, 9, maximum) \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C calculate(4, 7, [](int a, int b) {\n        return a \u003C b ? a : b;\n    }) \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[24,4662,4663,4669,4673,4697,4701,4727,4731,4739,4743,4747,4755,4759,4782,4804,4809,4813,4845,4878,4897,4912,4916,4924],{"__ignoreMap":78},[82,4664,4665,4667],{"class":84,"line":85},[82,4666,313],{"class":88},[82,4668,317],{"class":316},[82,4670,4671],{"class":84,"line":223},[82,4672,323],{"emptyLinePlaceholder":322},[82,4674,4675,4677,4679,4681,4683,4685,4687,4689,4691,4693,4695],{"class":84,"line":326},[82,4676,30],{"class":88},[82,4678,3829],{"class":92},[82,4680,3368],{"class":88},[82,4682,2403],{"class":88},[82,4684,475],{"class":96},[82,4686,189],{"class":88},[82,4688,1294],{"class":96},[82,4690,89],{"class":88},[82,4692,106],{"class":96},[82,4694,89],{"class":88},[82,4696,114],{"class":96},[82,4698,4699],{"class":84,"line":348},[82,4700,323],{"emptyLinePlaceholder":322},[82,4702,4703,4705,4707,4709,4711,4713,4715,4717,4719,4721,4723,4725],{"class":84,"line":354},[82,4704,89],{"class":88},[82,4706,1270],{"class":92},[82,4708,97],{"class":96},[82,4710,89],{"class":88},[82,4712,103],{"class":102},[82,4714,106],{"class":96},[82,4716,89],{"class":88},[82,4718,111],{"class":102},[82,4720,106],{"class":96},[82,4722,3812],{"class":92},[82,4724,1039],{"class":102},[82,4726,345],{"class":96},[82,4728,4729],{"class":84,"line":369},[82,4730,351],{"class":96},[82,4732,4733,4735,4737],{"class":84,"line":375},[82,4734,357],{"class":88},[82,4736,1039],{"class":92},[82,4738,1316],{"class":96},[82,4740,4741],{"class":84,"line":380},[82,4742,372],{"class":96},[82,4744,4745],{"class":84,"line":391},[82,4746,323],{"emptyLinePlaceholder":322},[82,4748,4749,4751,4753],{"class":84,"line":396},[82,4750,89],{"class":88},[82,4752,385],{"class":92},[82,4754,388],{"class":96},[82,4756,4757],{"class":84,"line":419},[82,4758,351],{"class":96},[82,4760,4761,4764,4766,4769,4771,4773,4775,4777,4779],{"class":84,"line":424},[82,4762,4763],{"class":96},"    Operation maximum ",[82,4765,413],{"class":88},[82,4767,4768],{"class":96}," [](",[82,4770,89],{"class":88},[82,4772,103],{"class":102},[82,4774,106],{"class":96},[82,4776,89],{"class":88},[82,4778,111],{"class":102},[82,4780,4781],{"class":96},") {\n",[82,4783,4784,4786,4788,4791,4794,4797,4799,4802],{"class":84,"line":466},[82,4785,2429],{"class":88},[82,4787,360],{"class":96},[82,4789,4790],{"class":88},">",[82,4792,4793],{"class":96}," b ",[82,4795,4796],{"class":88},"?",[82,4798,360],{"class":96},[82,4800,4801],{"class":88},":",[82,4803,366],{"class":96},[82,4805,4806],{"class":84,"line":503},[82,4807,4808],{"class":96},"    };\n",[82,4810,4811],{"class":84,"line":508},[82,4812,323],{"emptyLinePlaceholder":322},[82,4814,4815,4817,4819,4821,4823,4825,4828,4830,4832,4835,4837,4839,4841,4843],{"class":84,"line":522},[82,4816,427],{"class":92},[82,4818,430],{"class":96},[82,4820,433],{"class":88},[82,4822,1270],{"class":92},[82,4824,97],{"class":96},[82,4826,4827],{"class":441},"12",[82,4829,106],{"class":96},[82,4831,2504],{"class":441},[82,4833,4834],{"class":96},", maximum) ",[82,4836,433],{"class":88},[82,4838,454],{"class":316},[82,4840,457],{"class":441},[82,4842,460],{"class":316},[82,4844,463],{"class":96},[82,4846,4847,4849,4851,4853,4855,4857,4859,4861,4863,4866,4868,4870,4872,4874,4876],{"class":84,"line":555},[82,4848,427],{"class":92},[82,4850,430],{"class":96},[82,4852,433],{"class":88},[82,4854,1270],{"class":92},[82,4856,97],{"class":96},[82,4858,779],{"class":441},[82,4860,106],{"class":96},[82,4862,535],{"class":441},[82,4864,4865],{"class":96},", [](",[82,4867,89],{"class":88},[82,4869,103],{"class":102},[82,4871,106],{"class":96},[82,4873,89],{"class":88},[82,4875,111],{"class":102},[82,4877,4781],{"class":96},[82,4879,4880,4882,4884,4887,4889,4891,4893,4895],{"class":84,"line":560},[82,4881,2429],{"class":88},[82,4883,360],{"class":96},[82,4885,4886],{"class":88},"\u003C",[82,4888,4793],{"class":96},[82,4890,4796],{"class":88},[82,4892,360],{"class":96},[82,4894,4801],{"class":88},[82,4896,366],{"class":96},[82,4898,4899,4902,4904,4906,4908,4910],{"class":84,"line":570},[82,4900,4901],{"class":96},"    }) ",[82,4903,433],{"class":88},[82,4905,454],{"class":316},[82,4907,457],{"class":441},[82,4909,460],{"class":316},[82,4911,463],{"class":96},[82,4913,4914],{"class":84,"line":832},[82,4915,323],{"emptyLinePlaceholder":322},[82,4917,4918,4920,4922],{"class":84,"line":837},[82,4919,357],{"class":88},[82,4921,565],{"class":441},[82,4923,463],{"class":96},[82,4925,4926],{"class":84,"line":843},[82,4927,372],{"class":96},[16,4929,4930],{},[19,4931,577],{},[73,4933,4936],{"className":4934,"code":4935,"language":583,"meta":78},[581],"12\n4\n",[24,4937,4935],{"__ignoreMap":78},[16,4939,4940],{},"有捕獲的 Lambda 需要在自身對象中保存捕獲的數據，因此不能轉換為普通函數指針：",[73,4942,4944],{"className":75,"code":4943,"language":77,"meta":78,"style":78},"int offset = 10;\n\n\u002F\u002F Operation operation = [offset](int a, int b) {\n\u002F\u002F     return a + b + offset;\n\u002F\u002F }; \u002F\u002F 错误：有捕获的 Lambda 不能转换为普通函数指针\n",[24,4945,4946,4960,4964,4969,4974],{"__ignoreMap":78},[82,4947,4948,4950,4953,4955,4958],{"class":84,"line":85},[82,4949,89],{"class":88},[82,4951,4952],{"class":96}," offset ",[82,4954,413],{"class":88},[82,4956,4957],{"class":441}," 10",[82,4959,463],{"class":96},[82,4961,4962],{"class":84,"line":223},[82,4963,323],{"emptyLinePlaceholder":322},[82,4965,4966],{"class":84,"line":326},[82,4967,4968],{"class":219},"\u002F\u002F Operation operation = [offset](int a, int b) {\n",[82,4970,4971],{"class":84,"line":348},[82,4972,4973],{"class":219},"\u002F\u002F     return a + b + offset;\n",[82,4975,4976,4979],{"class":84,"line":354},[82,4977,4978],{"class":219},"\u002F\u002F };",[82,4980,4981],{"class":219}," \u002F\u002F 错误：有捕获的 Lambda 不能转换为普通函数指针\n",[16,4983,4984],{},"有關捕獲列表和 Lambda 類型的完整解釋，見後面的 Lambda 表達式章節。",[37,4986,4988,4989,4992],{"id":4987},"擴展示例5使用-static_cast-選擇重載函數","擴展示例5：使用 ",[24,4990,4991],{},"static_cast"," 選擇重載函數",[16,4994,4995,4998],{},[24,4996,4997],{},"static_cast\u003C目标类型>(表达式)"," 是 C++ 的顯式類型轉換語法。取得重載函數地址時，可以用它明確告訴編譯器需要哪個重載版本。",[16,5000,5001,5004,5005,5008,5009,173],{},[24,5002,5003],{},"auto"," 會讓編譯器根據右側表達式推導變量類型。下面的 ",[24,5006,5007],{},"decimal_square"," 實際類型仍然是 ",[24,5010,5011],{},"double (*)(double)",[16,5013,5014],{},[19,5015,303],{},[73,5017,5019],{"className":75,"code":5018,"language":77,"meta":78,"style":78},"#include \u003Ciostream>\n\nint square(int value)\n{\n    return value * value;\n}\n\ndouble square(double value)\n{\n    return value * value;\n}\n\nint main()\n{\n    int (*integer_square)(int) = square;\n    auto decimal_square = static_cast\u003Cdouble (*)(double)>(square);\n\n    std::cout \u003C\u003C integer_square(5) \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C decimal_square(1.5) \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[24,5020,5021,5027,5031,5045,5049,5059,5063,5067,5081,5085,5095,5099,5103,5111,5115,5129,5154,5158,5184,5210,5214,5222],{"__ignoreMap":78},[82,5022,5023,5025],{"class":84,"line":85},[82,5024,313],{"class":88},[82,5026,317],{"class":316},[82,5028,5029],{"class":84,"line":223},[82,5030,323],{"emptyLinePlaceholder":322},[82,5032,5033,5035,5037,5039,5041,5043],{"class":84,"line":326},[82,5034,89],{"class":88},[82,5036,2086],{"class":92},[82,5038,97],{"class":96},[82,5040,89],{"class":88},[82,5042,1550],{"class":102},[82,5044,345],{"class":96},[82,5046,5047],{"class":84,"line":348},[82,5048,351],{"class":96},[82,5050,5051,5053,5055,5057],{"class":84,"line":354},[82,5052,357],{"class":88},[82,5054,1567],{"class":96},[82,5056,189],{"class":88},[82,5058,2109],{"class":96},[82,5060,5061],{"class":84,"line":369},[82,5062,372],{"class":96},[82,5064,5065],{"class":84,"line":375},[82,5066,323],{"emptyLinePlaceholder":322},[82,5068,5069,5071,5073,5075,5077,5079],{"class":84,"line":380},[82,5070,667],{"class":88},[82,5072,2086],{"class":92},[82,5074,97],{"class":96},[82,5076,667],{"class":88},[82,5078,1550],{"class":102},[82,5080,345],{"class":96},[82,5082,5083],{"class":84,"line":391},[82,5084,351],{"class":96},[82,5086,5087,5089,5091,5093],{"class":84,"line":396},[82,5088,357],{"class":88},[82,5090,1567],{"class":96},[82,5092,189],{"class":88},[82,5094,2109],{"class":96},[82,5096,5097],{"class":84,"line":419},[82,5098,372],{"class":96},[82,5100,5101],{"class":84,"line":424},[82,5102,323],{"emptyLinePlaceholder":322},[82,5104,5105,5107,5109],{"class":84,"line":466},[82,5106,89],{"class":88},[82,5108,385],{"class":92},[82,5110,388],{"class":96},[82,5112,5113],{"class":84,"line":503},[82,5114,351],{"class":96},[82,5116,5117,5119,5121,5123,5125,5127],{"class":84,"line":508},[82,5118,399],{"class":88},[82,5120,2172],{"class":96},[82,5122,89],{"class":88},[82,5124,410],{"class":96},[82,5126,413],{"class":88},[82,5128,2181],{"class":96},[82,5130,5131,5134,5137,5139,5142,5144,5146,5149,5151],{"class":84,"line":522},[82,5132,5133],{"class":88},"    auto",[82,5135,5136],{"class":96}," decimal_square ",[82,5138,413],{"class":88},[82,5140,5141],{"class":88}," static_cast\u003Cdouble",[82,5143,1505],{"class":96},[82,5145,667],{"class":88},[82,5147,5148],{"class":96},")",[82,5150,4790],{"class":88},[82,5152,5153],{"class":96},"(square);\n",[82,5155,5156],{"class":84,"line":555},[82,5157,323],{"emptyLinePlaceholder":322},[82,5159,5160,5162,5164,5166,5168,5170,5172,5174,5176,5178,5180,5182],{"class":84,"line":560},[82,5161,427],{"class":92},[82,5163,430],{"class":96},[82,5165,433],{"class":88},[82,5167,2211],{"class":92},[82,5169,97],{"class":96},[82,5171,447],{"class":441},[82,5173,410],{"class":96},[82,5175,433],{"class":88},[82,5177,454],{"class":316},[82,5179,457],{"class":441},[82,5181,460],{"class":316},[82,5183,463],{"class":96},[82,5185,5186,5188,5190,5192,5194,5196,5198,5200,5202,5204,5206,5208],{"class":84,"line":570},[82,5187,427],{"class":92},[82,5189,430],{"class":96},[82,5191,433],{"class":88},[82,5193,2238],{"class":92},[82,5195,97],{"class":96},[82,5197,2243],{"class":441},[82,5199,410],{"class":96},[82,5201,433],{"class":88},[82,5203,454],{"class":316},[82,5205,457],{"class":441},[82,5207,460],{"class":316},[82,5209,463],{"class":96},[82,5211,5212],{"class":84,"line":832},[82,5213,323],{"emptyLinePlaceholder":322},[82,5215,5216,5218,5220],{"class":84,"line":837},[82,5217,357],{"class":88},[82,5219,565],{"class":441},[82,5221,463],{"class":96},[82,5223,5224],{"class":84,"line":843},[82,5225,372],{"class":96},[16,5227,5228],{},[19,5229,577],{},[73,5231,5233],{"className":5232,"code":2279,"language":583,"meta":78},[581],[24,5234,2279],{"__ignoreMap":78},[13,5236,5237],{},[16,5238,5239,5240,5242],{},"總結：優先使用明確的函數指針類型選擇重載；上下文仍不明確時，再使用 ",[24,5241,4991],{},"。完整轉換規則見後面的 C++ 類型轉換章節。",[37,5244,5246,5247,5249],{"id":5245},"擴展示例6使用-stdfunction-保存不同的可調用對象","擴展示例6：使用 ",[24,5248,34],{}," 保存不同的可調用對象",[16,5251,5252,3514],{},[19,5253,3513],{},[16,5255,5256,5258,5259,5262],{},[24,5257,34],{}," 是標準庫 ",[24,5260,5261],{},"\u003Cfunctional>"," 頭文件提供的通用可調用對象包裝器。它的基本語法是：",[73,5264,5266],{"className":75,"code":5265,"language":77,"meta":78,"style":78},"std::function\u003C返回值类型(参数类型列表)>\n",[24,5267,5268],{"__ignoreMap":78},[82,5269,5270,5273,5276,5278,5281],{"class":84,"line":85},[82,5271,5272],{"class":92},"std",[82,5274,5275],{"class":96},"::function",[82,5277,4886],{"class":88},[82,5279,5280],{"class":96},"返回值类型(参数类型列表)",[82,5282,5283],{"class":88},">\n",[16,5285,5286,5287,5290,5291,1157,5293,5295],{},"例如，",[24,5288,5289],{},"std::function\u003Cint(int, int)>"," 可以保存一個“接收兩個 ",[24,5292,89],{},[24,5294,89],{},"”的可調用對象，包括普通函數、函數指針、匹配的 Lambda 和函數對象。",[16,5297,5298],{},[19,5299,303],{},[73,5301,5303],{"className":75,"code":5302,"language":77,"meta":78,"style":78},"#include \u003Cfunctional>\n#include \u003Ciostream>\n\nint add(int a, int b)\n{\n    return a + b;\n}\n\nint main()\n{\n    std::function\u003Cint(int, int)> operation = add;\n    std::cout \u003C\u003C operation(3, 4) \u003C\u003C \"\\n\";\n\n    int offset = 100;\n    operation = [offset](int a, int b) {\n        return a + b + offset;\n    };\n\n    std::cout \u003C\u003C operation(3, 4) \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[24,5304,5305,5312,5318,5322,5342,5346,5356,5360,5364,5372,5376,5404,5434,5438,5451,5477,5492,5496,5500,5530,5534,5542],{"__ignoreMap":78},[82,5306,5307,5309],{"class":84,"line":85},[82,5308,313],{"class":88},[82,5310,5311],{"class":316}," \u003Cfunctional>\n",[82,5313,5314,5316],{"class":84,"line":223},[82,5315,313],{"class":88},[82,5317,317],{"class":316},[82,5319,5320],{"class":84,"line":326},[82,5321,323],{"emptyLinePlaceholder":322},[82,5323,5324,5326,5328,5330,5332,5334,5336,5338,5340],{"class":84,"line":348},[82,5325,89],{"class":88},[82,5327,93],{"class":92},[82,5329,97],{"class":96},[82,5331,89],{"class":88},[82,5333,103],{"class":102},[82,5335,106],{"class":96},[82,5337,89],{"class":88},[82,5339,111],{"class":102},[82,5341,345],{"class":96},[82,5343,5344],{"class":84,"line":354},[82,5345,351],{"class":96},[82,5347,5348,5350,5352,5354],{"class":84,"line":369},[82,5349,357],{"class":88},[82,5351,360],{"class":96},[82,5353,363],{"class":88},[82,5355,366],{"class":96},[82,5357,5358],{"class":84,"line":375},[82,5359,372],{"class":96},[82,5361,5362],{"class":84,"line":380},[82,5363,323],{"emptyLinePlaceholder":322},[82,5365,5366,5368,5370],{"class":84,"line":391},[82,5367,89],{"class":88},[82,5369,385],{"class":92},[82,5371,388],{"class":96},[82,5373,5374],{"class":84,"line":396},[82,5375,351],{"class":96},[82,5377,5378,5380,5382,5385,5387,5389,5391,5393,5395,5397,5400,5402],{"class":84,"line":419},[82,5379,427],{"class":92},[82,5381,5275],{"class":96},[82,5383,5384],{"class":88},"\u003Cint",[82,5386,97],{"class":96},[82,5388,89],{"class":88},[82,5390,106],{"class":96},[82,5392,89],{"class":88},[82,5394,5148],{"class":96},[82,5396,4790],{"class":88},[82,5398,5399],{"class":96}," operation ",[82,5401,413],{"class":88},[82,5403,416],{"class":96},[82,5405,5406,5408,5410,5412,5414,5416,5418,5420,5422,5424,5426,5428,5430,5432],{"class":84,"line":424},[82,5407,427],{"class":92},[82,5409,430],{"class":96},[82,5411,433],{"class":88},[82,5413,1039],{"class":92},[82,5415,97],{"class":96},[82,5417,442],{"class":441},[82,5419,106],{"class":96},[82,5421,779],{"class":441},[82,5423,410],{"class":96},[82,5425,433],{"class":88},[82,5427,454],{"class":316},[82,5429,457],{"class":441},[82,5431,460],{"class":316},[82,5433,463],{"class":96},[82,5435,5436],{"class":84,"line":466},[82,5437,323],{"emptyLinePlaceholder":322},[82,5439,5440,5442,5444,5446,5449],{"class":84,"line":503},[82,5441,399],{"class":88},[82,5443,4952],{"class":96},[82,5445,413],{"class":88},[82,5447,5448],{"class":441}," 100",[82,5450,463],{"class":96},[82,5452,5453,5455,5457,5460,5463,5465,5467,5469,5471,5473,5475],{"class":84,"line":508},[82,5454,1068],{"class":96},[82,5456,413],{"class":88},[82,5458,5459],{"class":96}," [",[82,5461,5462],{"class":102},"offset",[82,5464,1925],{"class":96},[82,5466,89],{"class":88},[82,5468,103],{"class":102},[82,5470,106],{"class":96},[82,5472,89],{"class":88},[82,5474,111],{"class":102},[82,5476,4781],{"class":96},[82,5478,5479,5481,5483,5485,5487,5489],{"class":84,"line":522},[82,5480,2429],{"class":88},[82,5482,360],{"class":96},[82,5484,363],{"class":88},[82,5486,4793],{"class":96},[82,5488,363],{"class":88},[82,5490,5491],{"class":96}," offset;\n",[82,5493,5494],{"class":84,"line":555},[82,5495,4808],{"class":96},[82,5497,5498],{"class":84,"line":560},[82,5499,323],{"emptyLinePlaceholder":322},[82,5501,5502,5504,5506,5508,5510,5512,5514,5516,5518,5520,5522,5524,5526,5528],{"class":84,"line":570},[82,5503,427],{"class":92},[82,5505,430],{"class":96},[82,5507,433],{"class":88},[82,5509,1039],{"class":92},[82,5511,97],{"class":96},[82,5513,442],{"class":441},[82,5515,106],{"class":96},[82,5517,779],{"class":441},[82,5519,410],{"class":96},[82,5521,433],{"class":88},[82,5523,454],{"class":316},[82,5525,457],{"class":441},[82,5527,460],{"class":316},[82,5529,463],{"class":96},[82,5531,5532],{"class":84,"line":832},[82,5533,323],{"emptyLinePlaceholder":322},[82,5535,5536,5538,5540],{"class":84,"line":837},[82,5537,357],{"class":88},[82,5539,565],{"class":441},[82,5541,463],{"class":96},[82,5543,5544],{"class":84,"line":843},[82,5545,372],{"class":96},[16,5547,5548],{},[19,5549,577],{},[73,5551,5554],{"className":5552,"code":5553,"language":583,"meta":78},[581],"7\n107\n",[24,5555,5553],{"__ignoreMap":78},[16,5557,5558,5559,5561,5562,5564],{},"普通函數指針不能保存有捕獲的 Lambda，",[24,5560,34],{}," 可以。但 ",[24,5563,34],{}," 使用類型擦除實現統一包裝，存在額外的間接調用開銷，某些情況下還可能發生動態內存分配。因此，不應在所有場景中無條件用它替代函數指針。",[16,5566,5567,5568,3772],{},"完整用法和更多示例見後面的 ",[24,5569,34],{},[37,5571,5573,5574,5576],{"id":5572},"函數指針lambda-與-stdfunction-的選擇","函數指針、Lambda 與 ",[24,5575,34],{}," 的選擇",[5578,5579,5580,5597],"table",{},[5581,5582,5583],"thead",{},[5584,5585,5586,5591,5594],"tr",{},[5587,5588,5590],"th",{"align":5589},"left","需求",[5587,5592,5593],{"align":5589},"推薦方式",[5587,5595,5596],{"align":5589},"説明",[5598,5599,5600,5611,5624,5635,5647],"tbody",{},[5584,5601,5602,5606,5608],{},[5603,5604,5605],"td",{"align":5589},"保存普通函數或無捕獲 Lambda",[5603,5607,5],{"align":5589},[5603,5609,5610],{"align":5589},"類型簡單，沒有類型擦除開銷",[5584,5612,5613,5616,5621],{},[5603,5614,5615],{"align":5589},"保存有捕獲 Lambda",[5603,5617,5618,5619],{"align":5589},"Lambda 自身類型或 ",[24,5620,34],{},[5603,5622,5623],{"align":5589},"普通函數指針無法保存捕獲的數據",[5584,5625,5626,5629,5632],{},[5603,5627,5628],{"align":5589},"接收任意類型並且隻立即調用",[5603,5630,5631],{"align":5589},"模板參數",[5603,5633,5634],{"align":5589},"通常能保留具體類型並被編譯器優化",[5584,5636,5637,5640,5644],{},[5603,5638,5639],{"align":5589},"在成員變量中統一保存多種回調",[5603,5641,5642],{"align":5589},[24,5643,34],{},[5603,5645,5646],{"align":5589},"可以統一包裝多種可調用對象",[5584,5648,5649,5652,5654],{},[5603,5650,5651],{"align":5589},"調用指定對象的非靜態成員函數",[5603,5653,2287],{"align":5589},[5603,5655,5656],{"align":5589},"調用時必須同時提供對象",[16,5658,5659],{},"這裏的“模板參數”和“Lambda 自身類型”需要結合後面的模板及 Lambda 章節理解。初次學習只需記住：函數指針適合保存普通函數和無捕獲 Lambda；需求更復雜時，再考慮其他工具。",[10,5661,5662],{"id":5662},"常見錯誤",[37,5664,5666],{"id":5665},"錯誤1忘記變量名兩側的括號","錯誤1：忘記變量名兩側的括號",[73,5668,5670],{"className":75,"code":5669,"language":77,"meta":78,"style":78},"int (*operation)(int, int); \u002F\u002F 正确：函数指针\nint *operation(int, int);   \u002F\u002F 这是返回 int* 的函数声明\n",[24,5671,5672,5689],{"__ignoreMap":78},[82,5673,5674,5676,5678,5680,5682,5684,5686],{"class":84,"line":85},[82,5675,89],{"class":88},[82,5677,207],{"class":96},[82,5679,89],{"class":88},[82,5681,106],{"class":96},[82,5683,89],{"class":88},[82,5685,216],{"class":96},[82,5687,5688],{"class":219}," \u002F\u002F 正确：函数指针\n",[82,5690,5691,5693,5695,5697,5699,5701,5703,5705,5707],{"class":84,"line":223},[82,5692,89],{"class":88},[82,5694,228],{"class":88},[82,5696,231],{"class":92},[82,5698,97],{"class":96},[82,5700,89],{"class":88},[82,5702,106],{"class":96},[82,5704,89],{"class":88},[82,5706,216],{"class":96},[82,5708,5709],{"class":219},"   \u002F\u002F 这是返回 int* 的函数声明\n",[37,5711,5713],{"id":5712},"錯誤2函數類型不匹配","錯誤2：函數類型不匹配",[73,5715,5717],{"className":75,"code":5716,"language":77,"meta":78,"style":78},"void print(int value);\n\n\u002F\u002F int (*operation)(int, int) = print; \u002F\u002F 错误：返回值和参数列表不匹配\n",[24,5718,5719,5734,5738],{"__ignoreMap":78},[82,5720,5721,5723,5726,5728,5730,5732],{"class":84,"line":85},[82,5722,1540],{"class":88},[82,5724,5725],{"class":92}," print",[82,5727,97],{"class":96},[82,5729,89],{"class":88},[82,5731,1550],{"class":102},[82,5733,114],{"class":96},[82,5735,5736],{"class":84,"line":223},[82,5737,323],{"emptyLinePlaceholder":322},[82,5739,5740,5743],{"class":84,"line":326},[82,5741,5742],{"class":219},"\u002F\u002F int (*operation)(int, int) = print;",[82,5744,5745],{"class":219}," \u002F\u002F 错误：返回值和参数列表不匹配\n",[37,5747,5749],{"id":5748},"錯誤3調用空函數指針","錯誤3：調用空函數指針",[73,5751,5753],{"className":75,"code":5752,"language":77,"meta":78,"style":78},"void (*task)() = nullptr;\n\n\u002F\u002F task(); \u002F\u002F 错误：产生未定义行为\n\nif (task)\n{\n    task(); \u002F\u002F 正确：先检查再调用\n}\n",[24,5754,5755,5767,5771,5779,5783,5789,5793,5804],{"__ignoreMap":78},[82,5756,5757,5759,5761,5763,5765],{"class":84,"line":85},[82,5758,1540],{"class":88},[82,5760,3620],{"class":96},[82,5762,413],{"class":88},[82,5764,3625],{"class":441},[82,5766,463],{"class":96},[82,5768,5769],{"class":84,"line":223},[82,5770,323],{"emptyLinePlaceholder":322},[82,5772,5773,5776],{"class":84,"line":326},[82,5774,5775],{"class":219},"\u002F\u002F task();",[82,5777,5778],{"class":219}," \u002F\u002F 错误：产生未定义行为\n",[82,5780,5781],{"class":84,"line":348},[82,5782,323],{"emptyLinePlaceholder":322},[82,5784,5785,5787],{"class":84,"line":354},[82,5786,3532],{"class":88},[82,5788,3639],{"class":96},[82,5790,5791],{"class":84,"line":369},[82,5792,351],{"class":96},[82,5794,5795,5798,5801],{"class":84,"line":375},[82,5796,5797],{"class":92},"    task",[82,5799,5800],{"class":96},"();",[82,5802,5803],{"class":219}," \u002F\u002F 正确：先检查再调用\n",[82,5805,5806],{"class":84,"line":380},[82,5807,372],{"class":96},[37,5809,5811],{"id":5810},"錯誤4用普通函數指針保存非靜態成員函數","錯誤4：用普通函數指針保存非靜態成員函數",[73,5813,5815],{"className":75,"code":5814,"language":77,"meta":78,"style":78},"class Robot\n{\npublic:\n    void run();\n};\n\n\u002F\u002F void (*task)() = &Robot::run;     \u002F\u002F 错误\nvoid (Robot::*task)() = &Robot::run; \u002F\u002F 正确\n",[24,5816,5817,5824,5828,5832,5841,5845,5849,5857],{"__ignoreMap":78},[82,5818,5819,5821],{"class":84,"line":85},[82,5820,2383],{"class":88},[82,5822,5823],{"class":92}," Robot\n",[82,5825,5826],{"class":84,"line":223},[82,5827,351],{"class":96},[82,5829,5830],{"class":84,"line":326},[82,5831,2395],{"class":88},[82,5833,5834,5836,5839],{"class":84,"line":348},[82,5835,2968],{"class":88},[82,5837,5838],{"class":92}," run",[82,5840,3651],{"class":96},[82,5842,5843],{"class":84,"line":354},[82,5844,2445],{"class":96},[82,5846,5847],{"class":84,"line":369},[82,5848,323],{"emptyLinePlaceholder":322},[82,5850,5851,5854],{"class":84,"line":375},[82,5852,5853],{"class":219},"\u002F\u002F void (*task)() = &Robot::run;",[82,5855,5856],{"class":219},"     \u002F\u002F 错误\n",[82,5858,5859,5861,5863,5866,5868,5870,5873,5875,5877,5879,5882],{"class":84,"line":380},[82,5860,1540],{"class":88},[82,5862,475],{"class":96},[82,5864,5865],{"class":92},"Robot",[82,5867,2723],{"class":96},[82,5869,189],{"class":88},[82,5871,5872],{"class":96},"task)() ",[82,5874,413],{"class":88},[82,5876,516],{"class":88},[82,5878,5865],{"class":92},[82,5880,5881],{"class":96},"::run;",[82,5883,5884],{"class":219}," \u002F\u002F 正确\n",[37,5886,5888],{"id":5887},"錯誤5調用成員函數指針時沒有提供對象","錯誤5：調用成員函數指針時沒有提供對象",[73,5890,5892],{"className":75,"code":5891,"language":77,"meta":78,"style":78},"Robot robot;\nvoid (Robot::*task)() = &Robot::run;\n\n\u002F\u002F task();          \u002F\u002F 错误：没有对象\n(robot.*task)();    \u002F\u002F 正确\n",[24,5893,5894,5899,5922,5926,5933],{"__ignoreMap":78},[82,5895,5896],{"class":84,"line":85},[82,5897,5898],{"class":96},"Robot robot;\n",[82,5900,5901,5903,5905,5907,5909,5911,5913,5915,5917,5919],{"class":84,"line":223},[82,5902,1540],{"class":88},[82,5904,475],{"class":96},[82,5906,5865],{"class":92},[82,5908,2723],{"class":96},[82,5910,189],{"class":88},[82,5912,5872],{"class":96},[82,5914,413],{"class":88},[82,5916,516],{"class":88},[82,5918,5865],{"class":92},[82,5920,5921],{"class":96},"::run;\n",[82,5923,5924],{"class":84,"line":326},[82,5925,323],{"emptyLinePlaceholder":322},[82,5927,5928,5930],{"class":84,"line":348},[82,5929,5775],{"class":219},[82,5931,5932],{"class":219},"          \u002F\u002F 错误：没有对象\n",[82,5934,5935,5938],{"class":84,"line":354},[82,5936,5937],{"class":96},"(robot.*task)();",[82,5939,5940],{"class":219},"    \u002F\u002F 正确\n",[37,5942,5944],{"id":5943},"錯誤6把有捕獲的-lambda-轉換為函數指針","錯誤6：把有捕獲的 Lambda 轉換為函數指針",[73,5946,5948],{"className":75,"code":5947,"language":77,"meta":78,"style":78},"using Operation = int (*)(int);\nint offset = 10;\n\n\u002F\u002F Operation operation = [offset](int value) {\n\u002F\u002F     return value + offset;\n\u002F\u002F }; \u002F\u002F 错误\n",[24,5949,5950,5970,5982,5986,5991,5996],{"__ignoreMap":78},[82,5951,5952,5954,5956,5958,5960,5962,5964,5966,5968],{"class":84,"line":85},[82,5953,30],{"class":88},[82,5955,3829],{"class":92},[82,5957,3368],{"class":88},[82,5959,2403],{"class":88},[82,5961,475],{"class":96},[82,5963,189],{"class":88},[82,5965,1294],{"class":96},[82,5967,89],{"class":88},[82,5969,114],{"class":96},[82,5971,5972,5974,5976,5978,5980],{"class":84,"line":223},[82,5973,89],{"class":88},[82,5975,4952],{"class":96},[82,5977,413],{"class":88},[82,5979,4957],{"class":441},[82,5981,463],{"class":96},[82,5983,5984],{"class":84,"line":326},[82,5985,323],{"emptyLinePlaceholder":322},[82,5987,5988],{"class":84,"line":348},[82,5989,5990],{"class":219},"\u002F\u002F Operation operation = [offset](int value) {\n",[82,5992,5993],{"class":84,"line":354},[82,5994,5995],{"class":219},"\u002F\u002F     return value + offset;\n",[82,5997,5998,6000],{"class":84,"line":369},[82,5999,4978],{"class":219},[82,6001,6002],{"class":219}," \u002F\u002F 错误\n",[10,6004,6005],{"id":6005},"總結",[54,6007,6008,6011,6014,6017,6020,6023,6030,6035,6038,6044],{},[57,6009,6010],{},"函數指針保存函數地址，類型中包含函數的返回值和參數列表。",[57,6012,6013],{},"函數名通常可以直接賦給簽名兼容的函數指針。",[57,6015,6016],{},"函數指針可以用於回調、運行時選擇函數和函數表。",[57,6018,6019],{},"靜態成員函數可以使用普通函數指針。",[57,6021,6022],{},"非靜態成員函數需要成員函數指針，並且調用時必須提供對象。",[57,6024,6025,6026,3190,6028,173],{},"對象使用 ",[24,6027,2566],{},[24,6029,2347],{},[57,6031,6032,6034],{},[24,6033,3199],{}," 是成員函數指針類型的一部分。",[57,6036,6037],{},"可能為空的函數指針必須在調用前檢查。",[57,6039,6040,6041,6043],{},"現代 C++ 可以使用 ",[24,6042,30],{}," 簡化類型，用無捕獲 Lambda 創建函數指針。",[57,6045,6046,6047,173],{},"需要統一保存多種可調用對象時，可以使用 ",[24,6048,34],{},[6050,6051,6052],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":78,"searchDepth":223,"depth":223,"links":6054},[6055,6065,6073,6087,6095],{"id":5,"depth":223,"text":5,"children":6056},[6057,6058,6059,6060,6061,6062,6063,6064],{"id":39,"depth":326,"text":39},{"id":252,"depth":326,"text":253},{"id":597,"depth":326,"text":598},{"id":883,"depth":326,"text":884},{"id":1137,"depth":326,"text":1138},{"id":1435,"depth":326,"text":1436},{"id":1689,"depth":326,"text":1690},{"id":2053,"depth":326,"text":2054},{"id":2287,"depth":223,"text":2287,"children":6066},[6067,6068,6069,6070,6071],{"id":2290,"depth":326,"text":2290},{"id":2352,"depth":326,"text":2353},{"id":2545,"depth":326,"text":2546},{"id":2862,"depth":326,"text":2863},{"id":3195,"depth":326,"text":6072},"示例11：const 成員函數指針",{"id":3495,"depth":223,"text":3496,"children":6074},[6075,6077,6079,6080,6081,6083,6085],{"id":3504,"depth":326,"text":6076},"擴展示例1：使用 nullptr 表示空函數指針",{"id":3775,"depth":326,"text":6078},"擴展示例2：使用 using 給函數指針類型起別名",{"id":4215,"depth":326,"text":4216},{"id":4605,"depth":326,"text":4606},{"id":4987,"depth":326,"text":6082},"擴展示例5：使用 static_cast 選擇重載函數",{"id":5245,"depth":326,"text":6084},"擴展示例6：使用 std::function 保存不同的可調用對象",{"id":5572,"depth":326,"text":6086},"函數指針、Lambda 與 std::function 的選擇",{"id":5662,"depth":223,"text":5662,"children":6088},[6089,6090,6091,6092,6093,6094],{"id":5665,"depth":326,"text":5666},{"id":5712,"depth":326,"text":5713},{"id":5748,"depth":326,"text":5749},{"id":5810,"depth":326,"text":5811},{"id":5887,"depth":326,"text":5888},{"id":5943,"depth":326,"text":5944},{"id":6005,"depth":223,"text":6005},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1450-han-shu-zhi-zhen",0,"1450","2023-10-05","wiki\u002F2023-10-05-cplusplus-jiao-xue","zh-hk:2023-10-05-cplusplus-jiao-xue","\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md","wiki\u002F2023-10-05-Cplusplus教学\u002F1450-函数指针",false,null,"zh-HK","zh-hk",{},{"title":5,"description":78},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1450-han-shu-zhi-zhen","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1450-函数指针","xYTYeAjk035xdO2owAjkgAO6F8jD8_0qF_sJFmWePDw",[6116,6121,6126,6131,6136,6141,6146,6151,6156,6161,6166,6171,6176,6181,6186,6191,6196,6201,6206,6211,6216,6221,6222,6227,6232,6237,6242,6247,6252,6257,6262,6267,6272,6277,6282,6287,6292,6297,6302,6307,6311,6315,6319,6324,6329,6334,6339,6344,6349,6354,6359,6363,6368,6373,6378,6383,6388,6393,6398,6403,6408,6413,6418,6423,6428,6433,6438,6443,6448,6453,6458,6463,6468,6473,6478,6483,6488,6493,6498,6503,6508,6513,6518,6523],{"path":6117,"stem":6118,"title":6119,"date":6099,"chapterOrder":6120,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0100-C++开发环境搭建与测试","C++開發環境搭建與測試","0100",{"path":6122,"stem":6123,"title":6124,"date":6099,"chapterOrder":6125,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++基礎初識","0200",{"path":6127,"stem":6128,"title":6129,"date":6099,"chapterOrder":6130,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0300-shu-ju-lei-xing-yu-shu-ju-cun-fang","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0300-数据类型与数据存放","數據類型與數據存放","0300",{"path":6132,"stem":6133,"title":6134,"date":6099,"chapterOrder":6135,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","輸入輸出","0400",{"path":6137,"stem":6138,"title":6139,"date":6099,"chapterOrder":6140,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","運算符","0500",{"path":6142,"stem":6143,"title":6144,"date":6099,"chapterOrder":6145,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","程序流程結構","0600",{"path":6147,"stem":6148,"title":6149,"date":6099,"chapterOrder":6150,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","數組","0700",{"path":6152,"stem":6153,"title":6154,"date":6099,"chapterOrder":6155,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","函數與頭文件","0800",{"path":6157,"stem":6158,"title":6159,"date":6099,"chapterOrder":6160,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","指針","0900",{"path":6162,"stem":6163,"title":6164,"date":6099,"chapterOrder":6165,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","結構體與共用體","1000",{"path":6167,"stem":6168,"title":6169,"date":6099,"chapterOrder":6170,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1100-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1100-内存分区与生命周期","內存分區與生命週期","1100",{"path":6172,"stem":6173,"title":6174,"date":6099,"chapterOrder":6175,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","引用","1200",{"path":6177,"stem":6178,"title":6179,"date":6099,"chapterOrder":6180,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高","函數提高","1300",{"path":6182,"stem":6183,"title":6184,"date":6099,"chapterOrder":6185,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1350-ming-ming-kong-jian","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1350-命名空间","命名空間","1350",{"path":6187,"stem":6188,"title":6189,"date":6099,"chapterOrder":6190,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","封裝","1400-0100",{"path":6192,"stem":6193,"title":6194,"date":6099,"chapterOrder":6195,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0200-dui-xiang-chu-shi-hua-he-qing-li","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0200-对象初始化和清理","對象初始化和清理","1400-0200",{"path":6197,"stem":6198,"title":6199,"date":6099,"chapterOrder":6200,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0300-dui-xiang-mo-xing-yu-this-zhi-zhen","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0300-对象模型与this指针","對象模型與this指針","1400-0300",{"path":6202,"stem":6203,"title":6204,"date":6099,"chapterOrder":6205,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0400-you-yuan-yu-yun-suan-fu-zhong-zai","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0400-友元与运算符重载","友元與運算符重載","1400-0400",{"path":6207,"stem":6208,"title":6209,"date":6099,"chapterOrder":6210,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","繼承","1400-0500",{"path":6212,"stem":6213,"title":6214,"date":6099,"chapterOrder":6215,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","多態","1400-0600",{"path":6217,"stem":6218,"title":6219,"date":6099,"chapterOrder":6220,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","類和對象","1400",{"path":6096,"stem":6113,"title":5,"date":6099,"chapterOrder":6098,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},{"path":6223,"stem":6224,"title":6225,"date":6099,"chapterOrder":6226,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","文件操作","1500",{"path":6228,"stem":6229,"title":6230,"date":6099,"chapterOrder":6231,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","異常處理","1600",{"path":6233,"stem":6234,"title":6235,"date":6099,"chapterOrder":6236,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","模板","1700",{"path":6238,"stem":6239,"title":6240,"date":6099,"chapterOrder":6241,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","STL初識","1800-0100",{"path":6243,"stem":6244,"title":6245,"date":6099,"chapterOrder":6246,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0200-std-array","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0200-std-array","std::array","1800-0200",{"path":6248,"stem":6249,"title":6250,"date":6099,"chapterOrder":6251,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string容器","1800-0300",{"path":6253,"stem":6254,"title":6255,"date":6099,"chapterOrder":6256,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-rong-qi","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector容器","vector 容器","1800-0400",{"path":6258,"stem":6259,"title":6260,"date":6099,"chapterOrder":6261,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-deque-rong-qi","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-deque容器","deque 容器","1800-0500",{"path":6263,"stem":6264,"title":6265,"date":6099,"chapterOrder":6266,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-stack-rong-qi","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-stack容器","stack 容器","1800-0600",{"path":6268,"stem":6269,"title":6270,"date":6099,"chapterOrder":6271,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-queue-rong-qi","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-queue容器","queue 容器","1800-0700",{"path":6273,"stem":6274,"title":6275,"date":6099,"chapterOrder":6276,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-list-rong-qi","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-list容器","list 容器","1800-0800",{"path":6278,"stem":6279,"title":6280,"date":6099,"chapterOrder":6281,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0900-set-rong-qi","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0900-set容器","set \u002F multiset 容器","1800-0900",{"path":6283,"stem":6284,"title":6285,"date":6099,"chapterOrder":6286,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1000-map-rong-qi","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1000-map容器","map \u002F multimap 容器","1800-1000",{"path":6288,"stem":6289,"title":6290,"date":6099,"chapterOrder":6291,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1100-han-shu-dui-xiang-yu-wei-ci","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1100-函数对象与谓词","函數對象與謂詞","1800-1100",{"path":6293,"stem":6294,"title":6295,"date":6099,"chapterOrder":6296,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1200-chang-yong-suan-fa","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1200-常用算法","常用算法","1800-1200",{"path":6298,"stem":6299,"title":6300,"date":6099,"chapterOrder":6301,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","STL提高編程","1800",{"path":6303,"stem":6304,"title":6305,"date":6099,"chapterOrder":6306,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++類型轉換","1900",{"path":6308,"stem":6309,"title":5003,"date":6099,"chapterOrder":6310,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","2000-0100",{"path":6312,"stem":6313,"title":26,"date":6099,"chapterOrder":6314,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","2000-0200",{"path":6316,"stem":6317,"title":30,"date":6099,"chapterOrder":6318,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","2000-0300",{"path":6320,"stem":6321,"title":6322,"date":6099,"chapterOrder":6323,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0400-enum-class","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0400-enum-class","enum class","2000-0400",{"path":6325,"stem":6326,"title":6327,"date":6099,"chapterOrder":6328,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0500-fan-wei-for-xun-huan","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0500-范围for循环","範圍 for 循環","2000-0500",{"path":6330,"stem":6331,"title":6332,"date":6099,"chapterOrder":6333,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","結構化綁定","2000-0600",{"path":6335,"stem":6336,"title":6337,"date":6099,"chapterOrder":6338,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","constexpr","2000-0700",{"path":6340,"stem":6341,"title":6342,"date":6099,"chapterOrder":6343,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII","2000-0800",{"path":6345,"stem":6346,"title":6347,"date":6099,"chapterOrder":6348,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","智能指針","2000-0900",{"path":6350,"stem":6351,"title":6352,"date":6099,"chapterOrder":6353,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义","右值引用和移動語義","2000-1000",{"path":6355,"stem":6356,"title":6357,"date":6099,"chapterOrder":6358,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","Lambda 表達式","2000-1100",{"path":6360,"stem":6361,"title":34,"date":6099,"chapterOrder":6362,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","2000-1200",{"path":6364,"stem":6365,"title":6366,"date":6099,"chapterOrder":6367,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","std::bind","2000-1300",{"path":6369,"stem":6370,"title":6371,"date":6099,"chapterOrder":6372,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional","std::optional","2000-1400",{"path":6374,"stem":6375,"title":6376,"date":6099,"chapterOrder":6377,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1500-std-variant","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1500-std-variant","std::variant","2000-1500",{"path":6379,"stem":6380,"title":6381,"date":6099,"chapterOrder":6382,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1600-std-span","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1600-std-span","std::span","2000-1600",{"path":6384,"stem":6385,"title":6386,"date":6099,"chapterOrder":6387,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1700-std-format-print","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1700-std-format-print","std::format \u002F std::print","2000-1700",{"path":6389,"stem":6390,"title":6391,"date":6099,"chapterOrder":6392,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1800-std-chrono","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1800-std-chrono","std::chrono","2000-1800",{"path":6394,"stem":6395,"title":6396,"date":6099,"chapterOrder":6397,"chapterDepth":223,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0100-std-thread","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0100-std-thread","std::thread 與 join","2000-1900-0100",{"path":6399,"stem":6400,"title":6401,"date":6099,"chapterOrder":6402,"chapterDepth":223,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-mutex-lock-guard","mutex 與 lock_guard","2000-1900-0200",{"path":6404,"stem":6405,"title":6406,"date":6099,"chapterOrder":6407,"chapterDepth":223,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0300-std-atomic","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0300-std-atomic","std::atomic","2000-1900-0300",{"path":6409,"stem":6410,"title":6411,"date":6099,"chapterOrder":6412,"chapterDepth":223,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0400-condition-variable","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0400-condition-variable","condition_variable","2000-1900-0400",{"path":6414,"stem":6415,"title":6416,"date":6099,"chapterOrder":6417,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bian-cheng","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发编程","併發編程","2000-1900",{"path":6419,"stem":6420,"title":6421,"date":6099,"chapterOrder":6422,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2000-std-filesystem","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2000-std-filesystem","std::filesystem","2000-2000",{"path":6424,"stem":6425,"title":6426,"date":6099,"chapterOrder":6427,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","modules 簡介","2000-2100",{"path":6429,"stem":6430,"title":6431,"date":6099,"chapterOrder":6432,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","現代C++","2000",{"path":6434,"stem":6435,"title":6436,"date":6099,"chapterOrder":6437,"chapterDepth":223,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0100-ding-shi-qi-yu-yi-bu-io","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0100-定时器与异步IO","定時器與異步 IO","2100-0100-0100",{"path":6439,"stem":6440,"title":6441,"date":6099,"chapterOrder":6442,"chapterDepth":223,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0200-boost-asio-ji-chu","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0200-Boost.Asio基础","Boost.Asio 基礎","2100-0100-0200",{"path":6444,"stem":6445,"title":6446,"date":6099,"chapterOrder":6447,"chapterDepth":223,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0300-chuan-kou-tong-xin","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0300-串口通信","串口通信","2100-0100-0300",{"path":6449,"stem":6450,"title":6451,"date":6099,"chapterOrder":6452,"chapterDepth":223,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0400-tcp-tong-xin","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0400-TCP通信","TCP 通信","2100-0100-0400",{"path":6454,"stem":6455,"title":6456,"date":6099,"chapterOrder":6457,"chapterDepth":223,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0500-udp-tong-xin","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0500-UDP通信","UDP 通信","2100-0100-0500",{"path":6459,"stem":6460,"title":6461,"date":6099,"chapterOrder":6462,"chapterDepth":223,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0600-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0600-机器人工程写法与ROS2集成","機器人工程寫法與 ROS2 集成","2100-0100-0600",{"path":6464,"stem":6465,"title":6466,"date":6099,"chapterOrder":6467,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","Boost.Asio異步IO庫","2100-0100",{"path":6469,"stem":6470,"title":6471,"date":6099,"chapterOrder":6472,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0200-eigen-xian-xing-dai-shu-ku","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0200-Eigen线性代数库","Eigen線性代數庫","2100-0200",{"path":6474,"stem":6475,"title":6476,"date":6099,"chapterOrder":6477,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0300-opencv-ji-suan-ji-shi-jue-ku","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0300-OpenCV计算机视觉库","OpenCV計算機視覺庫","2100-0300",{"path":6479,"stem":6480,"title":6481,"date":6099,"chapterOrder":6482,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0400-pcl-dian-yun-ku","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0400-PCL点云库","PCL點雲庫","2100-0400",{"path":6484,"stem":6485,"title":6486,"date":6099,"chapterOrder":6487,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0500-sophus-li-qun-li-dai-shu-ku","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0500-Sophus李群李代数库","Sophus 李羣李代數庫","2100-0500",{"path":6489,"stem":6490,"title":6491,"date":6099,"chapterOrder":6492,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","常用庫學習","2100",{"path":6494,"stem":6495,"title":6496,"date":6099,"chapterOrder":6497,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0100-cmakepresets-yu-gou-jian-an-zhuang","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0100-CMakePresets与构建安装","CMakePresets與構建安裝","2200-0100",{"path":6499,"stem":6500,"title":6501,"date":6099,"chapterOrder":6502,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项","頂層CMake與公共編譯選項","2200-0200",{"path":6504,"stem":6505,"title":6506,"date":6099,"chapterOrder":6507,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0300-src-yu-lib-mo-kuai-cmake-xiang-jie","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0300-src与lib模块CMake详解","src與lib模塊CMake詳解","2200-0300",{"path":6509,"stem":6510,"title":6511,"date":6099,"chapterOrder":6512,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法","第三方庫依賴寫法","2200-0400",{"path":6514,"stem":6515,"title":6516,"date":6099,"chapterOrder":6517,"chapterDepth":85,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0500-mu-ban-kuo-zhan-yu-chang-jian-wen-ti","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0500-模板扩展与常见问题","模板擴展與常見問題","2200-0500",{"path":6519,"stem":6520,"title":6521,"date":6099,"chapterOrder":6522,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":6106},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake工程模板","2200",{"path":6102,"stem":6524,"title":6525,"date":6099,"chapterOrder":6107,"chapterDepth":6097,"docKey":6101,"docRoot":6102,"docTitle":6103,"isWikiDoc":322,"isWikiIndex":322},"_i18n\u002Fzh-hk\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++教程",{"variants":6527},[6528,6531,6534,6535,6538],{"path":6529,"localeSlug":6530,"i18nKey":6105},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1450-han-shu-zhi-zhen","en-us",{"path":6532,"localeSlug":6533,"i18nKey":6105},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1450-han-shu-zhi-zhen","zh-hant",{"path":6096,"localeSlug":6109,"i18nKey":6105},{"path":6536,"localeSlug":6537,"i18nKey":6105},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1450-han-shu-zhi-zhen","zh-tw",{"path":6539,"localeSlug":6540,"i18nKey":6105},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1450-han-shu-zhi-zhen","zh-cn",[6529,6112,6532,6112,6096,6112,6536,6112,6539,6112],1784727857242]