C++中的显式类型转换操作符

企鹅博客
19060
文章
0
评论
2020年1月10日12:20:04 评论 8 views 862字阅读2分52秒

即使类型转换本身是危险的,在有些时候类型转换也是不可或缺的。程序员不使用显式转换,编译器也可能会使用隐式转换,那还不如把代码控制在程序员自己手中。

C++有4种显式类型转换操作符,最好不要使用C语言编程方式遗留的隐式类型转换。第一,显式类型转换在代码中更明显,可以提醒程序员你的代码设计可能存在一些丑陋的地方;第二,显式类型转换可以检测转换中的错误,比如当cast失败时,你会得到空指针,但隐式转换就不会;第三,有些情况,隐式类型转换无法做到,比如const_cast的功能。

static_cast

编译器隐式执行的任何类型转换,都可以使用static_cast显式完成。一般用于不同大小的类型之间互相转换。

  1. doubled = 97.0;  
  2. charch = static_cast<char>(d);  

const_cast

顾名思义,用于转换掉表达式的const性质。

比如我们从外部接受了一个const类型的参数,再传递给下层函数时,又需要修改它const_cast就派上用场了。

  1. constchar* pc_str;  
  2. char*pc = string_copy(const_cast<char*>(pc_str));  

dynamic_cast

将基类类型的指针或引用安全地转换为派生类型的指针或引用。如果转换到指针类型的dynamic_cast失败,则其结果为0值;如果转换到引用类型的dynamic_cast失败,则抛出一个bad_cast类型的异常。这也是为什么不使用C方式类型转换的原因,C方式的转换失败后,我们不知道如何检测错误。

  1. Derived*derivedPtr = dynamic_cast<Derived*>(basePtr);  

reinterpret_cast

  1. int*ip;  
  2. char*pc = reinterpret_cast<char*>(ip);  

上述内容大部分摘自《C++Primer》一书。下载见 http://www.linuxidc.com/Linux/2012-05/60075.htm

继续阅读
  • 版权声明: 发表于 2020年1月10日12:20:04
  • 转载注明:https://www.qieseo.com/176369.html
OpenCV机器学习库MLL Linux编程

OpenCV机器学习库MLL

学习机器学习的时候,基本都是在用Matlab、Python写算法,做测试; 由于最近要用OpenCV写作业,兴起看了看OpenCV的机器学习模块(The Machine Learning Librar...
matlab矩阵中如何去掉重复的行? Linux编程

matlab矩阵中如何去掉重复的行?

近来用matlab编程遇到了这样两个问题,如有以下矩阵: IDX = ; 问题1)怎样去掉其中的重复行呢? 在网上找了半天,大家都提供的是自己写的循环。我在想,这样简单的问题matlab肯定提供了基础...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: