构建流而不复制缓冲区

3

我有一段代码如下:

char* text = ....
std::istringstream iss(text);

我知道这里创建了一个临时的std::string,然后再次在stringstream对象内复制。有没有一种方法可以从char*构造流而不复制字符串。


没有的,你可以在一个 char* 上创建 stringstream/string "on"。你可以查看 std::string_view,这可能将包含在 C++17 标准中。 - themagicalyang
好的,谢谢。实际上并不需要处理std :: string和std :: stringstream。也许boost或其他库中有一些东西?这里的stringstream仅用于getline。甚至不需要提取运算符。 - ArmanHunanyan
1个回答

2
历史上,现在已弃用的 std::istrstream 提供了这种功能:

istrstream 类实现了对基于数组的流的输入操作。它本质上将原始的数组 I/O 设备实现 (std::strstreambuf) 包装到 std::basic_istream 的更高级别接口中。

典型的 istrstream 实现只包含一个非派生数据成员:一个类型为 std::strstreambuf 的对象。

注释

istrstream 自 C++98 起已被弃用,std::istringstreamboost::iostreams::array_source 是推荐的替代方案。

因此,符合您要求的当前实现是 boost::iostreams::array_source
概述: 类模板basic_array_source、basic_array_sink和basic_array提供对内存中字符序列的访问。数组设备不管理底层字符序列的生命周期。
实现: 数组设备作为直接设备实现,以提供对底层字符序列的高效无缓冲访问。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接