为什么"istream& object"需要参考,而ifStream不需要?

why "istream& object" requires reference & and ifstream doesn't?

本文关键字:ifStream 不需要 参考 istream object 为什么      更新时间:2023-10-16

我理解IO对象没有复制或分配,因此我们必须为istream/ostream对象使用引用符号&。但是为什么ifstream/ofstreamistringstream/ostringstream不需要&来初始化对象?.

istream& input=cin;
ifstream infile;
infile("in");

istream需要&ifstream不需要&

这两个并没有真正的可比性;一个有初始化式,另一个没有。

但是std::istream input = cin不起作用,因为流是不可复制的。如果您尝试用现有的ifstream初始化infile,您将得到相同的错误。显然,引用不需要复制,因此它可以工作,将现有值混叠。

反过来说,如果省略初始化式,那么就不能有引用,因为引用需要初始化式。相反,你的流将只是默认构造。