文章目录

  • 1 编写程序判断一个变量是不是指针

1 编写程序判断一个变量是不是指针

拾遗:

  • C++中仍然支持C语言中的可变参函数。
  • C++编译器匹配的调用优先级
    1. 重载函数。
    2. 函数模板。
    3. 变参函数。

思路:

  • 将变量分为两类:指针和非指针。
  • 编写函数:
    • 指针变量调用时返回true。
    • 非指针变量调用时返回false。

函数模板与变参函数的化学反应:

编程实验:指针判断

#include <iostream>
#include <string>using namespace std;class Test
{public:Test(){}virtual ~Test(){}
};template
<typename T>
bool IsPtr(T* v) // match pointer
{return true;
}bool IsPtr(...)  // match non-pointer
{return false;
}int main(int argc, char *argv[])
{int i = 0;int* p = &i;cout << "p is a pointer: " << IsPtr(p) << endl;    // truecout << "i is a pointer: " << IsPtr(i) << endl;    // falseTest t;Test* pt = &t;cout << "pt is a pointer: " << IsPtr(pt) << endl;    // truecout << "t is a pointer: " << IsPtr(t) << endl;    // false  运行时崩溃,变参无法处理对象的拷贝问题return 0;
}

上诉实现版本存在的缺陷:

  • 变参函数无法解析对象参数,可能造成程序崩溃!

进一步的挑战:

  • 如何让编译器精确匹配函数,但不进行实际的调用?sizeof。
#include <iostream>
#include <string>using namespace std;class Test
{public:Test(){}virtual ~Test(){}
};template
<typename T>
char IsPtr(T* v) // match pointer
{return 'd';
}int IsPtr(...)  // match non-pointer
{return 0;
}#define ISPTR(p) (sizeof(IsPtr(p)) == sizeof(char))int main(int argc, char *argv[])
{int i = 0;int* p = &i;cout << "p is a pointer: " << ISPTR(p) << endl;    // truecout << "i is a pointer: " << ISPTR(i) << endl;    // falseTest t;Test* pt = &t;cout << "pt is a pointer: " << ISPTR(pt) << endl;    // truecout << "t is a pointer: " << ISPTR(t) << endl;    // falsereturn 0;
}

参考资料:

  1. C++深度解析教程

判断一个变量是不是指针相关推荐

  1. php 判断类型array,判断一个变量是数组Array类型的方法_javascript技巧

    在很多时候,我们都需要对一个变量进行数组类型的判断.JavaScript中如何判断一个变量是数组Array类型呢?我最近研究了一下,并分享给大家,希望能对大家有所帮助. JavaScript中检测对象 ...

  2. shell中如何判断一个变量是否为空

    shell中如何判断一个变量是否为空 shell编程中,对参数的错误检查项中,包含了变量是否赋值(即一个变量是否为空),判断变量为空方法如下: 1.变量通过" "引号引起来 #!/ ...

  3. JavaScript判断一个变量是对象还是数组

    typeof都返回object 在JavaScript中所有数据类型严格意义上都是对象,但实际使用中我们还是有类型之分,如果要判断一个变量是数组还是对象使用typeof搞不定,因为它全都返回objec ...

  4. 在shell中如何判断一个变量是否为空

    在shell中如何判断一个变量是否为空 判断一个脚本中的变量是否为空,我写了一个这样的shell脚本: #!/bin/sh #filename: test.sh para1= if [ ! -n $p ...

  5. linux 脚本 变量为空,Shell判断一个变量是否为空

    判断一个变量是否为空 . 1. 变量通过" "引号引起来 如下所示:,可以得到结果为 IS NULL. #!/bin/sh para1= if [ ! -n "$para ...

  6. python3判断变量存在_Python3基础 list in/not in 判断一个变量是否在列表中存在

    Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda : 4.5.11 typesetting : Markdown ...

  7. JS判断一个变量是否是数组

    方法一:Array.isArray() Array.isArray() 用于确定传递的值是否是一个 Array:返回 boolean 型,如果值是 Array则为 true:否则为 false // ...

  8. 如何判断一个变量是否为数组(isArray)

    在我们平时的工作中经常会用到如何判断一个变量是否为数组.常用的方法很多,有用常用框架里面的,isArray.但是关于这个isArray的实现,各有不同. 常用的方法有如下几种 1.instanceof ...

  9. 判断一个变量类型是数组还是对象

    var arr=[1]; var json={age:18} 数组或者对象的typeof 值都是object. 一.通过length 一般情况下对象没有length属性值,其值为undefiend,而 ...

最新文章

  1. 一步一步粗谈linux文件系统(三)----超级块(superblock)【转】
  2. 2012年度IT博客大赛50强报道:高俊峰
  3. SSM框架中使用Spring的@Transactional注解进行事务管理
  4. myid文件到底是否需要自己手动配置
  5. jmeter负载测试测试_使用Apache JMeter负载测试Web应用程序
  6. mysql 5.6 command line client闪退_MySQL 5.6 Command Line Client 点开闪退解决方法
  7. ***常用的***手段
  8. 实验五 存储管理实验
  9. 早该知道的7个JavaScript技巧
  10. maya中英文对照_Maya2012中英文对照表 (4)
  11. 制作数据库导出模板,导出数据库设计说明书
  12. PyQt4入门教程(1)_PyQt介绍及准备工作
  13. 利用OneNET实现SIM868使用HTTP协议给服务器发送数据并显示
  14. 车载高德地图显示服务器信息,车载高德一直gps定位中,怎么解决高德地图导航gps信号弱...
  15. php 网络留言系统总结心的,留言板_感谢您的留言_代潇瑞博客-专注于PHP学习,PHP源码分享...
  16. [ C语言版 ] 数独计算器 [ 搜索剪枝法 ]
  17. excel表格打印每页都有表头_Excel打印表格不再手忙脚乱
  18. xcode快捷方式 一 快速找到对应文件
  19. 专访 | 刘嘉松:开源,互惠且共赢
  20. 误删了注册表文件USB通用串行总线控制器报异常

热门文章

  1. java类的定义的实例_Java类的定义与实例化
  2. 3.10 直观理解反向传播-深度学习-Stanford吴恩达教授
  3. linux 下去掉^M
  4. Processing入门教程-Processing的“前世今生”
  5. 四 配置sshd与samba服务
  6. 理解正向代理与反向代理的区别
  7. 物联网时代如何管理上百万设备?找风河DLM就对了!
  8. Windows环境下搭建React Native
  9. 七牛云音视频新功能:音频支持AAC_HE
  10. 系统集成资质培训 - 标准系列 -软件文档管理指南