[英]What is the maximum size of std::ostringstream buffer?
是否根據動態分配的內存量分配大小? 當我們達到這個限制時會發生什么事情拋出異常或者覆蓋到內存的其他部分? 或者它默默地停止寫入緩沖區?
一的緩沖區std::stringstream
對象是圍繞着一個包裝std::string
對象。 因此,最大大小為std::string::max_size()
。 當流不能進一步分配時,將被檢測到流的緩沖區拋出異常。 響應是在其流狀態下打開std::ios_base::badit
。 除非清除流狀態並且緩沖區至少部分清空,否則嘗試寫入傳遞此點將不會執行任何操作。
就像std::cout
,如果流失敗(無論出於何種原因),將設置緩沖區的狀態(eofbit,failbit或badbit)。 這意味着流的operator bool()
將計算為false
。
std::ostringstream oss;
// a lot of output to oss here - causing a situation where you are out of available memory
if (!(oss << some_value))
{
// oss failed to write some_value!
}
注意:在C ++ 11之前,這是通過operator void*()
。
此外,如果您希望流引發異常(默認情況下不會),您可以使用std::ios::exceptions()
函數將其注冊為throw。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.