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

Pic*_*ico 2 c++ iostream const getline istream

这里的基本问题,我正在努力学习iostream的基本知识.

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

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

是否有可能从恒定流中获取信息?

ata*_*ash 5

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

编辑:实际上我们不关心隐藏在istream接口后面的实际流对象是否使用了一些"内部指针".确切地说,重要的是流在您读取时会改变其状态,因为下次读取它时会得到不同的结果(您从流中读取下一个内容).如果给你一个const对象,那就意味着你不应该改变它的状态.

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