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

Why << operator in ofstream is not const?

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

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

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

但更重要的(在我看来)是逻辑可变性。流在写入后不一样了——它有了新的价值。如果您的 class 不关心这个事实,您可以声明您的流成员 mutable.

因为它可能调用setstate() which isn't const for a reason since it changes the internals of the object as noted in the formatting part for streams.

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