在Delphi中将UnicodeString附加到WideString

前端之家收集整理的这篇文章主要介绍了在Delphi中将UnicodeString附加到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;

以下是:

>调用System._UStrFromWStr()将Result转换为临时UnicodeString
>调用System._UStrCat()将myUnicodeString连接到temp
>调用System._WStrFromUStr()将temp转换为WideString并将其分配回Result.

有一个System._WStrCat()函数用于将WideString连接到WideString(以及用于UnicodeString的System._UStrCat()).如果CodeGear / Embarcadero更聪明,他们可能实现了一个System._WStrCat()重载,它将UnicodeString作为输入,将WideString作为输出(反之亦然,将WideString连接到UnicodeString).这样,就不再需要临时UnicodeString转换了. WideString和UnicodeString都编码为UTF-16(主要是这些,但我不会在这里进行编码),因此将它们连接在一起只是一个分配和移动的问题,就像将两个UnicodeStrings或两个WideStrings连接在一起一样.

猜你在找的Delphi相关文章