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

时间:2016-12-28 20:47:08

标签: c++ ofstream

我注意到operator <<中的ofstream不是const。很明显,此运算符将更改文件的内容,但它在ofstream对象中的变化是什么?

换句话说,如果我有ofstream作为类成员函数,并且我想在<< operator成员函数内调用const,我必须将其更改为{{ 1}}成员函数或将non-const标记为ofstream但从抽象的角度来看似乎不合逻辑..我错过了什么吗?

3 个答案:

答案 0 :(得分:8)

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

但更重要的是(在我看来)是逻辑上的可变性。写入后流不一样 - 它具有新值。如果您的班级不关心此事实,您可以声明您的信息流成员mutable

答案 1 :(得分:1)

因为它可以调用setstate()而不是const,因为它改变了对象的内部结构,如the formatting part for streams中所述。

答案 2 :(得分:0)

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