c ++如何检查ostringstream是否为空

时间:2017-06-12 20:31:01

标签: c++ std

我想检查ostringstream对象是否为空,即它不包含任何字符序列?

我查了cpp reference for ostringstream,但我还不清楚。

1 个答案:

答案 0 :(得分:3)

您可以按照其他任何std::ostream子类的方式检查其大小:

std::ofstream ofs;
std::streampos pos = ofs.tellp();  // store current location
ofs.seekp(0, ios_base::end);       // go to end
bool empty = (ofs.tellp() == 0);   // check size == 0 ?
ofs.seekp(pos);                    // restore location

对于输入流(istringstreamifstream等),您可以使用tellg()seekg()代替。

问:你需要在获得它的大小之前刷新流吗?

答:理论上,你不是,但是std文档没有提到它的任何内容......所以这样做的需要可能取决于实现。

std::ostream上,我推荐它,如果您最近插入了字节,并且不在流的末尾。在涉及输出流的大多数用例中,您将附加到流并位于其远端,在这种情况下,不必存储和恢复搜索指针位置。

在任何情况下,刷新std::ostringstream都不是一项昂贵的操作。在输出文件流中,我亲自调用flush(),因为无论如何我都不会在操作过程中获得流的大小。

总结一下,我的个人建议是在获得大小之前清除输出流,除非你确定你已经结束了。

请注意,对于std::ifstream,上述技术是获取文件大小的唯一方法。