一级棒(Eachfun)
RSS订阅
显式转换
发表时间:2006-07-20 23:33:11 关键词:C++,MFC,VC,Primer,编程,教程,读书

  引用:显式转换也称为强制类型转换。
  笔记:我觉得要提强制类型转换,得从C风格的说起。这里面可能有我个人的原因。因为我个人习惯了C风格的强制类型转换。
  在C语言中,强制类型转换就是用借助一对括号同时把类型名和表达式列出来,比如“(int)t”和“int(t)”就是把t转为int型。
  引用:因为要覆盖通常的标准转换,所以需显式使用强制类型转换。……显式使用强制类型转换的另一个原因是:可能存在多种转换时,需要选择一种特定的类型转换。
  笔记:从外文图书翻译过来的中国图书有个通病,就是语言不伦不类。本书算是翻译得非常好的了,依然无法摆脱这种影响。上文的意思无非是说:我不希望使用默认的转换规则的时候,就可以显式地规定按我的要求转换。如果要举个例子,可以拿上文《类型转换之隐式转换》中一个现成的例子:
int a = -3;
unsigned b = 3;
if (a == b)//隐式转换将转为unsigned int
if (a == (int)b)//显式指定转换为int
  这种用法更多地用于指针类型的转换。因为指针类型就是指针所指向对象的类型,而指针本身是没有类型区别的。所以,指向任何类型的指针可以互相转换。最典型的就是void*和其它类型之间的互换了,比如:“int* p = (int*)malloc(sizeof(int) * MaxSize);”
  还有一种用法就是在编译器不允许进行隐式转换的时候,比如将const对象转为非const对象。如:
const int t = 3;
int* p = (int*)&t;//本来要写作const int* p = &t;
  这种用法还是少用为好,理由很简单,编译器之所以不允许进行转换,就是为了保护数据,你非要破坏这种安全性自然不好。即使能确信这样做不产生恶果,这样做至少是没有良好风格的。
  C++中为显式类型转换提供了四种不同的操作符:static_case、dynamic_cast、const_cast、reinterpret_cast。个人认为与C风格的相比似乎都没有什么进步。
  引用:强制类型转换关闭或挂起了正常的类型检查。强烈建议程序员避免使用强制类型转换,不依赖强制类型转换也能写好很好的C++程序。

本站特约顾问律师常州东晟律师事务所朱立律师(电话13915029670,QQ646146109)提醒您:
本站文章皆为作者原创,其它媒体(包括但不限于报刊、杂志、网站、电视、电台)未经作者书面许可严禁转载(或部分摘录)!
发表评论
称呼:
QQ:
邮箱:
链接:
内容:
搜索: 百度搜索 Google搜索
Copyright©2000 - 2008 Eachfun.Com, All Rights Reserved 一级棒网络
苏ICP备05080156号
一级棒建站系统 http://www.eachfun.com 一级棒版权所有,未经许可不得商用!