gpt4 book ai didi

c++ - 为什么 getline() 不接受常量 istream?

转载 作者:搜寻专家 更新时间:2023-10-30 23:58:12 25 4
gpt4 key购买 nike

这里是基本问题,我正在尝试学习 iostream 的基础。

我被告知要构建一个读取 const istream& 行的函数。即 validateFile(const istream& is)

我发现我不能使用带有 const istream& 作为第一个参数的函数 getline()。我想知道为什么。我以为我只是在阅读 istream,函数 getline() 会改变它吗?

是否有可能从源源不断的流中获取信息?

最佳答案

流的思想是按顺序从中读取一些数据,每次都推进其内部指针。通过推进此指针,您可以更改流对象。您不能从 const 流中读取(除非您对它们进行 const 转换,但这是您不应该做的事情)。

编辑: 实际上我们并不关心隐藏在 istream 接口(interface)后面的实际流对象是否使用一些“内部指针”。准确地说,重要的是流在你读它的时候改变了它的状态,因为下次你读它的时候,你会得到不同的结果(你从流中读了下一个东西)。如果你得到一个 const 对象,这意味着你不应该改变它的状态。

此外,您不能只从流中获取数据而不更改任何内容,这是有原因的。在文件流的情况下,你想从流中读取的下一个东西甚至可能不在内存中,流对象可能必须先从磁盘读取它,更新它的缓冲区等。(编辑: 但这不会改变对象的外部可见状态,所以实际上这不是一个好的论据。阅读有关 mutable 关键字以了解更多信息。)

关于c++ - 为什么 getline() 不接受常量 istream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21491921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com