为什么“istream& object”需要参考&和ifstream不?

时间:2011-11-09 05:14:31

标签: c++ g++

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

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

istream需要&并且ifstream不需要&声明变量。

1 个答案:

答案 0 :(得分:1)

这两者并非真正可比;一个有初始化器,另一个没有。

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

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