【c++ primer, 5e】函数指针
简单的示例:
#include <iostream>
using namespace std;
int sum(int x, int y)
{
return x + y;
}
int main()
{
cout << sum(, ) << endl;
int (*pf)(int, int); // 未初始化
pf = sum;
cout << pf(, ) << endl;
/* output:
3
7
*/
return ;
}
遇到重载的情况,编译器通过指针类型精确匹配函数。
#include <iostream>
using namespace std;
int sum(int x, int y)
{
return x + y;
}
int sum(int x, double y)
{
cout << "sum2" << endl;
return x + y;
}
int main()
{
cout << sum(, ) << endl;
int (*pf)(int, int); // 未初始化
pf = sum;
cout << pf(, ) << endl;
/* output:
3
7
*/
return ;
}
将函数作为参数:
#include <iostream>
using namespace std;
int sum(int x, int y)
{
return x + y;
}
typedef decltype(sum) func;
int useInt2(int x, int y, func f)
{
return f(x, y);
}
int main()
{
cout << useInt2(, , sum) << endl;
/* output = 7 */
return ;
}
返回类型不会自动地转换成指针,我们必须显示地将返回类型指定为指针,但是我想,除非是函数内部还可以构造函数(例如Python那样),否则返回函数也没什么用。
练习
6.54
#include <iostream>
#include <vector>
using namespace std;
int sum(int x, int y)
{
return x + y;
}
int main()
{
using pf = int(*)(int, int);
vector<pf> pfvec;
return ;
}
6.55 & 6.56
#include <iostream>
#include <vector>
using namespace std;
int add(int x, int y)
{
return x + y;
}
int subtract(int x, int y)
{
return x - y;
}
int multiply(int x, int y)
{
return x * y;
}
int divide(int x, int y)
{
return x / y;
}
int main()
{
using pf = int(*)(int, int);
vector<pf> pfvec;
pfvec.push_back(add);
pfvec.push_back(subtract);
pfvec.push_back(multiply);
pfvec.push_back(divide);
for (pf f : pfvec) {
cout << f( , ) << endl;
}
return ;
}
输出结果:
【c++ primer, 5e】函数指针的更多相关文章
- C++基础——函数指针 函数指针数组
==================================声明================================== 本文版权归作者所有. 本文原创,转载必须在正文中显要地注明 ...
- C++函数指针
然后,我在想C++函数指针到底有啥用呢.想了又想,我想出来一种,就是将函数地址(函数n)作为函数(函数1)的参数时,便可以在访问函数1的时候就决定了,在函数1里面调用的是哪一个函数(函数1,2,3,4 ...
- C++中怎么获取类的成员函数的函数指针?
用一个实际代码来说明. class A { public: staticvoid staticmember(){cout<<"static"<<endl;} ...
- C/C++中的函数指针的使用与总结
概要: 函数指针介绍 typedef简化函数指针的定义 指向函数的指针的初始化和赋值 通过指针调用函数 函数指针形参 返回指向函数的指针 指向重载函数的指针 参考<C++ Primer> ...
- 【转】C/C++ 函数指针与类函数指针
转自:http://blog.csdn.net/iamshaofa/article/details/17614615 C函数指针 int numAdd(int a, int b) { return a ...
- 【C/C++】函数指针
首先必须要清楚如下: [1]函数指针即函数的地址,也就是存储其机器语言代码的首地址.该地址用函数名表示. [2]用具体的函数名给函数指针变量赋值时必须满足两者的类型(即函数返回值类型)和特征标(即函数 ...
- C/C++学习:函数指针
曾经在书上看到函数指针相关的都没怎么重视.可是近期在实际的工作中却派上了用场.所以认真地学习了一遍. 函数指针的申明 申明一个函数指针非常easy,就是将函数申明中的函数名替换为一个指针就可以: C/ ...
- STL函数static void (* set_malloc_handler(void (*f)()))()与函数指针解析
在C++ STL的SGI实现版本中,一级空间配置器class __malloc_alloc_template中有一个静态函数的实现如下: static void (*set_malloc_handle ...
- 从成员函数指针生成可调用对象:function<>、mem_fn()和bind()
我们知道,普通函数指针是一个可调用对象,但是成员函数指针不是可调用对象.因此,如果我们想在一个保存string的vector中找到第一个空string,不能这样写: vector<string& ...
- C++虚函数和函数指针一起使用
C++虚函数和函数指针一起使用,写起来有点麻烦. 下面贴出一份示例代码,可作参考.(需要支持C++11编译) #include <stdio.h> #include <list> ...
随机推荐
- phpcms 列表页中调用其下的所有子栏目(或特定的子栏目)的方法
phpcms 列表页中,如何调用其下的所有子栏目(或特定的子栏目),具体的写法如下,感兴趣的朋友可以参考下,希望对大家有所帮助 代码如下: {pc:get sql="select * fro ...
- index封装
就是求元素在父级当中的位置: 思路: <!DOCTYPE html> <html lang="en"> <head> <meta char ...
- cobbler上部署centos系统修改网卡地址成eth0
编辑cobbler的profile文件: cobbler profile edit --name=CentOS-7.2-x86_64 --kopts='net.ifnames=0 biosdevn ...
- 【BZOJ2287】【POJ Challenge】消失之物 背包动规
[BZOJ2287][POJ Challenge]消失之物 Description ftiasch 有 N 个物品, 体积分别是 W1, W2, ..., WN. 由于她的疏忽, 第 i 个物品丢失了 ...
- iOS 按钮文字加划掉线
UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(, , , )]; NSDictionary *normalTitleAttribu ...
- json学习之JSONArray的应用(转载)
从json数组中得到相应java数组,如果要获取java数组中的元素,只需要遍历该数组. 1 /** 2 * 从json数组中得到相应java数组 3 * JSONArray下的toArray()方法 ...
- Java中对List集合的常用操作(转载)
目录: list中添加,获取,删除元素: list中是否包含某个元素: list中根据索引将元素数值改变(替换): list中查看(判断)元素的索引: 根据元素索引位置进行的判断: 利用list中索引 ...
- Ubuntu 16.04 安装 Gnome 桌面环境
个人博客链接:Ubuntu 16.04 安装 Gnome 桌面环境
- 使用ganymed工具调用ssh2
需要引入ganymed-ssh2-build210.jar包. 其实很简单.所以直接贴代码,代码说话. package com.eshore.framework.util; import java.i ...
- 如何使用 libtorch 实现 AlexNet 网络?
如何使用 libtorch 实现 AlexNet 网络? 按照图片上流程写即可.输入的图片大小必须 227x227 3 通道彩色图片 // Define a new Module. struct Ne ...