在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._WStrCat()函数用于将WideString连接到WideString(以及用于UnicodeString的System._UStrCat()).如果CodeGear / Embarcadero更聪明,他们可能实现了一个System._WStrCat()重载,它将UnicodeString作为输入,将WideString作为输出(反之亦然,将WideString连接到UnicodeString).这样,就不再需要临时UnicodeString转换了. WideString和UnicodeString都编码为UTF-16(主要是这些,但我不会在这里进行编码),因此将它们连接在一起只是一个分配和移动的问题,就像将两个UnicodeStrings或两个WideStrings连接在一起一样. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |