社区
C语言
帖子详情
使用C语言的强制类型转换将基类指针转换成子类指针如何判断是否合法?
freedomnight
2017-05-23 01:59:21
项目中有一些地方使用C风格的强制类型转换语法转换基类指针为子类指针。
我做了个试验,发现即使指针内容不是对应的子类的实例,转换出来的指针依旧是可以使用的(错误地使用)。
由于编译器的配置等原因,现在不能讲这种写法替换成C++的 dynamic_cast ,请问有什么办法加强转换的安全行吗?
...全文
244
9
打赏
收藏
使用C语言的强制类型转换将基类指针转换成子类指针如何判断是否合法?
项目中有一些地方使用C风格的强制类型转换语法转换基类指针为子类指针。 我做了个试验,发现即使指针内容不是对应的子类的实例,转换出来的指针依旧是可以使用的(错误地使用)。 由于编译器的配置等原因,现在不能讲这种写法替换成C++的 dynamic_cast ,请问有什么办法加强转换的安全行吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
freedomnight
2017-06-06
打赏
举报
回复
已经写代码验证,基类如果没有虚函数,确实不可使用dynamic_cast,而且delete这样的基类的指针也不会判断指针的实际对象类型而是忠实地调用基类的析构。
freedomnight
2017-06-06
打赏
举报
回复
如果有个基类Base和派生类Derived,然后有一个Base *arr[4] 里面放了4个Base类型对象指针,实际上都是指向Derived类型的实例的。 假设我的Base和Derived都没声明任何虚函数。 不考虑编译环境不支持dynamic_cast的问题,我使用这些指针时不可以使用dynamic_cast吗? 这时基类的析构相当于没有virtual的是吗?使用完了这个数组,我要delete[] arr,是不是会析构不完整呢?
sdghchj
2017-05-25
打赏
举报
回复
dynamic_cast 是基于虚函数表的,即使在c++中,没有虚函数的类或结构对象也是不能用dynamic_cast的
黑娃
2017-05-25
打赏
举报
回复
好奇怪的C,居然有继承关系
sdghchj
2017-05-25
打赏
举报
回复
C语言有基类子类的概念???
JXES智能生态系统
2017-05-24
打赏
举报
回复
不想用dynat_cast,自己小心使用指针就是了
freedomnight
2017-05-23
打赏
举报
回复
AIX的机器,gcc编译器,由于版本有一点旧,要支持dynamic_cast需要在编译选项中注明。 编译选项的配置是另一个产品组的,我们项目组不能修改。 C里面看来没有考虑过这种继承关系的问题,没办法解决就算了,只能写的时候时刻记住指针的类型了。
幻夢之葉
2017-05-23
打赏
举报
回复
引用 1 楼 jianwen0529 的回复:
指针这东西没办法,完全靠写作者本身的细心
能想到的就是实现运行时类型机制 类你都用了,为什么不能使用dynamic_cast?难道你的代码的编译器是古董级别?
幻夢之葉
2017-05-23
打赏
举报
回复
指针这东西没办法,完全靠写作者本身的细心
C++面试
static_cast:
子类
指针
或引用向上
转换成
基类
(安全),
基类
指针
或引用向下
转换成
子类
(不安全),基本数据类型之间的转换,空
指针
转换成
目标类型的空
指针
,任何类型的表达式
转换成
void类型 reinterp
类型转换(C++)
reinterpret_cast可以将任何
指针
类型转换为任何其他
指针
类型,但是这种转换是不安全的,因为它不检查转换前后的
指针
是否兼容。这些输出的地址表明,指向A1类型的
指针
ptr1和指向A2类型的
指针
ptr2分别指向了B类对象b中...
【C++专题】static_cast, dynamic_cast, const_cast探讨
首先回顾一下C++类型...下行转换(down-casting):把
基类
指针
或引用
转换成
子类
表示。 类型转换不安全性来源于两个方面: 其一是类型的窄化转化,会导致数据位数的丢失;比如int类型转short。float类型转int。 ...
C/C++数据类型转换详解
自动类型转换常被称为隐式类型转换,
强制类型转换
常被称为显示类型转换,
强制类型转换
的一般形式为(类型标识符)(操作数)或(类型标识符)(表达式)。其功能就是把操作数或表达式结果的数据类型暂时地强制转换为圆括号()...
二十万字C/C++、嵌入式软开面试题全集宝典四
4、 C++四种类型转换 5、 为什么要用static_cast转换而不用
c语言
中的转换? 6、 组合与继承优缺点? 7、 左值右值 8、 总结左值和右值的概念 9、 移动构造函数 10、
C语言
的编译链接过程? 11、 vector与list...
C语言
69,381
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章