我想檢查ostringstream對象是否爲空,即它不包含任何字符序列?C++如何檢查ostringstream是否爲空
我檢查了cpp reference for ostringstream但它仍然不清楚。
我想檢查ostringstream對象是否爲空,即它不包含任何字符序列?C++如何檢查ostringstream是否爲空
我檢查了cpp reference for ostringstream但它仍然不清楚。
您可以爲任何其他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
,上述技術是獲取文件大小的唯一方法。
您需要在測量之前沖洗流路嗎?如果不是,爲什麼不呢? –
@TobySpeight感謝您的好格式! –
什麼不清楚實際的錯誤信息?你可能需要'if(oss.str()。empty())'?即使你提到的那個蹩腳的參考資料也告訴你,沒有這樣的功能。 –
您可以使用'str()'方法檢索內容並檢查其內容是否爲空,或者您可以使用['peek()'](http://en.cppreference.com/w/cpp/io/ basic_istream/peek)方法 – WhiZTiM
使用str()在緩衝區中創建一個副本,對我的用例來說不是很好http://www.cplusplus.com/reference/sstream/ostringstream/str/ – amey91