gpt4 book ai didi

delphi - 开放数组参数、类和字符串是否通过引用传递?

转载 作者:行者123 更新时间:2023-12-03 14:52:57 24 4
gpt4 key购买 nike

我读到开放数组参数是通过引用自动传递的。对于类和字符串来说这是同样的事情还是我必须使用 var?

我指的是我想通过引用向函数(或过程)传递参数。就像在 C++ 中一样,我总是传递 std::string& 例如,它是显式的,否则我传递一个副本

最佳答案

您关于开放数组的说法不正确。开放数组参数有以下三种形式:

procedure ByValue(arr: array of Integer);
procedure ConstParam(const arr: array of Integer);
procedure VarParam(var arr: array of Integer);

最后两种形式,var 和 const,传递对数组的引用。然而,第一个按值传递,传递一个副本。如果你想避免复制,那么你应该使用 var 或 const 参数。根据您是否希望修改调用者的数组来选择这些选项。

对于类和字符串,这些类型是引用类型。由于它们已经是引用,因此当您将它们传递给过程时,您就是在传递引用。

让我们看看类的各种可能性:

procedure ByValue(obj: TObject);
procedure ConstParam(const obj: TObject);
procedure VarParam(var obj: TObject);
procedure OutParam(out obj: TObject);

对于ByValueConstParam,直接传递引用。两者的区别在于,在ConstParam的实现中,引用不能被修改。它可以在 ByValue 中。调用者看不到该修改。当然,您始终可以调用 obj 上的方法来修改对象的状态。实际上,使用 const 作为引用类型没有什么意义。

对于VarParamOutParam,传递的是引用的地址。因此,该过程接收一个指向该对象的指针。所有的指针处理对您来说都是隐藏的。但这就是允许您修改引用并让调用者看到该修改的原因。

字符串也是引用类型,因此处理方式类似。

关于delphi - 开放数组参数、类和字符串是否通过引用传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43890735/

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