在C++中,可以通过const引用将向量传递给函数:
void test(const std::vector<int>& a);当向量很大时,这是有用的,我想避免浪费时间复制它。我知道Delphi中的相同代码是:
procedure test(const [Ref] a: array of Integer);它是否也具有与C++相同的效果(传递地址而不是副本,并优化/节省时间)?这是唯一的方法,还是还有其他方法来优化参数传递?
发布于 2016-12-15 09:45:31
procedure test(const a: array of Integer);这是一个打开的数组,作为const传递。这些文件已以参考方式通过。在这种情况下添加[ref]是不必要的。
只有当您按值传递打开的数组时,才会复制:
procedure test(a: array of Integer);为了完整起见,另一种选择是通过var。
procedure test(var a: array of Integer);在这里,数组是通过引用传递的,但是,与const数组不同的是,编译器允许修改其内容。
我知道德尔菲里同样的代码是..。
不太准确。从C++ std::vector<T>到Delphi的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打开的数组就可以实现这一点。
发布于 2016-12-15 09:05:00
您混淆了打开的数组参数和动态数组。这里没有必要使用[Ref]。
打开的数组参数实际上作为两个参数传递。
High()值。C++中的向量是一个类。它像Delphi中的一个类一样通过,但是一致性是不同的。在Delphi中,即使将类作为const传递,它的方法仍然可以调用。在Delphi中,类实例已经是引用了。不需要[Ref]。
关于打开的数组参数在我的文章里的更多信息。
https://stackoverflow.com/questions/41159914
复制相似问题