传递const-reference参数有什么意义?它是否会产生重大影响?

时间:2017-11-01 23:17:49

标签: c++ oop

e.g。 Person(const string & aName){...}

程序会因为我们没有通过引用传递而耗尽大量内存吗?我知道如何使用const-reference但我很难理解为什么我会使用它们。

1 个答案:

答案 0 :(得分:4)

  

程序会因为我们没有通过引用传递而耗尽大量内存吗?

字符串的副本(如果按值传递参数,将会生成[除非调用内联扩展,在这种情况下,重要的不是参数的传递方式])将使用与原始字符串一样多的内存。因此,这样的程序将使用两倍于字符串及其副本的内存,因为另一个程序将用于未复制的一个字符串。

差异不仅限于使用的内存量。复制内存比不复制内存需要更多时间。通过引用传递的开销在速度和内存使用方面都是不变的,而复制字符串的开销随着字符串长度的增加而线性增加。

如果不保证字符串很小,复制字符串的线性复杂性可能很大。即使字符串很小,如果经常调用函数,分配开销也会很大。

  

传递 const - 参考参数有什么意义?

当你使用 const 引用而不是非const时,更容易推断程序的正确性,因为你只是通过函数的声明隐含地知道它会不修改引用的对象。它还允许您将const对象和临时对象传递给函数。

通过值传递具有相同的优点,但它需要一个可以产生重大性能影响的副本,正如我在前面的段落中所解释的那样。如果函数本身无论如何都会复制字符串,那么传递值可能会更好,这样副本对于读者来说是显而易见的。