我想检查ostringstream对象是否为空,即它不包含任何字符序列?
我查看了cpp reference for ostringstream,但对我来说仍然不太清楚。
std::ostream
子类的方式检查其大小:std::ofstream ofs;
std::streampos pos = ofs.tellp(); // store current location
ofs.seekp(0, std::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
,上述技术是获取文件大小的唯一方法。
if(oss.str().empty())
吧?即使是你提到的那个糟糕的参考文献也告诉你没有这样的函数。 - πάντα ῥεῖ