通过引用传递使用 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++ [重复]的主要内容,如果未能解决你的问题,请参考以下文章