加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在Delphi中将UnicodeString附加到WideString

发布时间:2020-12-15 04:11:42 所属栏目:大数据 来源:网络整理
导读:我很好奇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 intereste
我很好奇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连接在一起一样.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读