gpt4 book ai didi

delphi - 在 Delphi 中将 UnicodeString 附加到 WideString

转载 作者:行者123 更新时间:2023-12-03 15:04:44 26 4
gpt4 key购买 nike

我很好奇这段代码在 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;

执行以下操作:

  1. 调用 System._USTrFromWStr()Result 转换为临时 UnicodeString

  2. 调用 System._USTrCat()myUnicodeString 连接到临时变量

  3. 调用 System._WStrFromUStr() 将临时值转换为 WideString 并将其分配回 Result

有一个 System._WStrCat() 函数,用于将 WideString 连接到 WideString(以及 System._UStrCat()) 表示 UnicodeString)。如果 CodeGear/Embarcadero 对此更聪明,他们可以实现一个 System._WStrCat() 重载,该重载采用 UnicodeString 作为输入和 WideString > 作为输出(反之亦然,将 WideString 连接到 UnicodeString 上)。这样,就不再需要临时 UnicodeString 转换。 WideStringUnicodeString 都编码为 UTF-16(大多数情况下,但我不会在这里讨论),因此将它们连接在一起只是一个问题分配和移动,就像将两个 UnicodeString 或两个 WideString 连接在一起一样。

关于delphi - 在 Delphi 中将 UnicodeString 附加到 WideString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18253978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com