zoukankan      html  css  js  c++  java
  • function类型(c++11)

    1.c++五大可调用的对象

      可调用的对象常常作为泛型算法的实参

    1)函数

    2)函数指针

    • 函数名其实也是函数指针,只不过函数名是一个常量指针,它的值不能改变,只能指向该函数,不能改变它的值让它指向别的函数
    void fun1(int a)
    {
        cout << a << endl;
    }
    
    void fun2(int a)
    {
        cout << a+10 << endl;
    }
    
    
    int main()
    {
        void(*f)(int);    //f是一个函数指针
        f = fun1;    //将f指向函数fun1()
        f(6);        //输出6
        f = fun2;    //将f指向函数fun2()
        f(6);        //输出:16
    
        (*fun1)(6);        //fun1其实也是函数指针,并且是一个常量指针,它只能指向函数fun1(),不能让它指向别的函数
        fun1 = fun2;    //编译错误:不可以修改常量指针的指向(值)
    
        return 0;
    }

    3)lambda表达式

    4)bind对象

    5)重载了opeartor()运算符的类

    2.可调用的对象的调用形式

    int(int, int)    //此调用形式表示:接受两个int,返回一个int

    3.function类型(c++11)

    1)function类型可以将调用形式相同的可调用对象统一成一种类型

    2)把可调用对象定义成function类型后,可以直接使用function类型来“简化”调用

    3)不能直接将重载的函数名存入function类型的对象中

    int add(int a, int b)
    {
        return a + b;
    }
    
    int add(int a, int b, string s)
    {
        return a;
    }
    
    int main()
    {
        function<int(int, int)> f1 = add;    //编译错误,编译器不知道是哪个add
        int(*fun)(int, int) = add;        
        function<int(int, int)> f2 = fun;    //正确:函数指针fun指向带有两个参数的add()函数
        cout << f2(1, 2) << endl;    //输出3
        function<int(int, int)> f3 = [](int a, int b) {return add(a, b); };    //正确:使用lambda表达式来指定带有两个参数的add()函数
        cout << f3(3, 4) << endl;    //输出7
    
        return 0;
    }

    解决:

    • 使用函数指针来指向某个重载函数
    • 使用lambda表达式来指向某个重载函数
  • 相关阅读:
    drf的模型基表与10个单群操作方法
    drf的序列化组件
    drf之请求模块,渲染模块,解析模块,响应模块,异常模块
    drf之接口与接口规范
    MongoDB C# Demo
    如何用Dome4j(2.2.1)创建Xml
    Map、Set的基本概括
    如何自定义xml文件
    HashMap和HashTable的理解与区别
    装箱 拆箱
  • 原文地址:https://www.cnblogs.com/Joezzz/p/9733318.html
Copyright © 2011-2022 走看看