gpt4 book ai didi

Delphi - System.Copy 良好实践

转载 作者:行者123 更新时间:2023-12-03 15:31:00 25 4
gpt4 key购买 nike

据我所知,Delphi 中的字符串是 1,0 位置是为长度保留的。我负责一个用D5和D2006编写的庞大应用程序,它正在使用复制功能,从0索引开始复制,而几个同事此刻也在这样编码。因为这是 Delphi 的“神奇”功能,所以我相信即使使用 Copy 从 0 索引复制字符串,在幕后它也会从位置 1 复制它。

对我来说,一个好的做法是从第 1 个位置复制字符串,而不是从 0 个位置复制,即使结果是相同的。

现在,我的问题是,通过使用从 0 位置复制功能而不是从 1 位置复制功能传递到其他 Delphi 版本时,应用程序是否会受到影响?

最佳答案

当将 0 作为 Index 参数传递给字符串的 Copy 时,Delphi RTL 会忽略您。当您为 Index 传递 0 或更少值时,RTL 使用值 1。所以你所做的事情是良性的,因为传递 1 或任何小于 1 的值之间没有明显的行为差异。但是,在 Delphi 和我中使用 0 作为字符串索引肯定会令人困惑建议不要这样做。

在伪代码中,Copy 的实现如下所示:

function Copy(s: string; Index, Count: Integer): string;
begin
if Index<1 then
Index := 1;
dec(Index);//convert from 1-based to 0-based indexing
....continues

事实上,实际的实现有点复杂,但上面的伪代码给出了正确的语义。

您关于存储在索引 0 处的长度的评论对于旧式短字符串来说是正确的。但对于长字符串则不然。事实上,正是这个事实导致了相当奇怪的情况,即字符串是从 1 开始的,但动态数组、列表等是从 0 开始的。

关于Delphi - System.Copy 良好实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9824294/

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