c++简记 – 函数指针
函数
函数是具有别名的代码块
函数不能被值传递进函数 但可通过引用传递被函数调用
函数的身份决定于 参数类型
函数指针
函数指针通常用于填充调用函数的函数引用类型参数
函数指针必须与函数类型严格匹配
函数类型决定于函数的返回类型和参数类型
故而对于重载函数 的指针
与具有重载的函数的某一项重载严格匹配<返回和参数类型>即可
函数指针的特点
1、函数指针对解引用符和取址符不敏感(可选择的不像内置类型指针有严格的区分)
ex1:
bool (*func) (int&,int&);//定义一个函数指针func(指向返回值为bool类型的函数)
bool fp(int&,int&);
//在向函数指针赋值时函数名加&或不加&等价<都转化为函数指针>
fp=func fp=&func
ex2:
bool (*func) (int&,int&);//定义一个函数指针func(指向返回值为bool类型的函数)
bool fp(int&,int&);
//使用函数指针调用函数时加*或者不加*等价<都转化为函数>
bool=fp(1,2); bool=(*fp)(1,2);
ex3:
函数参数列表中的函数自动转化为函数指针
2、可用nullptr初始化 <不指向任何函数>
3、函数形参和decltype的应用 <表达式的简化>
3.a、函数指针类型的形参表现为函数 但实际是引用传递
bool get_value( int , int funcName(param1,parameter2) )
funcName看似函数 实际调用函数时填充的应当是函数指针
------------------------( 见特点<1>的ex3 )
参数列表中的函数类型较长 可用其他方法简化
int funcName(param1,parameter2);
decltype(funcName) fun;//注意fun此时是和funcName一样的函数类型
//引用传递⬇
bool get_value( int , fun);
bool get_value( int , fun*);//等价(见特点<1>的ex3
)
3.b、函数返回值为函数指针
bool (*func(int))(int&,int&);
复杂表达式由内而外分析
func是个函数、返回指针,指针部分带有参数和返回值
-->func 是个返回值为 函数指针 的 函数