CC++数据类型的转换.docx
- 文档编号:3252814
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:14
- 大小:26.17KB
CC++数据类型的转换.docx
《CC++数据类型的转换.docx》由会员分享,可在线阅读,更多相关《CC++数据类型的转换.docx(14页珍藏版)》请在冰豆网上搜索。
CC++数据类型的转换
C/C++数据类型的转换之终极无惑
数据类型在编程中经常遇到,虽然可能存在风险,但我们却乐此不疲的进行数据类型的转换。
1.隐式数据类型转换
数据类型转换,到底做了些什么事情呢?
实际上,数据类型转换的工作相当于一条函数调用,若有一个函数撰文负责从double转换到int(假设函数是dtoi),则下面的转换语句:
doubled=4.48;
inti=d;//报告警告
等价于i=dtoi(d)。
函数dtoi的原型应该是:
intdtoi(double)或者是intdtoi(constdouble&)。
有些类型的数据转换时绝对安全的,所以可以自动进行,编译器不会给出任何警告,如由int型转换成double型。
另一些转换会丢失数据,编译器只会给出警告,并不算一个语法错误,如上面的例子。
各种基本数据类型(不包括void)之间的转换都属于以上两种情况。
以上两种不显示指明数据类型的转换就是隐式数据类型转换。
隐式数据类型转换无处不在,主要出现在一下集中情况。
(1)算术运算式中,低类型能够转换为高类型。
(2)赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。
(3)函数调用中参数传递时,系统隐式地将实参转换为形参的类型后,赋给形参。
(4)函数有返回值时,系统将隐式地将返回表达式类型转换为返回值类型,赋值给调用函数。
编程原则,请尽量不要使用隐式类型转换,即使是隐式的数据类型转换是安全的,因为隐式类型数据转换降低了程序的可读性。
2.显示数据类型转换
显示数据类型转换是显示指明需要转换的类型,首先考察如下程序。
#include
usingnamespacestd;
intmain(intargc,char*argv[])
{
shortarr[]={65,66,67,0};
wchar_t*s;
s=arr;
wcout<
getchar();
}
由于shortint和wchar_t是不同的数据类型,直接把arr代表的地址赋给s会导致一个编译错误:
errorC2440:
“=”:
无法从“short[4]”转换为“wchar_t”。
为了解决这种“跨度较大”的数据类型转换,可以说还用显示的“强制类型转换”机制,把语句s=arr;改为s=(wchar_t*)arr;就能顺利通过编译,并输出:
ABC。
强制类型转换在C语言中就已经存在,到了C++语言中可以继续使用。
在C风格的强制类型转换中,目标数据类型被放在一堆圆括号中,然后置于源数据类型的表达式前。
在C++语言中,允许将目标数据类型当做一个函数来使用,将源数据类型表达式置于一对圆括号中,这就是所谓的“函数风格”的强制类型转换。
以上两种强制转换没有本质区别,只是书写形式上略有不同。
即:
(T)expression//C-stylecast
T(expression)//function-stylecast
可将它们称为旧风格的强制类型转换。
在上面的程序中,可以用以下两种书写形式实现强制类型转换:
s=(wchar_t*)arr;
typedefwchar_t*LSPTR;s=LSPTR(arr);
3.C++中新式类型转换
在C++语言中,增加了四中内置的类型转换操作符:
const_cast、static_cast、dynamic_cast和reinterpret_cast。
它们具有统一的语言形式:
type_cast_operator
下面分别介绍。
3.1const_cast
const_cast主要用于解除常指针和常量的const和volatile属性。
也就是说,把cosnttype*转换成type*类型或将consttype&转换成type&类型,但是要注意,一个变量本身被定义为只读变量,那么它永远是常变量。
const_cast取消的是对间接引用时的改写限制(即只针对指针或者引用),而不能改变变量本身的const属性。
如下面的语句就是错误的
constinti;
intj=const_cast
正确示例如下:
voidconstTest{
constinta=5;
int*p=NULL;
p=const_cast
(*p)++;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CC 数据类型 转换