“stringstream”是不是复制构造它的字符串?

Posted

技术标签:

【中文标题】“stringstream”是不是复制构造它的字符串?【英文标题】:Does "stringstream" copy the string on which it is constructed?“stringstream”是否复制构造它的字符串? 【发布时间】:2017-08-22 15:34:16 【问题描述】:

在这样的一段代码中

std::string s("random;string;");
std::stringstream s_stream(s);

s_stream 是否复制了s

我的意思是,如果在创建s_stream 之后,我修改了s,会发生什么?

【问题讨论】:

en.cppreference.com/w/cpp/io/basic_stringstream/… - "使用 str 的副本作为底层字符串设备的初始内容。" 【参考方案1】:

是的。来自http://en.cppreference.com/w/cpp/io/basic_stringstream/basic_stringstream

2) 使用str 的副本作为底层字符串设备的初始内容。底层basic_stringbuf 对象构造为basic_stringbuf<Char,Traits,Allocator>(str, mode)

【讨论】:

有没有不这样做的替代方案? @ingomueller.net,我没有看到。如果有一个接受右值引用的构造函数会很好,并且可以使用std::string 的移动构造函数来避免复制。

以上是关于“stringstream”是不是复制构造它的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

stringstream,ostringstream,stringstream

从字符串 stringstream 获取 const ptr 时的行为

为啥 std::stringstream 在静态内联时不能默认构造?

使用 stringstream 浮动的字符串

为啥复制构造函数应该在 C++ 中通过引用来接受它的参数?

为啥类中的 stringstream 成员会导致编译时错误? [复制]