为什么 ofstream 中的 << 运算符不是 const?

3
我注意到在ofstream中,operator <<并非const。很明显,这个操作符会改变文件的内容,但它在ofstream对象内部改变了什么呢?
换句话说,如果我有一个ofstream作为类成员函数,并且我想在一个const成员函数中调用<< operator,我必须将其改为non-const成员函数或将ofstream标记为mutable。但从抽象的角度来看,这似乎不是很合理.. 我错过了什么吗?

至少,它将更改流对象的缓冲区内容。 - user2100815
如果写入失败,它还可以更改状态。 - Vaughn Cato
@latedeveloper 我需要注意它的内部缓冲区吗?我的意思是,他们可以使其可变,因为这是非常内部的东西。 - Humam Helfawi
3个回答

9

因为它在逻辑上改变了流。最少的影响是改变了流缓冲区内的写入位置。它还可以修改流的状态(例如,在写入错误发生时)。

但更重要的是逻辑可变性(在我看来)。流在写入后不再是相同的 - 它具有新的值。如果您的类不关心这个事实,您可以声明您的流成员为 mutable


1

0
请记住,虽然 ofstream 本身不需要修改就可以写入(虽然它可能应该被修改),但是从 ostream 类继承 << 运算符的 ostringstream 必须要被修改才能写入,因为你需要改变内部的 string 对象。因此,为了涵盖所有情况,必须将运算符声明为 const(运算符在 ostream 类中定义)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接