通过引用传递使用 const 有啥意义? C++ [重复]

Posted

技术标签:

【中文标题】通过引用传递使用 const 有啥意义? C++ [重复]【英文标题】:What is the point of const being used with pass by reference? C++ [duplicate]通过引用传递使用 const 有什么意义? C++ [重复] 【发布时间】:2013-10-13 18:58:32 【问题描述】:

我正在阅读一本关于 C++ 的书,其中有一个示例,他们通过引用将常量传递给函数。

int square(const int& n)
 ...

我看不出这有什么意义?如果您不打算对变量进行任何更改,为什么不直接按值传递它。不是通过引用传递的全部意义,因此您可以更改变量的值。

【问题讨论】:

按值传递复制,与 int 无关。 一个对象的复制成本可能很高(例如考虑一个大向量)。通过引用传递(无论是否为 const)节省了制作副本的成本。 const 引用用于避免不必要的对象复制。但是,我认为,对于原始数据类型,它对任何类型的性能都没有帮助。 【参考方案1】:

对于 int 可能没有真正的区别。但是对于更大的数据类型,传递 const 引用是一种性能优化。很多程序员只是出于习惯而使用 const 引用而不是按值引用。

【讨论】:

【参考方案2】:

对于复杂类型,按值传递比按引用传递要昂贵得多,因为必须制作值的副本才能传递给函数。考虑将一个大向量传递给计算中值的函数。你真的要分配一个新的向量,复制所有的值,对新的向量进行平均,然后释放你分配的内存吗?通过引用传递可以节省分配/复制/释放周期。

对于int,没关系。事实上,在大多数平台上,按价值传递会更便宜。

【讨论】:

这是有道理的。我习惯了 Java,其中对象通过引用自动传递。因此,如果我有一个向量,并且我通过值将其传递给函数,并且函数对其进行了一些更改,那么除非我通过引用传递,否则这些更改不会反映在原始向量中。 @chase 在Java中,参数总是按值传递的。【参考方案3】:

如果你通过引用传递它,你只传递指针,这是一个“更小”的东西传递。此外,该对象不会复制到您的函数中,因此您总共使用的内存更少。

【讨论】:

以上是关于通过引用传递使用 const 有啥意义? C++ [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Go 中使用指针有啥意义?

C 和 C++ 中的“通过引用传递”到底有啥区别?

C++ 通过常量引用传递和通过常量引用返回

小白学习C++ 教程八在C++指针传递引用和Const关键字

通过引用传递 C++ 迭代器有啥问题?

在 C++ 中,通过引用传递 const long double 是不是很好?