CPP {函数,函数指针(函数变量)}

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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值