std::ios_base::ate
(例如std::ios_base::app
除外)和std::ios_base::trunc
(例如std::ios_base::out
除外)的重点是什么?
我应该更喜欢写std::ios_base::smth
而不是std::ios::smth
吗?
答案 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::app
,std::ios_base::out
暗示std::ios_base::trunc
。每个字段具有不同的含义和不同的使用情况,但大多数字段不能单独使用:)