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

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

1)函数

2)函数指针

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

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(, ) << endl; //输出3
function<int(int, int)> f3 = [](int a, int b) {return add(a, b); }; //正确:使用lambda表达式来指定带有两个参数的add()函数
cout << f3(, ) << endl; //输出7 return ;
}

解决:

  • 使用函数指针来指向某个重载函数
  • 使用lambda表达式来指向某个重载函数

function类型(c++11)的更多相关文章

  1. 引用类型-Function类型

    Function类型 定义函数的三种方式: 1.函数声明 function sum(num1,num2){ return num1 +num2; } 2.函数表达式 var sum = functio ...

  2. 【笔记】js Function类型 内部方法callee

    运用function实现阶乘 以往的做法是如下的 function factorial(num){ if(num <= 1){ return 1; }else{ return num * fac ...

  3. Function类型

    1.每个函数都是Function类型的,和其他引用类型一样都具有属性和方法.函数也是对象,因此函数实际上是一个指向函数对象的指针. 函数声明语法定义: 方法1: function sum(num1,n ...

  4. JavaScript笔记——引用类型之Object类型和Function类型

    <JavaScript高级程序设计>中介绍的几种JavaScript的引用类型,本文只记了Object跟Function类型 Object类型 创建对象 var person = new ...

  5. String类型,Function类型

    1.String类型:  1)创建String对象:    var str=new String(s);    String(s);    参数:参数 s 是要存储在 String 对象中的值或转换成 ...

  6. JavaScript高级 Function类型

    ·    Function类型 (属于引用类型) 1.JS中,有的函数均是对象,这个一个非常有特点的地方.它既然是对象,那么它的构造函数是谁呢?就是Function.(例如:function Pers ...

  7. 浅析JavaScript之Function类型

    JavaScript中的函数实际上是对象,每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上只是指向函数对象的指针,保存函数在堆内存中的地 ...

  8. 笔记——Function类型 及其 call、apply方法

    每个函数都是Function类型的实例.函数有三种定义方式和两个内部属性arguments和this. 同时函数也是对象,也有属性和方法.本篇主要其call()和apply()方法 属性 length ...

  9. 引用类型之Function类型

    Function类型 ECMAScript中最有意思的就是函数了,有意思的根源,在于函数实际上是对象.每个函数都是Function的实例,具有属性和方法.而重要的一点是,函数名,不过是指向函数的指针, ...

随机推荐

  1. FortiGate密码恢复

    1.需求 1.若设备的密码忘记,需要用配置线进行密码恢复: 2.密码恢复需要重启设备,并在设备的底层菜单界面上操作,会造成网络中断,请在方便断网时操作: 3.密码恢复后配置不会改变. 2.操作步骤 1 ...

  2. 《centos系列》git的安装

    centos 6.5安装git 1.安装编译git时需要的包 # yum install curl-devel expat-devel gettext-devel openssl-devel zlib ...

  3. 解决python3 UnicodeEncodeError: 'gbk' codec can't encode character '\xXX' in position XX(转)

    原文地址:https://www.cnblogs.com/feng18/p/5646925.html 从网上抓了一些字节流,想打印出来结果发生了一下错误: UnicodeEncodeError: 'g ...

  4. rbac 权限分配, 基于formset实现,批量增加

    这里需要两个知识点: - formset - 自动发现项目中的URL1. 什么是formset: Django中 form组件 或 ModelForm组件,用于做一个表单的验证. 接收前端form表单 ...

  5. localstorage和vue结合使用2

    html <template> <div class="hello"> <div class="page-top"> < ...

  6. java的eclipse的使用

    1下载eclipse地址:www.eclipse.org/downloads/ 解压就可安装 注意: 这可能你是没有安装java运行环境(jre或jdk) 直接www.java.com,下载就行 下一 ...

  7. Numpy 基础运算

    numpy的几种运算 1.一维矩阵运算 >>> import numpy as np >>> a=np.array([10,20,30,40]) # array([ ...

  8. 小明A+B

    /* 小明今年3岁了, 现在他已经能够认识100以内的非负整数, 并且能够进行100以内的非负整数的加法计算. 对于大于等于100的整数, 小明仅保留该数的最后两位进行计算, 如果计算结果大于等于10 ...

  9. 简单使用DESeq做差异分析

    简单使用DESeq做差异分析 Posted: 五月 06, 2017  Under: Transcriptomics  By Kai  no Comments DESeq这个R包主要针对count d ...

  10. Mac下配置域名和网站测试环境

    一.在 /etc/hosts   下配置相关域名 1, control+space  打开spotlight, 搜索“terminal” 2, 打开Terminal 3, 在terminal界面中输入 ...