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

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

我想知道是否有一种方法可以使std::istringstream使用给定的c_str作为其缓冲区而不复制内容。这样,在将std::istringstream&传递给以istream&作为参数的函数之前,不必复制大量内存。

我一直试图做的就是将一些仅采用std::ifstream&参数(它们大多是解析器)的函数转换为也采用istream&。为此,我需要自己创建istream子类吗?

最佳答案

编写从给定存储区读取的基本std::streambuf类相当简单。然后,您可以从中构造一个istream并从中读取。

initializing a C++ std::istringstream from an in memory buffer?

注意,指向c_str()的缓冲区的生命周期非常有限,尽管我不知道它在哪里实现,但不能保证对c_str()的调用会导致某些复制。

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

10-10 16:29