Henkk

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

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:

  1. 进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;
  2. 进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。因为可能派生类定义了 基类中 没有的成员变量。

  ------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类型转换为实际的类型

 

posted on   Henkk  阅读(233)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示