问题标签 [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++ 中的自动评估策略选择
考虑以下函数模板:
T
如果碰巧是整数类型,或者至少是复制成本低的类型,则按值传递语义是有意义的。另一方面,如果T
碰巧是要复制的昂贵类型,则使用 pass-by-[const]-reference 语义更有意义。
让我们假设您正在编写一个库。理想情况下,作为库实现者,您的工作是为您的消费者提供尽可能通用和高效的干净 API。那么,你如何提供一个通用接口来满足这两种类型的参数传递策略呢?
这是我第一次尝试让它工作:
典型用法:
当然,这间接破坏了非类模板的隐式模板参数推导:
这可以通过Boost.Typeof
库和宏来“修复”,例如WinAPI
:
虽然这只是一个准便携式黑客。
如您所见,我的一般方法并非对所有情况都真正令人满意。
作为一名业余程序员,我既没有实际经验,也无法获得生产质量的代码以供参考。我也意识到这似乎是过早优化的一个糟糕案例,但我真的对几件事感兴趣:
- 您过去是否或曾经使用过这种类型的优化*?
- (或任何其他公共)库是否
Boost
已经提供了类似的功能? - 如果#1 或#2 的答案是“是”——如何处理非类模板案例?
- 有没有我没有看到这样的明显陷阱?
- 最后,这甚至是明智的做法吗?
* 没有描述。;)
c++ - 通过引用传递的问题
我可以重载一个接受引用或变量名的函数吗?
例如,当我尝试这样做时:
我希望这个函数的调用者能够做到:
我想编写传递引用函数以更好地使用内存并可能在范围外操作变量,但不必创建一个新变量就可以调用该函数。
这可能吗?
干杯
java - “通过引用”编辑对象的好习惯?
假设我有一个名为Superstar
. 现在我想要一个方法来完成一些工作并编辑Superstar
对象的一些属性。
以下是我如何实现这一点的两种方法。方式1如下:
方式2是这样的:
这两种可能的方式中的哪一种被认为是“最佳实践”?第一个,还是第二个伪“通过引用”?
c - C 编程 - 引用传递
在下面的 C 程序中,我不明白为什么在我调用 foo.buf[0] = 'A' 之后。foo 不是在做值传递吗?
输出:
java - 为什么我的 Java 方法不能更改传递的变量?
当我看到以下代码没有按预期工作时,我有点困惑。
我认为Java总是通过引用将变量传递给函数。因此,为什么函数不能重新分配变量?
该程序输出null
.
c# - 通过副本或参考传递?
我对 C# 有点陌生,只是想知道是否有一个默认作为副本传递的类列表(常用)。我怎样才能识别它们?
我知道基本的基本对象类型——int、uint、float、strings……——是通过复制传递的。
c# - 在 C# 中传递数组参数:为什么它是通过引用隐式传递的?
假设以下代码,没有任何ref
关键字,显然不会替换传递的变量,因为它是作为值传递的。
现在要使该功能按预期工作,可以ref
像往常一样添加关键字:
现在我很困惑为什么数组成员在传入函数时是通过引用隐式传递的。数组不是值类型吗?
php - 返回值或修改引用?
我以前都见过,据我所知,这非常主观,但如果可以选择,你会做什么,为什么?如果数据很大,其中一个对速度/内存有什么好处吗?
或者
c++ - C++ 指针问题
我有一个指针问题,我似乎无法弄清楚。似乎我已经以这种方式使用了 1000 次指针,所以我不太确定这里发生了什么。我有以下代码:
每当我调用 GetCCOrderLine 时,我都会进入函数内部,并将有效值分配给指针 cycleOrder 和 cycleLine。当我走出函数 GetCCOrderLine 时,引用再次为 NULL。下面的代码是 GetCCOrderLine 的定义方式:
头文件
.cpp 文件
此外,在上述代码中访问的两个数组以及用于为传入的指针赋值的两个数组声明如下。这些数组也填充了使用 new 运算符创建的对象: