C++ 及QT 强制类型转化
C++: dynamic_cast、const_cast 、static_cast、reinterpret_cast
dynamic_cast:
支持RTTI 主要用于向下转化 下行安全
const_cast :
将const转变为非const
变量本身的const属性是不能去除的,要想修改变量的值,一般是去除指针(或引用)的const属性,再进行间接修改。
用法:const_cast<type>(expression) 通过const_cast运算符,也只能将const type*转换为type*,将const type&转换为type&。
const 的机制,就是在编译期间,用一个常量代替了 data。这种方式叫做常量折叠
static_cast:
- 进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;
- 进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。因为可能派生类定义了 基类中 没有的成员变量。
------static_cast常用来进行基本类型直接的转换,如char与int、int与float、enum与int之间;
-------static_cast也可以转换用户自定义类型,但目标类型必须含有相应的构造函数;
------static_cast还可以转换对象的指针类型,但它不进行运行时类型检查,所以是不安全的;
------static_cast甚至可以把任何表达式都转换成void类型;
------satic_cast不能移除变量的const属性,请参考const_cast操作符;
------static_cast进行的是简单粗暴的转换,所以其正确性完全由程序员自己保证。
static_cast 会做 编译时的类型检查,而 强制转换不会。
reinterpret_cast:
不安全
只有将转换后的类型值转换回到其原始类型,这样才是正确使用reinterpret_cast方式。
QT :qobject_cast qgraphicsitem_cast qvariant_cast
qobject_cast :
该函数类似于 C++中的dynamic_cast,但执行速度比dynamic_cast 更快,且不需要
C++的RTTI 的支持,但qobject_cast 仅适用于QObject 及其派生类
qgraphicsitem_cast :
只适用于QGraphicsItem
的子类
它的优势在于,它并不使用 RTTI,而且转换失败的话会返回 nullptr
qvariant_cast :
QVariant类型转换为实际的类型
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)