c++中,fstream对象作为引用传递给函数

C++, fstream objects passed to functions as reference, const?

本文关键字:引用 函数 fstream 对象 c++      更新时间:2023-10-16

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

等……

void doFoo(fstream &fileName)
{
  fileName.open("data.txt", ios::in);
} 

如果它是明智的,它是否遵循大多数其他事情的相同逻辑?

等……

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

也对输出流很好奇

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

谢谢!

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

BTW:如果你想明确一个函数只从流中读取,传递给它一个std::istream&。首先,istream中的"i"可以合理地确保您不会写入它。其次,fstream中缺少的"f"也允许使用字符串流,或者像cin这样的流。

如果您传递一个对象(如fstream实例)作为const引用,您只能在其上调用const成员函数,如:

// In some class declaration
void aConstMember(int a) const;

这是因为这些函数不会改变对象的状态,因此对象可以是const。非const成员函数可以修改成员变量,因此对象不再是const。现在,如果您查看fstream的参考手册,您将看到open()成员函数不是const成员函数。所以第二个代码示例无法编译。

一般:将类类型的参数作为const &传递,除非它们将在函数中被修改。打开流当然一个修改。所以通过非const引用传递它