问题标签 [pass-by-value]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
3346 浏览

java - 将对象传递给java中的方法似乎是通过引用(而Java是通过val)

我认为当您将对象传递给 Java 中的方法时,它们应该是按值传递的。

这是我的代码:

此时,对mTiles对象的任何更改都会反映回瓦片对象。任何想法如何解决这一问题?

谢谢大家。

0 投票
2 回答
627 浏览

c++ - 按值传递对象到另一个线程

我正在编写一个小试验项目,我需要将 QueuList 类型的对象按值传递给线程池线程。它是一个 Boost 线程池,我正在使用 Bind 将参数传递给线程。

出于某种原因,我似乎无法将我的项目按值传递给线程池线程......

谁能帮助我做错了什么?

我想按值传递的原因是,每个线程池线程都有它自己的对象副本,因为指针被第一个函数从列表中删除,如果我通过引用传递,这将导致错误。

0 投票
2 回答
221 浏览

c++ - C++ 中的模板参数

假设我有任意模板方法,它可以按值const 引用接收参数 (显然,对于普通类型和相应的对象)。

在编写模板函数原型时如何处理这种情况?

我可以做类似的事情:

但是这种方法只适用于琐碎的函数,它们纯粹作为一些其他调用的包装器。

如果函数(非模板版本)里面有很多代码,这意味着我必须复制代码两次。

我可以在这里做一些更聪明的事情吗?

0 投票
3 回答
539 浏览

c - OS X 上的 malloc 问题

我已经编写了一些在 OS X 10.6 上运行的 C 代码,它恰好很慢,所以我使用 valgrind 来检查内存泄漏等。我在执行此操作时注意到的一件事:

如果我将内存分配给这样的二维数组:

然后检查矩阵的内存地址是0x0。

但是,如果我这样做

这很好用,即返回指向新创建内存的指针。

当我还有一个free2D函数来释放内存。它似乎没有正确释放。即指针仍然指向与调用free 之前相同的地址,而不是0x0(我认为这可能是默认值)。

我的问题是:我是否误解了 malloc/free 的工作方式?否则有人可以建议发生了什么?

亚历克斯

0 投票
3 回答
140 浏览

php - 是否有简单的 PHP 代码来区分“将对象作为引用传递”与“将对象引用作为值传递”?

这与问题有关:“&”运算符如何在 PHP 函数中工作?

是否有简单的代码来显示两者之间的区别

将对象作为参考传递

对比

将对象的引用作为值传递?

0 投票
3 回答
251 浏览

php - 在 PHP 中,当 $foo = new Foo() 时,从技术上讲,$foo 是一个对象,还是 $foo 一个引用?

更新:在

http://php.net/manual/en/language.oop5.references.php

它说:

常被提及的 PHP5 OOP 的关键点之一是“对象默认通过引用传递”。这并不完全正确。

这是为什么?以下是我不知道是否完全正确的原因:

我认为松散地说,foo 可以说是一个对象,或者类 Foo 的一个实例。

但是从技术上讲,foo 只是一个引用,这在 Java 和 Ruby 中的方式完全相同,其中变量foo始终只是对对象的引用,这是真的吗?

这就是为什么在 PHP 中,

我们没有说“通过引用传递”,但从技术上讲,我们是在传递一个值,这是一个引用。因此,它是“通过引用”,而不是“通过引用”。

但是,如果我们在 PHP 中说 foo 是一个对象,那么我想“通过引用传递”是有道理的。这是真的吗?foo 据说是对对象的引用,而不是对象,所以这就是为什么我们只是“按值传递”?

0 投票
3 回答
3316 浏览

java - Java递归:通过引用传递

我意识到这对于 Java 程序员来说是一个激烈争论、有争议的话题,但我相信我的问题有些独特。我的算法需要通过引用传递。我正在对一般树(即n-children)进行顺时针/逆时针前序遍历以分配虚拟(x,y)坐标。这仅仅意味着我在访问它们时计算(并标记)我访问的树的节点。

这里我生成树的结构:

这是我打印节点遍历的顺序及其分配给各个节点的坐标时的输出。

0 3 2 5 4 1
0 1 2 3 4 3

0 1 2 4 5 3
0 1 2 3 4 3

注意:前两行是顺时针前序遍历和 x 坐标的分配。接下来的两行是逆时针前序遍历和 y 坐标的分配。

我的问题是如何让第二行阅读: 0 1 2 3 4 5

编辑 1:这是我用来打印访问节点的顺序和分配的坐标的代码。

这里还有一个更好地解释 x,y 坐标的引用。顶点。顶点的 y 坐标。

计算 T 的顶点的逆时针预排序(排序从 0 到 n - 1 编号),将它们用作顶点的 x 坐标。

计算 T 的顶点的顺时针预排序(排序从 0 到 n - 1 编号),将它们用作顶点的 y 坐标。

0 投票
4 回答
8145 浏览

matlab - 如何修改函数中的数组?

MATLAB 是一种按值传递的语言。我有一个处理像素邻居的递归函数。每次调用函数时制作图像的副本(在我的情况下是两个图像)非常昂贵。

我使用全局变量来解决问题。有没有其他方法可以使递归函数修改数组?

0 投票
3 回答
230 浏览

java - Java 是 Pass-By-Value 和 Pass-By-Reference 两者

可能重复:
Java 是否通过引用传递?

请尽快告诉我答案!!!

0 投票
1 回答
10492 浏览

c++ - 构造函数的最佳形式?通过值或引用传递?

我想知道我的构造函数的最佳形式。这是一些示例代码:

据我了解,这是编译器在每种情况下可以做的最好的事情。

(1a) y 被复制到 x1.m_y (1 份)

(1b) y复制到X的构造函数的参数中,然后复制到x1.m_y(2份)

(1c) y 被移动到 x1.m_y (1 move)

(2a) f() 的结果被复制到 x2.m_y 中(1 份)

(2b) f()被构造成构造函数的参数,然后复制到x2.m_y(1份)

(2c) f() 在栈上创建,然后移入 x2.m_y (1 move)

现在有几个问题:

  1. 在这两个方面,通过 const 引用传递并不差,有时甚至比通过值传递更好。这似乎与“想要速度?传递价值”的讨论背道而驰。. 对于 C++(不是 C++0x),我应该坚持这些构造函数的 const 引用传递,还是应该按值传递?对于 C++0x,我应该通过右值引用而不是按值传递吗?

  2. 对于 (2),我更喜欢将临时对象直接构建到 x.m_y 中。即使是我认为的右值版本也需要移动,除非对象分配动态内存,否则它的工作量与副本一样多。有没有办法对此进行编码,以便允许编译器避免这些复制和移动?

  3. 我对我认为编译器可以做得最好的事情和我的问题本身都做了很多假设。如果它们不正确,请更正其中的任何一个。