static_cast

静态转型的用途

  • 与dynamic_cast不同,static_cast不仅可以用于指针和引用,还可以用于其他型式
  • 一般用于非类型式的普通数据对象转型

静态转型的问题

  • 不进行运行期型式检查,不安全
  • 若转型失败,结果无定义

const_cast

常量转型的目的

  • 用于取消或者设置量的const状态(如设置为const或者取消const)

常量转型的问题

  • 如果原始数据对象不能写入,则取消常量修饰可能会导致未知的结果

例子:

#include <iostream>

class ConstCastTest
{
public:
void SetNum(int num) { _num = num; }
void PrintNum() const;
private:
int _num;
}; void ConstCastTest::PrintNum() const
{
//临时取消常量约束,修改目标对象的内容
//this指向const ConstCastTest*,指向常对象的指针
const_cast<ConstCastTest*>(this)->_num--;
std::cout << _num;
}

reinterpret_cast

复诠转型的目的

  • 将任意型式的数据对象转型为目标型式,即重新解释其位序列的意义
  • 可以用于整型与指针型的互转

复诠转型的问题

  • 由程序员保证重新解释的数据对象是否有意义,编译器简单按照目标型式理解该存储区的内容
  • 注意:在64位操作系统中,指针可能为64位,而整型可能为32位,复诠转型有可能丢失数据或者得到错误结果

例子:

#include <iostream>
using namespace std; int f(void *p)
{
unsigned int n = reinterpret_cast<unsigned int>(p);
return n;
} int main()
{
int a[] = { ,,,,,,, };
int n = f(a);
cout << n << endl;
}

最新文章

  1. How to: Convert Between Various String Types
  2. ubuntu安装skype
  3. 修改oracle密码有效期限制
  4. WordPress的SEO技术
  5. .NET实现单点登录研究过程总结--【SSO】
  6. VC多文档编程技巧(取消一开始时打开的空白文档)
  7. 读取spring配置文件的方法(spring读取资源文件)
  8. Light OJ 1032 - Fast Bit Calculations(数位DP)
  9. hdu3410-Passing the Message(RMQ,感觉我写的有点多此一举。。。其实可以用单调栈)
  10. 条款21: 必须返回对象时,不要强行返回对象的reference
  11. zoj2314(有上下界的网络流)
  12. MySQL汇总数据
  13. NYOJ-47 过河问题(贪心)
  14. 第九十节,html5+css3pc端固定布局,底部区域,说明区域,版权区域
  15. eeclipse使用快捷键
  16. DevOps之归纳总结
  17. JavaScript(第二十五天)【事件绑定及深入】
  18. java基础知识三 流
  19. Django视图(views)
  20. element-ui &lt;el-input&gt; +&lt;el-tree&gt;使用

热门文章

  1. 为更好地设计数据库,重新整理sql server数据类型
  2. Fastest Wordpress Theme -wpfast Download
  3. android studio 导入一个已有的android studio project作为lib使用
  4. 几个实用的mysql函数
  5. js实现图片预览
  6. replace
  7. 笔记:linux下mysql设置utf-8编码方法
  8. JavaScript 对象的创建
  9. AAS代码第2章
  10. storyboard简单认识