问题标签 [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 投票
8 回答
5216 浏览

c++ - 通过值或引用传递给需要存储副本的 C++ 构造函数?

当 C++(隐式或显式)值构造函数需要以任何一种方式在其对象中存储参数的副本时,是否应该通过值或引用到常量来接受其参数?

这是我能想到的最短的例子:

这里的想法是,我想在创建 foo 对象时以任何可能创建 foo 对象的各种方式来最小化对 bar 的复制构造函数的调用。

请注意,我确实对复制省略和(命名的)返回值优化有所了解,并且我已经阅读了“想要速度?按值传递”,但是我认为这篇文章没有直接解决这个用例。

编辑:我应该更具体。

假设我不知道sizeof(bar),或者是否bar是基本的内置类型(bar可能是模板参数,并且foo可能是类模板而不是类)。此外,不要假设foo' 构造函数可以内联(或bar' ,就此而言)。请假设我至少可能正在使用实现 RVO 的编译器。

我想要的是有可能(给定编译器优化)这样的调用不会调用任何对bar' 的复制构造函数的调用(即使_b(b)foo' 的初始化列表中执行时):

foo是否有可能(给定 C++98 标准)可以做到这一点,如果是这样,如果通过对 const 的引用而不是通过值接受其参数,它或多或少可能会起作用?

0 投票
7 回答
25107 浏览

c++ - f(const string &) 和 f(const string) 有什么区别吗?

考虑到上面的例子,我们不能修改传递引用变量,也不能修改传递值变量。每种方法的输出都是一样的。既然这两种方法没有区别,为什么C++两种方法都支持?

谢谢。

0 投票
2 回答
125 浏览

c# - 将 .net COM 包装器添加到按值缓存而不是按引用缓存

在我的代码中,我通过 COM 接口实例化了一个遗留的 Delphi 对象。此类需要多次实例化,因此为了降低实例化的开销,我将其缓存在所有调用的 70% 具有公共结果对象的位置。

但是,当我在缓存后更改对象时,更改也会保留在缓存中。这让我觉得 COM 包装器实例是通过 ref 而不是按值传递的。
如何确保缓存中的对象是通过值而不是通过 ref 传递的?

0 投票
4 回答
1787 浏览

java - 带有缓存层的 Java 对象引用

我们已经为我们的 J2EE 应用程序创建了一个缓存层。在本例中,我们使用 Ehcache。这带来了一些挑战。

让我们举这个例子。

如果我们不小心,对这些对象中的任何一个所做的任何更改都会影响另一个(它们引用同一个对象)。将 orderitem 保存回数据库将使其具有 status=2

我们如何以最好的方式解决这个问题?

我们尝试为每个对象创建一个 .copyObject() 方法。它只是创建一个新对象并设置所有值。但这似乎不是一个好的解决方案。

这个例子只是为了说明。代码远比这复杂,但结果是一样的。

************************更新 15.07.2010 ************************ ******************************

在 EHCache 2 中有一些选项可以打开 copyRead() 和 copyWrite()。这解决了我所有的问题:)

0 投票
8 回答
137914 浏览

php - PHP 中的数组是作为值复制还是作为对新变量的引用,以及何时传递给函数?

1)当数组作为参数传递给方法或函数时,它是通过引用传递还是通过值传递?

2)将数组分配给变量时,新变量是对原始数组的引用,还是新副本?
这样做怎么办:

$b参考$a吗?

0 投票
3 回答
1362 浏览

c++-cli - 如何创建包含按值传递的列表(或类似)的 CLI 值类?

我们有一个 C++ 库,它使用一个包含结构体的 STL 向量的结构体,如下所示:

我正在为该库编写一个 CLI 包装器,并且我想要上述结构类型的等价物。我一直在考虑使用 List 作为向量的等价物,如下所示:

但是由于 List<T> 是引用类型,因此列表是通过引用而不是值传递的。有没有办法创建一个包含按值传递的列表(或类似列表)以及其他成员的 CLI 类?

0 投票
8 回答
270 浏览

c++ - C++ 中的指针和函数

来自大学课程的讲义,关于“按价值调用”:

会将 n 的值更改为 100。

当我们说“int *ip”时,我们究竟是什么意思?整数类型的指针?如果是这样,当我们以 np 为参数调用 fun() 时,由于 np 的地址不是整数,不应该有错误吗?

然后,我们将 ip 的值更改为 100,这是否意味着 n 现在具有地址为 100 的“内存槽”中的值?我确定我错过了一些东西。:)

0 投票
4 回答
3914 浏览

c++ - 引用传递比值传递更昂贵

在 C++ 中是否存在按引用传递比按值传递更昂贵的情况?如果是这样,那会是什么情况?

0 投票
8 回答
139432 浏览

c++ - 如何将对象传递给 C++ 中的函数?

我是 C++ 编程的新手,但我有 Java 方面的经验。我需要有关如何将对象传递给 C++ 中的函数的指导。

我是否需要传递指针、引用或非指针和非引用值?我记得在 Java 中没有这样的问题,因为我们只传递了持有对对象的引用的变量。

如果您还可以解释在哪里使用这些选项,那就太好了。

0 投票
4 回答
226 浏览

c++ - C++ 函数取值,它们应该取值

我刚刚学习 c++,并且来自 c,我在书中看到的一些函数调用让我感到困惑:

在 C 中,这不可能工作,如果你这样做,将无法获得输出,因为你是按值传递,而不是按引用传递,为什么这在 c++ 中有效?引用和取消引用是隐式的(编译器知道 cin.get 需要一个指针,所以它被引用了)?