Delphi 通过引用传递数组

标签 delphi delphi-10.1-berlin

在 C++ 中,可以通过 const 引用将向量传递给函数:

void test(const std::vector<int>& a);

当向量非常大并且我想避免浪费时间来复制它时,这很有用。我知道Delphi中的相同代码是:

procedure test(const [Ref] a: array of Integer);

它是否也具有与 C++ 相同的效果(传递地址而不是副本并优化/节省时间)?这是唯一的方法还是还有其他方法可以优化参数传递?

最佳答案

procedure test(const a: array of Integer);

这是一个开放数组,传递为 const 。这些已经通过引用传递了。添加[ref]在这种情况下是不必要的。

只有当您按值传递开放数组时,才会创建副本:

procedure test(a: array of Integer);

为了完整起见,另一个选项是通过 var .

procedure test(var a: array of Integer);

这里数组是通过引用传递的,但是,与 const 不同数组,编译器允许修改其内容。

<小时/>

I know that the same code in Delphi is ...

这不太准确。可能是 C++ 的最佳映射 std::vector<T>是德尔福的TList<T> 。与 Delphi 开放数组参数最接近的匹配可能是 C++ 数组参数。您可以映射您的 Delphi 过程:

procedure test(const a: array of Integer);

这个 C++ 函数:

void test(const int a[], const size_t len);

所以你并没有真正进行同类比较。

也就是说,当您实际调用此类函数时,您很可能会使用 Delphi 动态数组,它们是托管类型。这意味着它们的生命周期由自动引用计数 (ARC) 管理,这将它们与原始 C++ 数组区分开来。

我现在有点胡言乱语了。我主要想表达的是细节决定成败。这些语言之间没有一个完美对应,因为这些语言之间存在细微的差异。

但是,抛开这些细微差别不谈,如果您希望在 Delphi 中有效地传递数组,那么 const开放数组将实现这一点。

关于Delphi 通过引用传递数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41159914/

相关文章:

delphi - FMX进度条颜色

delphi - 项目版本设置不断恢复

delphi - 我的自定义控件闪烁。是什么原因造成的以及如何消除它?

excel - 如何访问 Excel 中的一系列行?

delphi - 如何在Delphi中添加TLabel到菜单栏?

class - 通过类变量构造对象总是需要父类有构造函数吗?

mysql - 无法从局域网计算机连接到 mySql

delphi - 如何替换从 TCustomEdit 中删除的 protected 虚拟 DoTyping 方法?

android - FMX : How can I select a Fixed Font in Android

delphi - 如何在泛型类中声明枚举类型的集合类型