我很好奇这段代码在 Delphi 2010 中会发生什么:
function foo: WideString;
var
myUnicodeString: UnicodeString;
begin
for i:=1 to 1000 do
begin
myUnicodeString := ... something ...;
result := result + myUnicodeString; // This is where I'm interested
end;
end;
涉及多少次字符串转换,是否存在性能特别差的情况?
我知道该函数应该只返回 UnicodeString
,但我在 VCL 流代码中看到了这种反模式,并且想了解该过程。
最佳答案
为了回答有关代码实际执行的操作的问题,以下语句:
result := result + myUnicodeString;
执行以下操作:
调用
System._USTrFromWStr()
将Result
转换为临时UnicodeString
调用
System._USTrCat()
将myUnicodeString
连接到临时变量调用
System._WStrFromUStr()
将临时值转换为WideString
并将其分配回Result
。
有一个 System._WStrCat()
函数,用于将 WideString
连接到 WideString
(以及 System._UStrCat())
表示 UnicodeString
)。如果 CodeGear/Embarcadero 对此更聪明,他们可以实现一个 System._WStrCat()
重载,该重载采用 UnicodeString
作为输入和 WideString
> 作为输出(反之亦然,将 WideString
连接到 UnicodeString
上)。这样,就不再需要临时 UnicodeString
转换。 WideString
和 UnicodeString
都编码为 UTF-16(大多数情况下,但我不会在这里讨论),因此将它们连接在一起只是一个问题分配和移动,就像将两个 UnicodeString
或两个 WideString
连接在一起一样。
关于delphi - 在 Delphi 中将 UnicodeString 附加到 WideString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18253978/