delphi - 在 Delphi 中将 UnicodeString 附加到 WideString

标签 delphi unicode-string widestring

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

相关文章:

Python - BeautifulSoup html parsing handle gbk encoding poorly - Chinese webscraping 问题

sql-server - SQL-Server 中奇怪的字符串行为

delphi - 在运行时更改应用程序任务栏图标(忽略快捷方式图标)

delphi - 使用FPC导出重载函数

delphi - 如何读取和更改 TEdit 控件的值?

delphi - ReadLn 使用 WideString(utf-8 文件)

delphi - Delphi中是否需要将字符串转换为WideString?

sql - Delphi中不同区域设置不同格式的Float

c# 不翻译 unicode 字符串

delphi - 如何从 COM 服务器返回 WideString?