typeid
前言
当指向类的指针转换好几次的时候,人为看过去雀食很累了,就可以用typeid
去看这个变量的类型。
正文
1 |
|
最直接的情况
但是有个别变量的处理不是很好,比如long long
他显示的是__int64
还有的就是不是所有的编译器都默认打开这个功能。
检测多态类型
指针类型
1 | class father{}; |
设计三个类
1 | father *fa = new father(); |
看到返回的是类的指针类型,而不是正常的类型。
因为需要解除引用,转出类型。
1 | father *fa = new father(); |
到此还不是最理想的类型显示。他显示的还是他最早声明的类型,但是我们new过之后,应该让他显示我们new之后的类型。
原因是类不支持多态,类型不会动态转换,所以往基类里面加个虚函数。
1 | class father{ |
再次打印看到结果是我们最后一次new的类型了。
注意要用星号解引用,不然还是它定义的类型
引用类型
1 | son s1; |
可以看到直接打印出了s1的类型。
并且修改成grandson也是没问题
首先引用是个弱化的指针,它不需要像指针那样还要单独解引用。
无聊的比较
估计会好奇typeid返回的是不是字符串,如果是也就能拿来和字符串比较。
这样肯定是不合法的。
可以看到显然typeid的返回值不会是const char。
那么最简单的就是两个typeid互相比较
比较类型当然少不了类。
虽然name是const char*,但是和字符串比较没有结果,而且也不合适,还是直接调用现场的好了
结语
typeid没啥问题,凑合用。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Box'Blog!
评论