美文网首页C++
C++ 函数指针和函数类型

C++ 函数指针和函数类型

作者: georgeguo | 来源:发表于2018-04-12 16:23 被阅读178次

函数指针和函数类型

  • 函数指针指向的是函数而非对象。和其他指针类型一样,函数指针指向某种特定类型。
  • 函数类型由它的返回值和参数类型决定,与函数名无关。
bool length_compare(const string &, const string &);

上述函数类型是:bool (const string &, const string &);
上述函数指针pf:bool (*pf)(const string &, const string &);

使用函数指针

  • 当把函数名作为一个值使用时,该函数自动的转换成指针,如:
pf = length_compare <=>等价于pf = &length_compare

函数指针形参

  • 函数类型不能定义为形参,但是形参可以是指向函数的指针;

  • 函数作为实参使用时,会自动的转换成函数指针;

    typedef bool Func(const string &, const string &) // Func是函数类型;
    typedef bool (*FuncP)(const string &, const string &) // FuncP是函数指针类型;
    
    typedef decltype(length_compare) Func2  // Func2是函数类型;
    typedef decltype(length_compare) *Func2P // Func2是函数指针类型;
    

    注意decltype(length_compare)返回的是函数类型,而不是函数指针类型;

using FTtype = int(int,int); //函数类型
typedef int (*pf)(int, int); //函数指针

int func(int a, int b){return a+b;}
void print(int a, int b, FTtype fn){
    // 编译器将其隐式转化成函数指针
    cout << fn(a,b) << endl;
}

int main()
{
    print(1,2,func);
    cout << typeid(FTtype).name() << endl;  // FiiiE
    cout << typeid(func).name() << endl;    // FiiiE
    cout << typeid(decltype(func)).name() << endl;  // FiiiE
    cout << typeid(pf).name() << endl;  // PFiiiE
    return 0;
}
  • 下面两个声明语句是同一个函数,因为编译器会自动的将FTtype 转换成函数指针类型。
    void print(int a, int b, FTtype  fn);
    void print(int a, int b, pf fn);
    

返回指向函数的指针

虽然不能返回一个函数,但是能返回执行函数类型的指针。和函数参数不同,编译器不会自动地将函数返回类型当作指针类型处理,必须显示的将返回类型指定为指针。如:

using F = int(int*, int);
using PF = int(*)(int*,int);
F  f1(int);    //错误: F是函数类型
PF  f1(int);   //正确: PF是函数指针类型

f1也可以写出下面两种形式:

int (*f1(int))(int*, int);
auto f1(int)->int(*)(int*, int);

相关文章

  • C++ 函数指针和函数类型

    函数指针和函数类型 函数指针指向的是函数而非对象。和其他指针类型一样,函数指针指向某种特定类型。 函数类型由它的返...

  • C++函数指针和Swift的函数对象

    C++函数指针和Swift的函数对象 在C++中学习函数指针式非常痛苦的事情,而在Swift里面学习函数指针则是非...

  • 3月7日复习C++

    指针函数和函数指针 指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 *...

  • C++类 --- 类型转换构造函数、运算符,类成员指针

    今天呢,和大家聊一聊C++中的类型转换构造函数、类型转换运算符(函数)以及类成员指针。简单的来讲,类型转换构造函数...

  • c++ 指针

    原文地址摘要:这篇文章详细介绍C/C++的函数指针,请先看以下几个主题:使用函数指针定义新的类型、使用函数指针作为...

  • 010 函数指针

    函数指针指向的是函数而非对象。和其他指针一样,函数指针指向某种特定类型。函数的类型由它的返回类型和形参类型共同决定...

  • C++11 中的std::function和std::bind

    1. 可调用对象 可调用对象有一下几种定义: 是一个函数指针,参考 C++ 函数指针和函数类型; 是一个具有ope...

  • 18/4 lambda表达式

    比较函数指针、函数符和lambda函数 cout_if() 在c++中对于接受函数指针或函数符的函数,可使用匿名函...

  • C++学习笔记(与安卓平台无关)

    C++语法 const指针 template定义 定义函数时参数类型的选择 函数参数可以传值,传引用或者传指针,如...

  • NDK启航篇——C语言基础(函数指针)

    昨天介绍了指针类型、空指针、指针运算,今天来写一下函数指针 函数指针 函数指针的定义:函数的返回值类型(函数指针的...

网友评论

    本文标题:C++ 函数指针和函数类型

    本文链接:https://www.haomeiwen.com/subject/iicfkftx.html