如果使用引用的目的是更改原始变量的值,为啥要使用 const 引用传递? [C++] [重复]

Posted

技术标签:

【中文标题】如果使用引用的目的是更改原始变量的值,为啥要使用 const 引用传递? [C++] [重复]【英文标题】:Why use pass by const reference if the point of using reference is to change original variable's value? [C++] [duplicate]如果使用引用的目的是更改原始变量的值,为什么要使用 const 引用传递? [C++] [重复] 【发布时间】:2014-12-13 23:17:11 【问题描述】:

C++:

例如,如果我们想更改实际变量的值,则使用“按引用传递”。

那么“通过 const 引用”有什么用呢?它说它不允许我们改变变量的值。

好的。那么为什么不首先使用“按值传递”呢? :/“按值传递”也不会改变变量的值。它会改变临时副本的值。

那么为什么要使用 CONST 参考呢? o_O?我希望你能得到我。

请帮我解开疑惑。

【问题讨论】:

如果按值传递,则必须调用复制构造函数。对于像 int 这样的东西,它真的很简单,但是像数千字节的字符串这样的东西复制起来相当繁重,而如果你传入引用,从技术上讲,你只需要以更好的语法传入指向该内存的指针 【参考方案1】:

我假设你的意思是为什么这样做

int foo(int const& bar)

而不是

int foo (int bar)

如果这是您的问题,则使用引用传递,这样就不需要制作副本。在上面的例子中,它是微不足道的,因为参数是int。但如果它是一个大的vectormap,你肯定不想按值传递,因为它会复制。

因此,如果您只想通过引用传递以避免复制,但不希望变量可变,则可以将其设为 const 引用。

【讨论】:

"你当然不想按值传递,因为它会复制。"但有时你需要一份副本。 嗨。非常感谢您这么快回复。我还有一个问题。编辑:我想我明白了。我今天太糊涂了。在创建此主题之前,我也阅读了其他类似的问题。

以上是关于如果使用引用的目的是更改原始变量的值,为啥要使用 const 引用传递? [C++] [重复]的主要内容,如果未能解决你的问题,请参考以下文章

原始值和引用值

js中 原始值和引用值

javaScript面向对象

深浅拷贝

如何通过引用有状态小部件来传递数据?我想更改有状态小部件中的变量并更新原始变量

ECMAScript 基础注意点