分配的大小是根据可用的动态分配内存量来确定的吗?当我们达到此限制时会发生什么情况?会抛出异常还是覆盖其他部分的内存?还是无声地停止写入缓冲区?
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!
}
operator void*()
来实现此操作。std::ios::exceptions()
函数进行注册。