std::ostringstream 缓冲区的最大大小是多少
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()
函数将其注册为引发异常。
相关文章:
- 复制列表初始化的隐式转换的等级是多少
- while循环中while循环的时间复杂度是多少
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 如何检查一个c++字符串中有多少相同的字符/数字
- C++有多少类型的循环
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- 在条件变量中触发错误信号的频率是多少
- 函数的时间复杂度是多少?
- 必须为 C++20 协程帧保留多少内存?
- 对于四轴飞行器,PID中I控制器的理想值应该是多少
- C++,数组有多少个地址?
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 在 Linux 中存储区域设置名称的缓冲区大小应该是多少?
- 在内存不足之前,我可以声明多少个 const 变量?
- 可以读入进程内存的最大块大小是多少?
- 如何在不知道C++中有多少可选参数的情况下在循环中使用va_arg?
- 在二维向量或数组中可以存储的最大元素数是多少?
- 如何创建一个所有行大小不同的 2D 数组,并且用户将指定每行将有多少个元素?
- std::ostringstream 缓冲区的最大大小是多少