为什么使用对IO流的引用而不是流本身?关于函数的引用也是同样的问题。试着研究这个话题我还是听不懂
在下面的代码中,函数只在给定流上打印给定QueryResult
对象的结果。
//declaration
ostream & print(ostream & os, const QueryResult &qr);
这里没有"对函数的引用"。第一个&
是返回类型的一部分。
ostream& print(ostream& os, const QueryResult& qr);
函数返回一个ostream&
,并将一个ostream&
作为参数,因为流无法复制。QueryResult
作为常量引用传递,以避免可能昂贵的副本。
您必须知道,在函数调用期间,参数会复制到函数的参数中。但是IO类不允许复制它们的对象。因此,我们不能直接传递对象(istream或ostream(。或者更简单地说
因为我们不能复制IO类型,所以我们不能有一个参数或返回类型是流类型之一。执行IO的函数通常会传递和通过引用返回流。
还有一件事。
读取或写入IO对象会更改其状态,因此引用不能是常量
它在方法链接中很有用。目的是返回对流的新引用,该流可以被传递给运算符<lt;((在链中。
IO对象无法复制,因此我们不能有IO类型的返回或参数。所以要进行IO操作,我们必须传递对IO对象的引用来进行级联。