c++中,fstream对象作为引用传递给函数
C++, fstream objects passed to functions as reference, const?
我知道,一般来说,对数据的引用应该被隔离为函数中的常量,以便函数不能改变它,对于仅用于输入的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引用传递它
相关文章:
- C++有什么方法可以在既不调用函数模板也不提供其模板参数的情况下引用函数模板?
- 无法将右值引用函数与 GCC 匹配
- C ++引用函数参数似乎包含原始对象的副本,而不是充当"real reference"
- 通过引用函数传递指针参数是什么意思?
- 常量引用函数参数的地址何时唯一?
- 我想了解为什么在这个例子中使用引用函数?或者引用在c++函数中的重要性
- C++ 通过引用函数传递数组,但内容保持不变
- 用数组或指针引用函数?
- 引用函数如何"int &foo();"工作?
- 常量引用函数参数:是否可以禁止临时对象?
- 计算在代码中引用函数的次数
- <initializer_list> 引用函数
- 字符串引用(函数)的差异
- 在类中引用函数时的"No Matching Function for Call"
- 无法通过引用函数"calcValues"中"firstNum"和"secondNum"变量来更改值
- 尝试引用已删除的函数(不引用函数)
- 引用函数指针
- 引用函数按值和自动返回
- 为什么我们可以取消引用函数指针
- 通过引用函数传递值的目的是什么