我想检查ostringstream对象是否为空,即它不包含任何字符序列?
我查了cpp reference for ostringstream,但我还不清楚。
答案 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
对于输入流(istringstream
,ifstream
等),您可以使用tellg()
和seekg()
代替。
问:你需要在获得它的大小之前刷新流吗?
答:理论上,你不是,但是std文档没有提到它的任何内容......所以这样做的需要可能取决于实现。在std::ostream
上,我推荐它,如果您最近插入了字节,并且不在流的末尾。在涉及输出流的大多数用例中,您将附加到流并位于其远端,在这种情况下,不必存储和恢复搜索指针位置。
在任何情况下,刷新std::ostringstream
都不是一项昂贵的操作。在输出文件流中,我亲自调用flush()
,因为无论如何我都不会在操作过程中获得流的大小。
总结一下,我的个人建议是在获得大小之前清除输出流,除非你确定你已经结束了。
请注意,对于std::ifstream
,上述技术是获取文件大小的唯一方法。