目前我有一个场景,我想检查将给定字符串写入文件流是否会使文件超出给定大小(这用于日志文件轮换).现在,std::ofstream::tellp()返回一个streampos,但std::string::size()返回一个size_t.结果是,这不起作用:
out_stream.tellp() + string.size() < limit
Run Code Online (Sandbox Code Playgroud)
因为operator +这些类型显然存在模糊的重载.这引出了两个问题:
size_t,streamsize,streampos,streamoff)之间的相互关系?什么时候可以安全地转换,以及可能存在的陷阱.我对这些类型感到困惑.我所知道的是,它们是依赖于实现的,并且它们提供了某些保证(例如size_t,总是足够大以容纳大型对象的大小,该大小对象将适合编译应用程序的体系结构的内存),但是它们是什么关于这些类型的互操作性的保证(参见上面的例子,或比较a streamsize到a size_t)?您应该能够通过转换将结果从tellp 转换为a std::string::size_type。
static_cast<std::string::size_type>(out_stream.tellp()) + string.size() < limit
编辑:这是安全的,因为您的流偏移量永远不会为负,并且会安全地转换为无符号值。
| 归档时间: |
|
| 查看次数: |
2324 次 |
| 最近记录: |