2.尽量使用C++风格的类型转换

来源:互联网 发布:mac 突然声音好大 编辑:程序博客网 时间:2024/05/07 15:06
C风格的类型转换时一种极其粗鲁的转换,允许你在任何类型间进行转换,转换过程中存在很大的风险,编译器难检查出错误。例如:
1.把一个const指针转换成非const指针
2.将一个指向基类型的指针转换成指向子类型的指针
在C风格中的转换跟本不会对这些不同情况进行区分,原因也很简单,因为C风格转换时为C语言设计的,所以不可能考虑C++的感受。
在一个是C风格的转换从语法上来说不好识别
(type)expression
你很难一眼就从程序中看出那句是类型转换。
在C++中引进了四种新的类型转换操作,克服了C风格类型转换的缺点。
static_cast
const_cast
dynamic_cast
reinterpret_cast
使用风格是(以static_cast为例):
static_cast<type>(expression)
例如你想把int 转换成double
C风格做法是这样的:
int firstNum,secondNum;
double result=((double)firstNum)/secondNum;
使用上面的新方法:
double result=static_cast<double>(firstNum)/secondNum;
这四个类型转换的功能简要概括是:
static_cast像C风格的类型转换一样强大,含义也类似。但是功能上有限制,例如不可以将struct转换成int,或是double转换成指针等。另外它无法去除const属性
const_cast用于转换掉const 和volatile 属性
dynamic_cast 用于安全地沿着类的继承方向向下进行转换。只能在具有继承关系的对象上使用。
reinterpret_cast 最普通的用途是在函数指针类型之间进行转换
关于强制类型转换详细信息可参考http://blog.csdn.net/zy_dreamer/article/details/8789918
原创粉丝点击