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

c++ How to check if ostringstream is empty

我想检查 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

对于输入流(istringstreamifstream 等),则应使用 tellg()seekg()

问:在获取大小之前是否需要刷新流?

A: 理论上,你不需要,但是标准文档没有提到任何关于它的东西......所以是否需要这样做可能取决于实现。

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

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

总而言之,我个人的建议是在获取输出流大小之前刷新输出流,除非您确定自己已经到了最后。

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