【问题标题】:Is it safe to read stdin/cin from an ifstream?从 ifstream 中读取 stdin/cin 是否安全?
【发布时间】:2014-03-27 01:49:06
【问题描述】:

我读到可以通过 ifstream 通过更改缓冲区来读取 cin,但它安全吗?这样做有什么缺点:

file.ios::rdbuf(cin.rdbuf());

谢谢

C++: UNIX - defaulting ifstream variable to standard input
iostream - C++: assign cin to an ifstream variable? - Stack Overflow

【问题讨论】:

  • 不要打扰我(或这里的其他人)点击链接!提取您的疑虑并在此处显示!!
  • 好的,我会编辑问题

标签: c++ stdin ifstream cin istream


【解决方案1】:

是的,它是安全的,这就是 rdbuf 函数存在的全部原因。

这也是 iostream 速度慢的主要原因之一。 ifstream 对象不一定附加到文件。 stringstream 对象可能附加到文件中。多态性,大量虚拟调用,没有优化的机会。

但是无论你是否重新绑定流,你都会为这些缺点付出代价。

【讨论】:

  • 我原来的例子错了,你能看看编辑吗?我有一些使用 ifstream 的代码,我想通过 cin 代替。我在想file.ios::rdbuf(cin.rdbuf());,但我不知道这样行不行。只要代码不对文件调用 open 或 close 就可以了吗?
  • 不同意观点。 rdbuf 中的虚拟调用不会减慢文件 I/O,格式化 I/O 也不会那么快。如果你在做无格式的 I/O,你也可以直接调用 streambuf 方法跳过抽象成本。
  • MSalters,不同意所有你想要的,我有探查器数据构成我的陈述的基础。请注意,我所说的调用不在 rdbuf 中。然而,如果没有多态 pimpl 机制,rdbuf 就无法存在。
  • @Ben 如果您可以回复我的原始评论,那么我可以标记您给出的答案是否正确。谢谢
  • @test:您的编辑不需要对答案进行任何更改。您可以将文件与 cin 关联,反之亦然。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多