CPP {函数,函数指针(函数变量)}
函数指针(函数变量)
定义
string F0( Double){ return "1";}
int main(){
auto F1 = []( Double)->string{ return "1";};
string (F2)(Double);
string (*F3)(Double);
std::function<string(Double)> F4;
DE_( typeid(&F0).name()); // "PFNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN19___Supimo_Algorithm6DoubleEE"
DE_( typeid(F0).name()); // "FNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN19___Supimo_Algorithm6DoubleEE"
DE_( typeid(F1).name()); // "Z8___SolveiEUlN19___Supimo_Algorithm6DoubleEE_"
DE_( typeid(F2).name()); // "FNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN19___Supimo_Algorithm6DoubleEE"
DE_( typeid(F3).name()); // "PFNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN19___Supimo_Algorithm6DoubleEE"
DE_( typeid(F4).name()); // "St8functionIFNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN19___Supimo_Algorithm6DoubleEEE"
}
虽然F2, F0
的类型是一样的, 但是 很奇怪, F2 = F0
语法是错误的! 只有F3 = F0, F3 = &F0, F4 = F0, F4 = &F0
这些写法是正确的(效果是一样的);
推荐使用std::function
来存储函数变量, 因为函数指针语法比较老了;
函数
性质
#聲明和實現分開的好處#
class ST{
void f(){} // 無法訪問到`data`;
}
T data;
void ST::f(){ 可以訪問到`data`;}
總之 就是自上而下, 當前函數實現的 所有上面的代碼 都可以訪問到;
@DELI;
函数的类型
int M( int, int){ return 1;}
The type of M
is int(int,int)
, its Type-Name is FiiiE
@DELI;
函数地址;
cout<< (void *)&Func;
@DELI;
函数指针;
int M( int, int){ return 1;}
auto p = &M;
where the type of the Function-Pointer p
is int(*)(int, int)
, its Type-Name is PFiiiE
;
函数名可隐式转换为函数指针
using T = int (*)(int, int);
then T p = M
is equivalent to T p = &M
;