gpt4 book ai didi

c++ - 非复制 istringstream

转载 作者:可可西里 更新时间:2023-11-01 15:51:41 27 4
gpt4 key购买 nike

因此 istringstream 在初始化时复制字符串的内容,例如

string moo("one two three four");
istringstream iss(moo.c_str());

我想知道是否有办法让 std::istringstream 使用给定的 c_str 作为它的缓冲区而不复制东西。这样,它就不必在将 std::istringstream& 传递给以 istream& 作为参数的函数之前复制大量内存。

我一直在尝试做的是将一些只采用 std::ifstream& 参数(它们主要是解析器)的函数转换为也采用 istream&。我是否必须为此创建自己的 istream 子类?

最佳答案

使用 istringstream 并不是一个令人满意的解决方案,因为这会复制整个缓冲区。

之前的回答建议弃用 istrstream,但由于这会产生警告并且将来可能会被删除,更好的解决方案是使用 boost::iostreams :

boost::iostreams::stream<boost::iostreams::array_source> stream(moo.c_str(), moo.size());

这避免了以与 istrstream 相同的方式复制缓冲区,并使您不必编写自己的流类。

关于c++ - 非复制 istringstream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3122901/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com