1

我很困惑为什么我需要在下面的书中的这个例子中使用返回类型和参数列表的引用。除了它占用的内存比使用按值传递复制所有内容之外,他们还有什么理由吗?或者如果我想做级联,它是否需要处理更多?

istream &operator>>( stream &input, PhoneNumber &number)
{
//input whatever
return input;
}
4

2 回答 2

4

因为a)流不可复制,b)从流中获取输入意味着改变它,所以你需要修改原始而不是副本(但是会实现)。并且引用PhoneNumber应该是显而易见的——您从流中获取输入并进入该对象。如果您通过副本传递它,那么它在操作员之外是不可见的,这使得整个练习变得毫无意义。

于 2012-04-16T02:33:29.640 回答
1

使用指针和引用的最大原因不是因为它可以让您使用更少的内存(尽管确实如此),而是因为它可以让您使用更少的时间。复制对象需要时间,您通常需要分配额外的内存,然后最终将其释放。

更重要的是,像流这样的对象根本不应该被复制:它们包含与物理对象相关的内部状态 - 磁盘上的文件或网络流 - 以及它们相关的缓冲区,这并不多感觉复制。

于 2012-04-16T02:33:42.990 回答