【问题标题】:Constructing stream witout copying buffer在不复制缓冲区的情况下构造流
【发布时间】:2017-03-24 01:29:38
【问题描述】:

我有这样的代码:

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

我知道这里构造了临时的 std::string 并在 stringstream 对象中再复制一次。有没有办法从 char* 构造流而不复制字符串。

【问题讨论】:

  • 不,没有。您可以在 char* 上创建一个字符串流/字符串“on”。您可以查看std::string_view,它可能会在 c++17 标准中。
  • 好的,谢谢。实际上解决方案不需要处理std::string和std::stringstream。也许在 boost 或其他库中有一些东西?这里的 stringstream 仅用于 getline。甚至不需要提取运算符。

标签: c++


【解决方案1】:

从历史上看,此功能由现已弃用的 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_sourcebasic_array_sinkbasic_array 提供对内存中字符序列的访问。这 数组设备不管理底层字符的生命周期 序列。

实施

数组设备被实现为直接设备,以便 提供对底层字符的有效无缓冲访问 序列。

【讨论】:

    猜你喜欢
    • 2012-04-24
    • 2015-01-27
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 2012-06-25
    相关资源
    最近更新 更多