gpt4 book ai didi

delphi - 为什么在过程中使用局部变量而不是 var 参数?

转载 作者:行者123 更新时间:2023-12-03 14:48:31 26 4
gpt4 key购买 nike

o在 Delphi SysUtils 中是一个 ScanBlanks 过程:

procedure ScanBlanks(const S: string; var Pos: Integer);
var
I: Integer;
begin
I := Pos;
while (I <= Length(S)) and (S[I] = ' ') do Inc(I);
Pos := I;
end;

我想知道为什么该过程使用 I 变量。我们不能直接使用use Pos var吗?

procedure ScanBlanks(const S: string; var Pos: Integer);
begin
while (Pos <= Length(S)) and (S[Pos] = ' ') do Inc(Pos);
end;

是因为速度/内存损失吗?有经验的人可以向我解释原因/差异吗?

最佳答案

除了性能之外,在编写良好的代码中,这两个函数之间没有区别。

但是,在编写糟糕的代码中,存在巨大差异。使用局部变量可以更容易地推断函数的正确性。 SPos 在内存中可能会重叠。您是否想预测如果 Inc(Pos); 修改字符串的内容或长度,过程将如何表现?

使用局部变量可以很容易地准确地看到将会发生什么。我当然同意 SPos 重叠将是对该过程的可怕误用,但过程的行为应该与其规范相匹配,因此规范应该不允许这样的输入值,或者即使存在这样的输入值,过程也应该按照指定的方式运行。获取什么有效、什么无效的精确细节是很棘手的。使该过程在所有情况下都按指定方式工作很容易。

关于delphi - 为什么在过程中使用局部变量而不是 var 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35398289/

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