通过引用或值传递链表对象更好吗?

时间:2018-06-04 02:32:55

标签: c++ parameter-passing

假设您只想打印出列表的值 - 您是按值还是引用传递对象?如果您只打印出列表,这有关系吗?

2 个答案:

答案 0 :(得分:6)

取决于。

通常答案是const&,因为您不希望重复数据的开销。

但IO 。在足够先进的应用程序中,任何IO都必须以异步方式完成。并且带有引用的异步代码非常难以正确使用,而且复制数据通常比IO便宜得多。所以答案可能是复制它并在副本上执行异步IO。

请注意,复制大多数链接列表比复制连续缓冲区更昂贵;所以你可能会将链表复制到一个不太动态的结构中(比如缓冲区或缓冲区链)。在99/100的情况下,您希望完全丢弃链接列表,而是使用单个缓冲区或缓冲区链,甚至在IO之外。

甚至可能是一个不可变的向量,因为异步代码喜欢不变性,现在一个“副本”就是O(1)。

所以简单的答案是const&,而复杂的答案是“完全使用不同的数据结构,其中复制意味着完全不同的东西”。

答案 1 :(得分:0)

  

您是按值还是引用传递对象?

通常STL容器(包括列表)可以/应该通过值传递,如果您不需要更改容器本身(这是您的打印情况)。否则,如果您需要更改容器,则应通过引用传递。)

在C ++ 1x中,所有STL容器都支持移动语义(通过移动构造函数/移动赋值运算符),这使得正常的C98 pass-by-const-reference变得不必要。

相关问题