C++,fstream对象传递给函数作为引用,const?

Reb*_*nix 3 c++ fstream const function pass-by-reference

我知道通常,对数据的引用应该作为函数中的常量被隔离,以便函数不能改变它,对于仅用于输入的fstream对象是否也适用?

如...

void doFoo(fstream &fileName)
{
  fileName.open("data.txt", ios::in);
} 
Run Code Online (Sandbox Code Playgroud)

如果它是可取的,它是否遵循大多数其他一切的逻辑?

如...

void doFoo(const fstream &fileName)
{
  fileName.open("data.txt", ios::in);
} 
Run Code Online (Sandbox Code Playgroud)

对输出流也很好奇

我只是想知道它是否重要,如果是的话,为什么?

谢谢!

Ulr*_*rdt 6

文件的常量不会转换为用于访问文件的对象的常量属性.即使只是读取文件,也必须修改内部缓冲区,当前读取位置等.这同样适用于输出,所以基本上const流是没用的.

顺便说一句:如果你想清楚一个函数只从流中读取,则传递给它std::istream&.首先,"i"在istream合理地确定你不写信给它.其次,缺少"f" fstream允许使用stringstreams,或者像cin这样的流.