判断一个变量是不是指针
文章目录
- 1 编写程序判断一个变量是不是指针
1 编写程序判断一个变量是不是指针
拾遗:
- C++中仍然支持C语言中的可变参函数。
- C++编译器匹配的调用优先级
- 重载函数。
- 函数模板。
- 变参函数。
思路:
- 将变量分为两类:指针和非指针。
- 编写函数:
- 指针变量调用时返回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;
}
参考资料:
- C++深度解析教程
判断一个变量是不是指针相关推荐
- php 判断类型array,判断一个变量是数组Array类型的方法_javascript技巧
在很多时候,我们都需要对一个变量进行数组类型的判断.JavaScript中如何判断一个变量是数组Array类型呢?我最近研究了一下,并分享给大家,希望能对大家有所帮助. JavaScript中检测对象 ...
- shell中如何判断一个变量是否为空
shell中如何判断一个变量是否为空 shell编程中,对参数的错误检查项中,包含了变量是否赋值(即一个变量是否为空),判断变量为空方法如下: 1.变量通过" "引号引起来 #!/ ...
- JavaScript判断一个变量是对象还是数组
typeof都返回object 在JavaScript中所有数据类型严格意义上都是对象,但实际使用中我们还是有类型之分,如果要判断一个变量是数组还是对象使用typeof搞不定,因为它全都返回objec ...
- 在shell中如何判断一个变量是否为空
在shell中如何判断一个变量是否为空 判断一个脚本中的变量是否为空,我写了一个这样的shell脚本: #!/bin/sh #filename: test.sh para1= if [ ! -n $p ...
- linux 脚本 变量为空,Shell判断一个变量是否为空
判断一个变量是否为空 . 1. 变量通过" "引号引起来 如下所示:,可以得到结果为 IS NULL. #!/bin/sh para1= if [ ! -n "$para ...
- 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 ...
- JS判断一个变量是否是数组
方法一:Array.isArray() Array.isArray() 用于确定传递的值是否是一个 Array:返回 boolean 型,如果值是 Array则为 true:否则为 false // ...
- 如何判断一个变量是否为数组(isArray)
在我们平时的工作中经常会用到如何判断一个变量是否为数组.常用的方法很多,有用常用框架里面的,isArray.但是关于这个isArray的实现,各有不同. 常用的方法有如下几种 1.instanceof ...
- 判断一个变量类型是数组还是对象
var arr=[1]; var json={age:18} 数组或者对象的typeof 值都是object. 一.通过length 一般情况下对象没有length属性值,其值为undefiend,而 ...
最新文章
- 一步一步粗谈linux文件系统(三)----超级块(superblock)【转】
- 2012年度IT博客大赛50强报道:高俊峰
- SSM框架中使用Spring的@Transactional注解进行事务管理
- myid文件到底是否需要自己手动配置
- jmeter负载测试测试_使用Apache JMeter负载测试Web应用程序
- mysql 5.6 command line client闪退_MySQL 5.6 Command Line Client 点开闪退解决方法
- ***常用的***手段
- 实验五 存储管理实验
- 早该知道的7个JavaScript技巧
- maya中英文对照_Maya2012中英文对照表 (4)
- 制作数据库导出模板,导出数据库设计说明书
- PyQt4入门教程(1)_PyQt介绍及准备工作
- 利用OneNET实现SIM868使用HTTP协议给服务器发送数据并显示
- 车载高德地图显示服务器信息,车载高德一直gps定位中,怎么解决高德地图导航gps信号弱...
- php 网络留言系统总结心的,留言板_感谢您的留言_代潇瑞博客-专注于PHP学习,PHP源码分享...
- [ C语言版 ] 数独计算器 [ 搜索剪枝法 ]
- excel表格打印每页都有表头_Excel打印表格不再手忙脚乱
- xcode快捷方式 一 快速找到对应文件
- 专访 | 刘嘉松:开源,互惠且共赢
- 误删了注册表文件USB通用串行总线控制器报异常