std :: ios_base :: ate和std :: ios_base :: trunc

时间:2012-09-03 19:36:36

标签: c++

std::ios_base::ate(例如std::ios_base::app除外)和std::ios_base::trunc(例如std::ios_base::out除外)的重点是什么?

我应该更喜欢写std::ios_base::smth而不是std::ios::smth吗?

1 个答案:

答案 0 :(得分:17)

std :: ios_base :: ate将光标定位在文本的末尾,而std :: ios_base_app在末尾添加文本(带写操作),尽管你仍然可以从头开始阅读:)

std :: ios_base :: trunc截断文件以使其清空,而std :: ios_base :: out只指定要写入流。

我目前无法引用标准(在我的平板电脑和Acrobat Reader上不会让我们复制),但是从ISO 14882:1998的第27.4.2.1.4段开始,你可以在链接上看到的信息几乎是准确的: http://cplusplus.com/reference/iostream/ios_base/openmode/

总结一下:

std::ios_base::app = append

在流的末尾附加“在每次写入之前搜索结束”

std::ios_base::ate = At The End

打开并在打开后立即寻找

std::ios_base::binary = binary

以二进制执行操作而不是文本

std::ios_base::in = input

以读取模式打开

std::ios_base::out = output

以写入模式打开

std::ios_base::trunc = truncate

在开场时截断流。

这些值只是标志,因此您可以在最后使用以下内容打开读/写二进制文件流:

std::ios_base::in | std::ios_base::out | std::ios_base::ate | std::ios_base::binary

关于使用这些值的方式,它可以按照您的意愿使用。它们在std::ios_base类中声明为公共静态字段(参见27.4.2),因此可以使用std::ios::ate甚至cout.binary之类的内容访问它们。


您必须注意的要点是std::ios_base::ate并不暗示std::ios_base::appstd::ios_base::out暗示std::ios_base::trunc。每个字段具有不同的含义和不同的使用情况,但大多数字段不能单独使用:)