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
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
- [More Effective C++]尽量使用C++风格的类型转换
- 尽量使用C++风格的类型转换
- 尽量使用C++风格的类型转换
- 尽量使用C++风格的类型转换
- 尽量使用C++风格的类型转换
- 2.尽量使用C++风格的类型转换
- 2.尽量使用C++风格的类型转换
- 《More Effective C++》 Item M2:尽量使用C++风格的类型转换
- More Effective C++议题【二】:尽量使用C++风格的类型转换
- More Effective C++ ——02_尽量使用C++风格的类型转换
- More Effective C++----(1)指针与引用的区别 & (2)尽量使用C++风格的类型转换 & (3)不要对数组使用多态
- Effective C++:条款4:尽量使用c++风格的注释
- C++中尽量使用C++提供的类型转换(2)---《More Effective C++》
- static_cast与c风格的强制类型转换
- C风格字符串和string类型的相互转换
- static_cast与c风格的强制类型转换比较
- c++风格的类型转换
- C++风格的类型转换
- linkq to sql的创建
- redhat修改网关IP
- 关于Win32 API的RedrawWindow函数和InvalidateRect函数
- SSH整合步骤
- CTime类
- 2.尽量使用C++风格的类型转换
- 亮剑.NET的系列文章之初识三层架构
- UltraEdit设置不自动备份文件的方法
- linux用户组、/etc/group文件及账户相关操作命令
- Oracle错误一览表1
- Entity to XML
- struts hibernate spring jar 包 官网下载地址
- PF_INET AF_INET
- linux Makefile obj-m obj-y