C 显式转换中几种不同的转换方式
创始人
2024-06-22 19:20:47
0

我们在上一篇文章中为大家详细介绍了C++隐式转换发生的四种情况,相信大家应该会对这一数据类型转换方式有一个详细的了解啦。那么在这里,将会为大家详细介绍其中的另一种转换方式,C++显式转换的基本内容。#t#

C++显式转换包含四种转换

static_cast : 编译期的转化,不能转换掉exdivssion的const、volitale、或者__unaligned属性

*所有内建类型对象之间的隐式转换都可用static_cast.

*把空指针转换成目标类型的空指针用static_cast。

*把任何类型的表达式转换成void类型用static_cast。

*类层次间的上行转换和下行转换也可以用static_cast,但下行转换即当把基类指针或引用转换成子类表示时,由于没有动态类型检查,所以是不安全的.反之是安全的.

dynamic_cast : 运行期的转换,类层次间的上行转换和下行转换

* dynamic_cast具有类型检查的功能,下行转换的效果跟static_cast是一样的,但下行转换比static_cast更安全。

* dynamic_cast还支持交叉转换,两个类如果有共同的祖先,他们的指针就可以用dynamic_cast.

const_cast : 编译期的转化,类型中的常量

reinterpret_cast : 任何指针都可以转换成其它类型的指针,可用于如char* 到 int*,或者One_class* 到 Unrelated_class* 等的转换,因此可能是不安全的。

C++内建类型指针之间不含有隐式转换(void * 除外),需要C++显式转换。

 

  1. int ival = 0;  
  2. char* pc = NULL;  
  3. int* pi = NULL;  
  4. void* pv = NULL;  
  5. const char* pcc = "Hello world";  
  6. const int* pci = &ival;  
  7. const void* pcv = NULL;  
  8. pc = pi; //错误,没有标准的隐式转换.  
  9. pc = reinterpret_cast(pi); 
    //必须使用reinterpret_cast 在位模式层次的显式转换  
  10. pc = pv; //错误,没有标准的隐式转换.  
  11. pc = static_cast(pv); //static_cast显式转换  
  12. pc = pcc; //错误,没有标准的隐式转换.  
  13. pc = const_cast(pcc); //const_cast显式转换  
  14. pc = pcv; //错误,没有标准的隐式转换.  
  15. pc = static_cast(const_cast(pcv)); 
    //先const_cast 后 static_cast.  
  16. pv = pc; // OK; 隐式转换到void*  
  17. pv = pi; // OK; 隐式转换到void*  
  18. pv = pcc; //错误,没有标准的隐式转换.  
  19. pv = const_cast(pcc); 
    //OK, const_cast显式转换,并且char* 隐式转换到void*  
  20. pv = pcv;//错误,没有标准的隐式转换.  
  21. pv = const_castpcv;//OK, const_cast显式转换.  
  22. pcpcc = pc; // OK; 隐式转换到const char*  
  23. pcc = pi; // 错误,没有标准的隐式转换.  
  24. pcc = reinterpret_cast(pi); 
    //必须使用reinterpret_cast 在位模式层次的显式转换.  
  25. pcc = pv; // 错误,没有标准的隐式转换.  
  26. pcc = static_cast(pv); //static_cast显式转换  
  27. pcc = pci;// 错误,没有标准的隐式转换.  
  28. pcc = reinterpret_castpci; 
    //必须使用reinterpret_cast 在位模式层次的显式转换.  
  29. pcc = pcv;//错误,没有标准的隐式转换.  
  30. pcc = static_cast(pcv); //static_cast显式转换.  
  31. pcv = pv; // OK; 隐式转换到const void*  
  32. pcpcv = pc; // OK; 隐式转换到const void*  
  33. pcv = pi; // OK; 隐式转换到const void*  
  34. pcv = pcc;// OK; 隐式转换到const void* 

 

以上就是对C++显式转换的一些基本介绍。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...