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