2016-12-28 146 views
2

我注意到ofstream中的operator <<不是const。很明显,这个操作符会改变文件的内容,但是它在ofstream对象内部会发生什么变化?为什么<< instream中的运算符不是const?

换句话说,如果我有ofstream作为一个类的成员函数,我想打电话就可以了<< operator一个const成员函数中我必须把它改成non-const成员函数或标记ofstream作为mutable但似乎没有从抽象的角度对我来说是逻辑的..我错过了什么吗?

+0

至少,它将改变流对象的缓冲区内容。 –

+0

如果写入失败,它也可以改变状态。 –

+0

@latedeveloper我应该知道它的内部缓冲区?我的意思是他们可以让它变得可变,因为它是非常内在的东西 –

回答

8

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

但是更重要的是(在我看来)是逻辑的可变性。写作之后的流不一样 - 它具有新的价值。如果你的班级不关心这个事实,你可以声明你的流成员mutable

0

请记住,虽然ofstream本身没有进行修改,以被写入(即使它可能应该),这也从ostream类继承的<<运营商ostringstream是为了修改写入到,因为你需要改变内部的string对象。因此,必须声明运营商const以涵盖所有情况(运营商在ostream类中定义)。

相关问题