缺省情况下,如果用如下的代码来定义字符串,编译器认为是AnsiString字符串:
var
S:string;//编译器认为S的类型是AnsiString
当然,能用编译开关$H来将string类型定义为ShortString,当$H编译开关的值为负时,string变量
是ShortString类型;当$H编译开关的值为正时(缺省情况),字符串变量是AnsiString类型。下面的代码
演示了这种情况:
var
{$H-}
S1:string;//S1是ShortString类型
{$H+}
S2:string;//S2是AnsiString类型
使用$H规则的一个例外是,如果在定义时特地指定了长度(最大在255个字符内),那么总是ShortString:
var
S:string[63];//63个字符的ShortString字符串
AnsiString(或长字符串)类型是在Delphi2.0开始引入的,因为Delphi1.0的用户特别需要一个容易使用而且没有255个字符限制的字符串类型,而AnsiString正好能满足这些要求。
虽然AnsiString在外表上跟以前的字符串类型几乎相同,但它是动态分配的并有自动回收功能,正是因为这个功能AnsiString有时被称为生存期自管理类型。