2012-04-16 60 views
1

我很困惑,为什么我需要从下面的书中为本例中的返回类型和参数列表使用引用。他们有什么理由,除了它占用内存少于使用按值传递复制所有内容?或者如果我想做级联,它是否需要处理更多?C++类运算符重载参考

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

这意味着你可以将呼叫连锁在一起。 'cin >> a >> b >> c;' – 2012-04-16 07:17:20

回答

4

因为)流是不可拷贝,B)从流获取输入手段变异,所以你需要修改原来的,而不是一个副本(但会是这样实现的)。并且参考PhoneNumber应该是显而易见的 - 您从流中获取输入并输入该对象。如果您通过复制传递它,那么在操作员之外就不会看到它,这会使整个练习变得毫无意义。

1

你使用指针和引用的最大原因并不是因为它允许你使用更少的内存(尽管它确实如此),而是因为它可以让你使用更少的时间。复制对象需要时间,您经常需要分配额外的内存,然后最终解除分配内存。更重要的是,诸如流这样的对象根本不打算被复制:它们包含与物理对象相关的内部状态, - 磁盘或网络流上的文件,以及它们相关的缓冲区,复制没有多大意义。