在 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/