?
? ? return 0;
}
复制代码
程序的执行结果如下:
?
[root@localhost cpp_src]# g++ test.cpp?
[root@localhost cpp_src]# ./a.out?
iArray[0]=1
?
?
5、关于bool类型的转换规则
?
其他非bool类型的内置类型如果要转换为bool值,则非零转换为真True, 0转换为假false。
?
bool类型会转换int类型, true转为1, false转为0
?
?
?
6、枚举类型转换规则
?
枚举类型是一种自定义的数据类型,通过关键字 enum来定义。枚举类型通常用来定义一些属性或者状态,比方说定义一些值表示星期, 定义一些值表示文件的
?
打开、关闭状态, 定义一些值表示忙、闲等等。?
?
A: 定义枚举类型
?
语法: ?enum ? 枚举类型名 {枚举类型可以取的值};
?
Exp:
?
enum ? open_mode ?{input, output , append } ?// 定义了枚举类型 Week, 这种类型的变量可以取的值为: input、output、append
?
? ?enum ? ?open_mode ?status = input; ?//定义枚举类型变量 status,并初始化为input
要注意的是定义枚举类型的变量时,关键字 enum不能省略,除非用typedef为枚举类型定义了别名。
?
B:枚举类型值
?
默认定义枚举类型的时候,其第一个值默认取值为0, 后面的值其值会默认增加1,
?
例如:
?
enum ?file_status ?{close, open}; ? // 这里默认close的值为0 , open的值为1
?
还可以指定这些值,
?
例如:
?
enum ?file_status ?{close = 10 , ?open}; ? //这里 close = 10 , 而open的值为11
?
?
要点:
?
指定枚举的值时可以有两个值相等。
?
enum ?Points {point2d = 2, point2w,
?
point3d= 3, ? point3w}; ?//这一点需要引起注意, 但是一般不会这么定义枚举数据类型
?
?
C:枚举类型的转换规则
?
枚举类型可以参与计算, 可以将其值转换为int型的值, 其转换后的值,根据枚举类型的值确定。
?
typedef enum open_mode ?{input, output,append} ?OPENMODE;
?
OPENMODE eVar = input;
?
int iVar = 10 + eVar ; ?// 则eVar 转换为int型的值0 ,然后计算表达式的值
?
?
二、显示类型转换
?
显示类型转换就是在程序中明确的指出类型转换规则, 这样可以覆盖
系统默认的隐式转换规则。隐式转换有: dynamic_cast、static_cast、const_cast、
?
reinterpret_cast.
?
1、dynamic_cast
?
支持运行时识别指针或引用执行的对象,待后续专门随笔进行介绍。
?
2、const_cast
?
const_cast 就是将const对象的const属性强制的取消,使我们可以显示的修改对象的值。这里没有搞清楚, 不知道哪位大神,对这里理解比较透彻,请
?
不吝指教。
?
3、static_cast
?
static_cast和
C语言中强制类型转换一样, 只是表示方法不一样而已。 当然
C++也支持
C语言风格的强制类型转换。
?
char ?chVar = static_cast(1234); ?//显示的将1234转换为char类型。
这里要注意的static_cast后面用<> 将要转换为的数据类型表示出来,而用( )操作符将要转换的操作数括起来。
?
?
?
C语言风格的强制类型转换:
?
char chVar = (char)1234;
这里不进行过多的讨论。
?
?
?
4、reinterpret_cast?
?
reinterpret_cast通常为操作数的位模式提供重新解释的机制。
?
例如:
?
复制代码
int ?iVar;
?
int *pInt = &iVar;
?
*pInt = 12345;
?
char *pCh = reinterpret_cast(pInt);
复制代码
这里我们如果我们通过pCh访问内存的话, 那么系统就会将变量 iVar占用的内存 4个字节(32bit的系统)解释为char型数组;值得注意的是iVar 和 *pInt 访问
?
这一块内存区域的时候,还是会将这一块区域解释为int型, 就是说强制的 reinterpret_cast 并不能改变原指针指向的数据类型或者原变量的数据类型。这里特别需要
?
注意。