只是出于好奇,
为什么在Delphi中,如果我们定义一个空字符:
a:Char;
a:='';
我们遇到了一个错误:不兼容的类型:'Char'和'string'
然而,如果我们将
a:='a';
这样定义空字符是否必要:a:=#0
?
Char指单个字符,即只有一个字符。因此,'a'、'∫'和'⌬'都可以,但不包括'ab'(一个由两个字符组成的字符串)、'Hello World!'(一个由十二个字符组成的字符串)或''(一个零长度的字符串)。
然而,NULL字符(#0)像其他字符一样是一个字符。
此外,字符数据类型在现代版本的Delphi中被实现为一个字,即两个字节。如果所有这些值0、1、...、2^16 - 1都用于真实字符,那么你如何表示你的“空字符”呢?
''
视为#0
的同义词,但我会觉得这很令人困惑。此外,写#0
比写''
需要更长的时间吗? - Andreas Rejbrand''
只是空字符串,可以完全合法地使用该组合,例如在 ShowMessage('')
中。但是空字符串由零个字符组成,因此它不是一个字符。 - Andreas Rejbrand一个空的 char
并不存在。一个 char
必须要有一个值。它是一种序数类型,也是一种简单值类型。就像整数一样,总是有一个值,char
也是如此。
值为 #0
的并不是一个空的 char
,而是一个具有值为0的字符,通常称为 NUL
。
ordinal
类型表示为“序数类型”。 - OnTheFly
''
常量表达式感到困惑。它的类型是string
,而不是与char
兼容的类型。相反,'a'
是兼容的。因此,你必须定义“空字符”约定。 - OnTheFly