Delphi中对类型的兼容和转换作了严格的限制,虽然上手起来不太方便,但是容易使人养成良好的编码习惯,下面就Delphi的类型转换中需要注意的点进行说明。
类型兼容
当A,B两种数据类型满足一下条件时,可以将B类型的值赋值给A类型的变量:
- A,B均为实型;
- A,B均为整型;
- B是A的子界类型;
- A,B是同一类型的子界类型;(注意溢出问题)
- 均为集合类型,且基类也兼容;
- 字符串 := 字符串、packed-string、Char;
- 有序类型与Variant类型;
- A,B均为类、类引用、类接口,B继承于A;
- A是PChar,B字符数组(0下标);
- Pointer与其他类型的指针;
- 同一类型的指针(开启编译器指示字{$T+});
- 都是过程/函数类型,且返回类型,参数个数、位置、类型相同;
A是接口类型,B是其的一个实现;
注意:不能包含文件类型;接口类型可以赋值给Variant,反之则不行;整型可以赋值给实型,反之不行。
类型转换
类型标识符(表达式);
值转换:表达式和类型标识符只能是指针类型或者有序类型,并且需要注意溢出;
有序类型包括:整型、字符型、布尔型、枚举型、子界类型,不包括实型;
变量转换:目标类型所占内存不小于源类型;