例如,字符串流包含“abc\n”,我想删除最后一个字符“\n”。
我知道可以先使用“ str ”来完成。
但是如果没有 stringstream::str() 可以完成吗?
不,不存在,至少不能保证。尽管它在内部维护了一个字符串缓冲区,但目前您无法在不创建副本的情况下访问它。有一个提案可以改变这一点:
\n\n\n\n\n流是 C++ 标准库中最古老的部分,其规范并未考虑自 C++11 以来引入的许多内容。疏忽之一是对 basic_stringbuf 的内部缓冲区没有非复制访问,这至少使得从 ostringstream 获取输出结果效率低下,因为总是进行复制。我个人推测这也是 basic_strbuf 花了这么长时间才因其 char * 访问而被弃用的原因。\n 有了移动语义和 basic_string_view,就不再有理由在 basic_stringbuf 上保持这种悲观情绪。
\n
在内部,没有理由应该有这个限制,因为我相信(我可能是错的)basic_stringbuf 需要 basic_string 缓冲区,并且Clang当然以这种方式实现 basic_stringbuf。
\n\n现在,您可以像任何其他流一样进行字符串流,或访问其底层缓冲区的副本,但是,您不能直接修改缓冲区。这意味着任何修改流末尾的尝试都需要复制底层缓冲区或读取字节直到末尾。
\n