三、强制类型转换4 h4 s& H- a; e& {- e/ ]5 W
有时候,根据表达式的需要,某个数据需要被当成另外的数据类型来处理,这时,就需要强制编译器把变量或常数由声明时的类型转换成需要的类型。为此,就要使用强制类型转换说明,格式如下: 1 L# E6 ]: N+ \' K int* iptr=(int*) &table;) V& i6 M& I. G# e
表达式的前缀(int*)就是传统C风格的强制类型转换说明(typecast),又可称为强制转换说明(cast)。强制转换说明告诉编译器把表达式转换成指定的类型。有些情况下强制转换是禁用的,例如不能把一个结构类型转换成其他任何类型。数字类型和数字类型、指针和指针之间可以相互转换。当然,数字类型和指针类型也可以相互转换,但通常认为这样做是不安全而且也是没必要的。强制类型转换可以避免编译器的警告。. V9 @* R# t$ Q) p
long int el=123; 7 Q8 t5 q( T% k" L short i=(int) el;' p. {( d. F9 d/ u% L0 d* ]2 T4 m
float m=34.56; % L) Z; z; A; _% x9 u" Q- X9 ~ int i=(int) m;8 |3 R/ t$ C$ P' F
上面两个都是C风格的强制类型转换,C++还增加了一种转换方式,比较一下上面和下面这个书写方式的不同:# v r% [! M3 l/ ]5 R+ A
long int el=123;% X* m, M; E' n* [$ T
short i=int (el); ; J6 {; @, e+ _' K* F4 l float m=34.56;7 \5 Y4 Y% v s
int i=int (m); % D" \" J* e( e" w" E: s( w 使用强制类型转换的最大好处就是:禁止编译器对你故意去做的事发出警告。但是,利用强制类型转换说明使得编译器的类型检查机制失效,这不是明智的选择。通常,是不提倡进行强制类型转换的。除非不可避免,如要调用malloc()函数时要用的void型指针转换成指定类型指针。