Questions tagged «pass-by-reference»

通过引用传递是一种参数编组策略,通过该策略,变量在内存中的位置将传递给函数,而不是变量值的副本,尽管函数会出现在源代码中,以接收变量本身而不是指针。

7
哪个更有效:返回值与通过引用传递?
我目前正在研究如何编写有效的C ++代码,并且在函数调用方面,我想到了一个问题。比较此伪代码功能: not-void function-name () { do-something return value; } int main () { ... arg = function-name(); ... } 使用以下否则相同的伪代码函数: void function-name (not-void& arg) { do-something arg = value; } int main () { ... function-name(arg); ... } 哪个版本更有效,在哪个方面(时间,内存等)更有效?如果取决于,那么什么时候第一个会更有效率,什么时候第二个会更有效率? 编辑:就上下文而言,此问题仅限于与硬件平台无关的差异,并且大多数情况下也限于软件。是否存在与机器无关的性能差异? 编辑:我看不到这是重复的。另一个问题是比较按引用传递(上一个代码)与按值传递(下一个): not-void function-name (not-void arg) 这和我的问题不同。我的重点不是哪个是将参数传递给函数的更好方法。我关注的是这是更好的方式来传递出一个结果来自外部范围的变量。

2
R中的“修改时复制”语义到底是什么?规范来源在哪里?
偶尔我会遇到R具有修改时复制语义的概念,例如在Hadley的devtools Wiki中。 大多数R对象具有“修改时复制”语义,因此修改函数参数不会更改原始值 我可以将此术语追溯到R-Help邮件列表。例如,Peter Dalgaard在2003年7月写道: R是一种函数式语言,具有惰性评估和弱动态类型(变量可以随意更改类型:a <-1;允许a <-“ a”)。从语义上讲,尽管在实现过程中使用了一些优化技巧来避免最差的效率,但是一切都是按修改进行复制的。 同样,Peter Dalgaard在2004年1月写道: R具有修改时复制的语义(原则上有时在实践中),因此一旦对象的一部分发生更改,您可能必须在新的位置查找包含它的任何内容,包括对象本身。 再往前走,Ross Ihaka在2000年2月说: 我们投入了大量工作来实现这一目标。我将语义描述为“修改时复制(如有必要)”。仅在修改对象后才进行复制。(如有必要)部分意味着,如果我们可以证明修改不能更改任何非局部变量,那么我们就可以继续进行修改而无需复制。 它不在手册中 不管我多么努力,我都无法在R手册(R语言定义或R Internals)中找到“修改时复制”的参考。 题 我的问题分为两部分: 正式记录在哪里? 修改时复制如何工作? 例如,既然将诺言传递给函数,那么谈论“通过引用传递”是否合适?

7
通过引用在C中传递数组?
如何在C中通过引用传递结构数组? 举个例子: struct Coordinate { int X; int Y; }; SomeMethod(Coordinate *Coordinates[]){ //Do Something with the array } int main(){ Coordinate Coordinates[10]; SomeMethod(&Coordinates); }

9
在PHP(> = 5.0)中,通过引用传递速度更快吗?
在PHP中,可以通过在函数声明中的参数前面加上“&”号来通过引用传递函数参数,如下所示: function foo(&$bar) { // ... } 现在,我知道这并不是为了提高性能而设计的,而是允许函数更改通常不在其范围内的变量。 取而代之的是,PHP似乎使用写时复制来避免在对象被更改之前复制对象(也许还有数组)。因此,对于不更改其参数的函数,其效果应与您通过引用传递它们的效果相同。 但是,我想知道写时复制逻辑是否可能在传递引用时短路,并且这是否会对性能产生影响。 ETA:可以肯定的是,我认为它并不快,而且我很清楚这不是引用的目的。所以我想我自己的猜测很好,我是在寻找一个真正知道内幕下肯定正在发生什么的人的答案。在PHP开发的五年中,我总是发现很难通过阅读源代码来获取有关PHP内部的高质量信息。

9
您可以在R中通过引用吗?
您可以通过引用加上“ R”吗?例如,在以下代码中: setClass("MyClass", representation( name="character" )) instance1 <-new("MyClass",name="Hello1") instance2 <-new("MyClass",name="Hello2") array = c(instance1,instance2) instance1 array instance1@name="World!" instance1 array 输出是 > instance1 An object of class “MyClass” Slot "name": [1] "World!" > array [[1]] An object of class “MyClass” Slot "name": [1] "Hello1" [[2]] An object of class “MyClass” Slot "name": …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.