C++ typeid操作符
来源:互联网 发布:mac网游加速器 编辑:程序博客网 时间:2024/05/16 11:51
转载:http://www.weixueyuan.net/view/6378.html
typeid操作符用于判断表达式的类型,注意它和sizeof一样是一个操作符而不是函数。如果需要使用typeid操作符,最好加上typeinfo头文件。
给出以下定义
- int a;
- double b;
- char * c;
- long d;
操作符typeid返回的是一个type_info类(用于描述数据类型的一个系统类)对象的引用。这个操作符可以用于表达式和类型名(包括自定的数据类型,比如类)。
例1:
- class base
- {
- public :
- virtual void m(){cout<<"base"<<endl;}
- };
- class derived : public base
- {
- public:
- void m(){cout<<"derived"<<endl;}
- };
base * p = new derived;
下表将给出使用typeid操作符的结果。
对于表达式typeid(p),因为p是base*类型的指针,因此typeid(p) == typeid(base*)为真,而typeid(p) == typeid(derived*)为假。而对于表达式typeid(*p),因为base类具有多态性,因而在计算typeid(*p)时会根据运行时p所指向的实际类型去计算,而本例中p指向的是派生类对象,因此表达式typeid(*p) == typeid(derived)为真,typeid(*p) == typeid(base)为假。
例2:
- class base
- {
- public :
- void m(){cout<<"base"<<endl;}
- };
- class derived : public base
- {
- public:
- void m(){cout<<"derived"<<endl;}
- };
base * p = new derived;
下表将给出使用typeid操作符的结果。
对于表达式typeid(p),同样,因为p是base*类型的指针,因此typeid(p) == typeid(base*)为真,而typeid(p) == typeid(derived*)为假。而对于表达式typeid(*p),由于此时的基类不具有多态性,因而*p将会采用编译期类型来计算,编译期*p是base对象,因此表达式typeid(*p) == typeid(derived)为假,typeid(*p) == typeid(base)为真。
阅读全文
0 0
- typeid操作符详解
- typeid操作符
- typeid操作符
- typeid操作符
- typeid操作符详解
- C++ typeid操作符
- C++ typeid操作符
- C++:运算符重载、string类重写、数据类型转换、->操作符重载、virtual继承、virtual函数、typeid
- C++:运算符重载、string类重写、数据类型转换、->操作符重载、virtual继承、virtual函数、typeid
- C++<typeinfo>之typeid
- 【c++系列】typeid操作符(判断类型是否相同)
- C/C++ 之 typeid详解
- typeid运算符
- C++ typeid运算符
- typeid
- typeid
- typeid
- typeid
- Linux-4.9.2内核在mini2440上的移植(十)——ADC驱动移植
- 数据结构:用JS实现栈
- 假的生命游戏
- 字符串处理分割字符串
- 内存中常见异常值的解释(比如0xcccccccc、0xcdcdcdcd和 0xfeeefeee 异常值)以及关于VC 中 debug和Release模式下的变量初始化问题
- C++ typeid操作符
- GUN和GPL的大概意思
- GROMACS运行参数之nvt.mdp文件详解
- 第四周项目三__单链表的应用(2)
- 注重医院患者院后随访提高医疗质量
- DDOS攻击分类
- Sed行定位的使用
- python数据类型介绍
- String类