我理解IO对象没有复制或分配,因此我们必须为istream / ostream对象提供引用符号&
。但为什么ifstream/ofstream
或istringstream/ostringstream
不需要&
来初始化对象?
istream& input=cin;
ifstream infile;
infile("in");
istream需要&并且ifstream不需要&声明变量。
答案 0 :(得分:1)
这两者并非真正可比;一个有初始化器,另一个没有。
但是std::istream input = cin
不起作用,因为流不可复制。如果您尝试使用现有infile
初始化ifstream
,则会收到相同的错误。显然,引用不需要复制,因此它起作用,使现有值混叠。
反过来说,如果省略初始化程序,那么不能有引用,因为引用需要初始化程序。相反,您的流将只是默认构造。