问题标签 [pass-by-const-reference]
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++ - 如何修改/更新由 const 引用传递的对象的内部状态
通过 const 引用传递对象意味着我们不能修改它的任何成员。但是假设对象包含一个vector<string>
成员。vector<string>
假设vector<string>::iterator
还需要一个成员并且必须在每次读取后更新以指向向量中的下一个元素,我们如何编写 const 方法来读取成员的内容?
这是可能的,还是在这种情况下有另一种方法?也就是说,不要修改通过 const 引用对象传递的内容,但对象应该能够更新它的内部状态(即要读取的向量中的下一个元素)。
parameter-passing - 理解按值结果调用和按引用调用的区别
所以我有这段帕斯卡代码:
(假设'print'打印由空格分隔的数组元素,然后打印一个新行,并且对于一个整数它只打印它)
而且我试图了解如果函数调用是通过值结果或通过引用,输出会有多么不同。
显然,如果它只是按值,很容易看出该过程不会对实际参数产生任何影响,即输出(按值)应该是:5 10 3 5 10 3。
我认为,如果它是价值结果,至少是第一次迭代:12 12 12。在引用的情况下,我感到困惑。那会是什么?
c++ - 什么时候一个对象足够大以至于通过引用而不是值传递它可以获得性能提升?
正如查尔斯贝利在这个问题中回答的那样,当对象类型很大但什么样的对象被认为是大时,应该考虑通过常量引用传递?
编辑: 可以提供更多可用于提供更具体答案的数据,我决定在此描述中添加一个真实世界的问题。
假设我们有一个像这样的对象:
我们还有另一个像这样的对象:
dipllist
在哪里typedef QList<dipl> dipllist;
。对象dipl
和bidipl
创建一次,但每分钟可能访问超过 100 次。那么我们应该如何传递dipl
给我们的 append 函数呢?
或者
pass-by-reference - 如果变量作为常量传递,它会通过引用传递吗?
如果我将变量作为常量传递,它会自动通过引用传递吗?
我已经可以像这样通过引用传递变量:
理想情况下,我想要如下代码:
c++ - 哪个更快?按引用传递与按值传递 C++
我认为按引用传递应该比按值传递更快,因为计算机没有复制数据,它只是指向数据的地址。
但是,请考虑以下 C++ 代码:
现在这段代码只是一个普通程序,它通过输入三角形的所需行和位置递归地计算帕斯卡数。
我尝试放置第 50 行和第 7 位,它计算大约 1 秒(按值传递)。输出大约是 1300 万,这是正确的。所以我认为如果我通过引用传递它可能会更快,因为它不需要复制大量数据。但这是非常错误的,我不知道为什么它需要更长的时间,大约是传递价值所需时间的 3 倍。问题是 ...
为什么在我尝试将其更改为通过 const 引用传递后,该程序的计算速度如此之慢?
因为递归函数是一个例外,你应该通过值而不是 const 引用传递,这有关系吗?
c++ - 通过 const 引用传递动态数组的结构
如果我在 C++ 中有一个包含动态分配数组的结构,例如:
如何通过引用函数来传递它,以便函数aFoo.p[]
不能修改存储的值?
如果我声明int func(foo const& aFoo) { ... }
,如果我尝试修改指针aFoo.p
,我会收到编译器错误,但如果我尝试修改,例如aFoo.p[0]
. 我还可以分配一个新指针int* p2 = aFoo.p
并通过它修改值aFoo.p[]
。
int* const& p
如果我只是传递指针,我相信这将是传递and之间的区别const int* const& p
,但我不确定在这种情况下如何在没有在结构定义中将 member 声明p
为 a的情况下执行此操作const int*
(这会导致其他部分的复杂化编码)。
c++ - 传递临时参数时,常量引用参数会发出警告
以下代码警告我将临时参数作为参数传递给接受引用的函数:
这让我感到困惑,因为Function
实际上是在接受一个const TempObject::reference
. 更改 to 的定义TempObject::reference
会typedef const TempObject& reference
导致编译器不再发出警告。
为什么有区别?我在 Microsoft 和 Intel 的编译器中发现了这种行为。
c++ - 禁止通过构造函数将右值绑定到成员 const 引用
我正在研究一个矩阵视图类,其中的构造函数将矩阵作为参数并将其绑定到const
引用成员。我非常想避免绑定右值,因为它们不是通过构造函数参数绑定的,我们最终会得到一个悬空引用。我想出了以下(简化代码):
基本上我删除了const Foo&&
作为参数的构造函数。请注意,我需要,const
否则有人可能会const Foo
从函数返回,在这种情况下,它将绑定到const Foo&
构造函数。
问题:
这是禁用右值绑定的正确范例吗?我错过了什么吗?
c++ - 在构造函数中按值或 const 引用传递的参数
哪个构造函数更适合以下类?
在没有任何编译器优化的情况下,它们是仅复制 val 一次还是构造函数 2 在初始化列表之前创建进一步的副本?
c++ - 按值或 const ref 传递 std::shared_ptr 然后存储在容器中?
考虑以下向量:
以及将给定元素添加到向量的以下两个函数:
我的理解是,这两个函数都将 a 推shared_ptr
入X
向量中,从而增加X
. 第一个函数导致引用计数的额外增加和减少,但这是不必要的。
我的理解正确吗?因此,第二种选择更可取吗?