Questions tagged «pass-by-value»

传递值是一种“单向传递”,因此不会返回接收函数(或其他实体,如流程等)内部传递的值的修改。

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)中找到“修改时复制”的参考。 题 我的问题分为两部分: 正式记录在哪里? 修改时复制如何工作? 例如,既然将诺言传递给函数,那么谈论“通过引用传递”是否合适?

8
在python中模拟按值传递行为
我想模拟python中的按值传递行为。换句话说,我想绝对确保我编写的函数不会修改用户提供的数据。 一种可能的方法是使用深层复制: from copy import deepcopy def f(data): data = deepcopy(data) #do stuff 有没有更有效或更Python的方法来实现此目标,对传递的对象进行尽可能少的假设(例如.clone()方法) 编辑 我知道技术上python中的所有内容都是按值传递的。我对模拟行为很感兴趣,即确保我不会弄乱传递给函数的数据。我猜最一般的方法是使用其自身的克隆机制或Deepcopy来克隆所讨论的对象。

7
传递值然后移动构成一个坏习惯吗?
由于我们在C ++中具有移动语义,因此如今很常见 void set_a(A a) { _a = std::move(a); } 理由是,如果a是右值,则副本将被删除,并且只有一招。 但是,如果a是左值会怎样?似乎将有一个副本构造,然后是一个移动分配(假设A具有正确的移动分配运算符)。如果对象具有太多的成员变量,则移动分配的成本可能很高。 另一方面,如果我们这样做 void set_a(const A& a) { _a = a; } 将只有一份副本分配。如果我们要传递左值,是否可以说这种方法比按值传递惯用法更可取?

4
为什么C中的绝对值函数不接受const输入?
在C语言中,绝对值函数(接受浮点数)的原型为 float fabsf( float ); 为什么这个原型不接受一个常量值,像这样: float fabsf( float const ); fabsf不会更改输入的值,对吗? 如果我有一个接受输入并调用fabsf的函数,我是否被迫避免将输入指定为const? 在这种情况下,处理const正确性的适当方法是什么?


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.