假设您只想打印出列表的值 - 您是按值还是引用传递对象?如果您只打印出列表,这有关系吗?
答案 0 :(得分:6)
取决于。
通常答案是const&
,因为您不希望重复数据的开销。
但IO 慢。在足够先进的应用程序中,任何IO都必须以异步方式完成。并且带有引用的异步代码非常难以正确使用,而且复制数据通常比IO便宜得多。所以答案可能是复制它并在副本上执行异步IO。
请注意,复制大多数链接列表比复制连续缓冲区更昂贵;所以你可能会将链表复制到一个不太动态的结构中(比如缓冲区或缓冲区链)。在99/100的情况下,您希望完全丢弃链接列表,而是使用单个缓冲区或缓冲区链,甚至在IO之外。
甚至可能是一个不可变的向量,因为异步代码喜欢不变性,现在一个“副本”就是O(1)。
所以简单的答案是const&
,而复杂的答案是“完全使用不同的数据结构,其中复制意味着完全不同的东西”。
答案 1 :(得分:0)
您是按值还是引用传递对象?
通常STL容器(包括列表)可以/应该通过值传递,如果您不需要更改容器本身(这是您的打印情况)。否则,如果您需要更改容器,则应通过引用传递。)
在C ++ 1x中,所有STL容器都支持移动语义(通过移动构造函数/移动赋值运算符),这使得正常的C98 pass-by-const-reference变得不必要。