问题标签 [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.
c++ - 通过值或引用传递给需要存储副本的 C++ 构造函数?
当 C++(隐式或显式)值构造函数需要以任何一种方式在其对象中存储参数的副本时,是否应该通过值或引用到常量来接受其参数?
这是我能想到的最短的例子:
这里的想法是,我想在创建 foo 对象时以任何可能创建 foo 对象的各种方式来最小化对 bar 的复制构造函数的调用。
请注意,我确实对复制省略和(命名的)返回值优化有所了解,并且我已经阅读了“想要速度?按值传递”,但是我认为这篇文章没有直接解决这个用例。
编辑:我应该更具体。
假设我不知道sizeof(bar)
,或者是否bar
是基本的内置类型(bar
可能是模板参数,并且foo
可能是类模板而不是类)。此外,不要假设foo
' 构造函数可以内联(或bar
' ,就此而言)。请假设我至少可能正在使用实现 RVO 的编译器。
我想要的是有可能(给定编译器优化)这样的调用不会调用任何对bar
' 的复制构造函数的调用(即使_b(b)
在foo
' 的初始化列表中执行时):
foo
是否有可能(给定 C++98 标准)可以做到这一点,如果是这样,如果通过对 const 的引用而不是通过值接受其参数,它或多或少可能会起作用?
c++ - f(const string &) 和 f(const string) 有什么区别吗?
考虑到上面的例子,我们不能修改传递引用变量,也不能修改传递值变量。每种方法的输出都是一样的。既然这两种方法没有区别,为什么C++两种方法都支持?
谢谢。
c# - 将 .net COM 包装器添加到按值缓存而不是按引用缓存
在我的代码中,我通过 COM 接口实例化了一个遗留的 Delphi 对象。此类需要多次实例化,因此为了降低实例化的开销,我将其缓存在所有调用的 70% 具有公共结果对象的位置。
但是,当我在缓存后更改对象时,更改也会保留在缓存中。这让我觉得 COM 包装器实例是通过 ref 而不是按值传递的。
如何确保缓存中的对象是通过值而不是通过 ref 传递的?
java - 带有缓存层的 Java 对象引用
我们已经为我们的 J2EE 应用程序创建了一个缓存层。在本例中,我们使用 Ehcache。这带来了一些挑战。
让我们举这个例子。
如果我们不小心,对这些对象中的任何一个所做的任何更改都会影响另一个(它们引用同一个对象)。将 orderitem 保存回数据库将使其具有 status=2
我们如何以最好的方式解决这个问题?
我们尝试为每个对象创建一个 .copyObject() 方法。它只是创建一个新对象并设置所有值。但这似乎不是一个好的解决方案。
这个例子只是为了说明。代码远比这复杂,但结果是一样的。
************************更新 15.07.2010 ************************ ******************************
在 EHCache 2 中有一些选项可以打开 copyRead() 和 copyWrite()。这解决了我所有的问题:)
php - PHP 中的数组是作为值复制还是作为对新变量的引用,以及何时传递给函数?
1)当数组作为参数传递给方法或函数时,它是通过引用传递还是通过值传递?
2)将数组分配给变量时,新变量是对原始数组的引用,还是新副本?
这样做怎么办:
是$b
参考$a
吗?
c++-cli - 如何创建包含按值传递的列表(或类似)的 CLI 值类?
我们有一个 C++ 库,它使用一个包含结构体的 STL 向量的结构体,如下所示:
我正在为该库编写一个 CLI 包装器,并且我想要上述结构类型的等价物。我一直在考虑使用 List 作为向量的等价物,如下所示:
但是由于 List<T> 是引用类型,因此列表是通过引用而不是值传递的。有没有办法创建一个包含按值传递的列表(或类似列表)以及其他成员的 CLI 类?
c++ - C++ 中的指针和函数
来自大学课程的讲义,关于“按价值调用”:
由
会将 n 的值更改为 100。
当我们说“int *ip”时,我们究竟是什么意思?整数类型的指针?如果是这样,当我们以 np 为参数调用 fun() 时,由于 np 的地址不是整数,不应该有错误吗?
然后,我们将 ip 的值更改为 100,这是否意味着 n 现在具有地址为 100 的“内存槽”中的值?我确定我错过了一些东西。:)
c++ - 引用传递比值传递更昂贵
在 C++ 中是否存在按引用传递比按值传递更昂贵的情况?如果是这样,那会是什么情况?
c++ - 如何将对象传递给 C++ 中的函数?
我是 C++ 编程的新手,但我有 Java 方面的经验。我需要有关如何将对象传递给 C++ 中的函数的指导。
我是否需要传递指针、引用或非指针和非引用值?我记得在 Java 中没有这样的问题,因为我们只传递了持有对对象的引用的变量。
如果您还可以解释在哪里使用这些选项,那就太好了。
c++ - C++ 函数取值,它们应该取值
我刚刚学习 c++,并且来自 c,我在书中看到的一些函数调用让我感到困惑:
在 C 中,这不可能工作,如果你这样做,将无法获得输出,因为你是按值传递,而不是按引用传递,为什么这在 c++ 中有效?引用和取消引用是隐式的(编译器知道 cin.get 需要一个指针,所以它被引用了)?