gpt4 book ai didi

delphi - 在Delphi中,参数传递给方法时是否按顺序求值?

转载 作者:行者123 更新时间:2023-12-03 14:37:04 25 4
gpt4 key购买 nike

Delphi 中是否定义了调用过程之前计算参数的顺序?

IOW,如果我有这个丑陋的代码(在遗留应用程序中发现类似的东西)......

function A(var err: integer): integer;
begin
err := 42;
Result := 17;
end;

Test(A(err), err);

... Test 是否保证接收参数 (17, 42) 还是也可以是 (17, undefined)?

<小时/>

编辑:

虽然 David 的示例使用 32 位和 64 位编译器返回不同的结果,但这(幸运的是)不会影响我的旧代码,因为 Test(A(err), err) 仅存储一个地址 寄存器中的 'err' ,编译器在调用 A(err) 之前还是之后执行此操作并不重要。

最佳答案

Delphi 中参数求值的顺序没有定义。

作为一个有趣的演示,以下程序具有不同的输出,具体取决于您的目标是 32 位还是 64 位代码:

program ParameterEvaluationOrder;

{$APPTYPE CONSOLE}

uses
SysUtils;

function SideEffect(A: Integer): Integer;
begin
Writeln(A);
Result := A;
end;

procedure Test(A, B: Integer);
begin
end;

begin
Test(SideEffect(1), SideEffect(2));
Readln;
end.

关于delphi - 在Delphi中,参数传递给方法时是否按顺序求值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11010456/

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