【问题标题】:why "istream& object" requires reference & and ifstream doesn't?为什么“istream& 对象”需要引用 & 而 ifstream 不需要?
【发布时间】:2023-03-28 11:10:02
【问题描述】:

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

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

istream 需要 & 而 ifstream 不需要 & 来声明变量。

【问题讨论】:

  • 你的意思是变量声明吗?您能否发布代码以准确显示您在说什么。
  • 是的,变量声明。 “istream&输入=cin;”而“ifstream infile;infile("in");"为什么需要“&”?另一个声明没有?
  • 真的不知道这里的问题是什么。
  • 你的第三个语句应该做什么? infile("in"); ?据我所知,这不会编译(ifstream 没有operator()
  • 对不起,应该是 infile.open("in");我忘了@Pablo

标签: c++ g++


【解决方案1】:

这两者真的没有可比性;一个有初始化器,另一个没有。

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

相反,如果你省略了初始化器,那么你不能有一个引用,因为引用需要一个初始化器。相反,您的流将只是默认构造。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 2018-07-30
    • 2011-06-18
    • 2021-04-13
    • 1970-01-01
    • 2020-01-24
    相关资源
    最近更新 更多