function类型(c++11)

摘要:
1.c++的五个可调用对象经常被用作通用算法的实际参数。1) 函数2)函数指针函数名也是函数指针,但函数名是常量指针,其值不能更改。它只能指向此函数,并且不能更改其值,以使其指向其他函数void fun1(int a){cout<<a<<endl;}void fun2(int a〕{cout<<a+10<<end1;}int main(){void(*f)(int);//f是函数指针f=fu

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

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

1)函数

2)函数指针

function类型(c++11)第1张

  • 函数名其实也是函数指针,只不过函数名是一个常量指针,它的值不能改变,只能指向该函数,不能改变它的值让它指向别的函数
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类型来“简化”调用

function类型(c++11)第2张

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表达式来指向某个重载函数

免责声明:文章转载自《function类型(c++11)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇分享8款办公或开发中简单好用的小工具[python 基础]python装饰器(一)添加functools获取原函数信息以及functools.partial分析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

串口编程-termios编程

linux使用terminfo数据库来描述终端能力以及调用对应功能的方法。 termios简述 POSIX定义了完成终端I/O的标准方法:termios函数族 #include <termios.h> #include <unistd.h> struct termios { tcflag_t c_iflag; tc...

解析 C# 7中的元组类型(ValueTuple)

System.Tuple 类型是在.NET 4.0中引入的,但是有两个明显的缺点:(1) Tuple 类型是引用类型。(2) 没有构造函数支持。 为了解决这些问题,C# 7 引入了新的语言功能以及新的类型(*)。 现在,如果您需要从函数中返回两个值的合并结果,或者把两个值合并到一个哈希表中,可以使用System.ValueTuple类型并使用一个精短的语法...

Math.radom()函数获取随机数组

Math.radom()函数获取随机数组   Math.radom()函数返回的是大于或等于0.0且小于1之间随机的double数。 利用Math.radom()函数获取随机整数数组的方法: 1 int[] source = new int[20]; 2 3 //获取随机数组 4 int i=0; 5...

c语言中的原子操作

参考文章:https://blog.csdn.net/yikai2009/article/details/8650221 1. 原子操作:原子操作指的是在执行过程中不会被别的代码所中断的操作.。分为 位 和 整型变量 两类原子操作。 typedef struct { volatile int counter; } atomic_t; 2. 原子操作函数 分...

《Qt数据类型》--QByteArray,QString,int,hex之间的转化

对于QString和QByteArray,他们都有一个toInt的静态函数,QString::toInt()是根据string的字面值转化为int类型,比如string:"123",转化为int类型就变为int:123。而对于QByteArray::toInt()是将16进制的数据转化为10进制之后得到int类型,比如byte:0xf8-->dec:...

Sort函数(C++)

原创 C++中内置了sor函数供排序,函数原型为: #include<algorithm>  //所属头文件 sort(begin,end,cmp); //其中cmp参数可以省略,省略后默认升序排序 如果要进行降序排序,需要另外定义cmp函数: bool cmp(int a,int b){ //降序排序 return...