我希望stringstream
的构造函数可以从string&&
窃取其初始内容。这样的物种间“移动构造函数”在STL中通常不存在吗?如果没有,为什么不呢?
答案 0 :(得分:54)
这里的历史令人失望。但未来也很光明。
当移动语义学进入C ++ 11时,它是巨大的,有争议的并且是压倒性的。我希望能够将字符串从stringstream
移到和。但是,当时的政治要求内部存储必须为basic_string<charT>
。例如,内部存储可以是vector
。而且没有能力用分配器控制事物。无论如何,在C ++ 11的时间框架内已经意识到了这种需求,但这只是一座桥梁。
幸运的是,彼得·索默拉德(Peter Sommerlad)用P0408弥补了这一懈怠。该提议增加了您寻求的功能,希望能用于C ++ 20,但这还不确定。它已成功通过LEWG,并且现在位于LWG的桌面上。他们本月未在拉珀斯维尔(Rapperswil)到达目的地,纯粹是因为日程安排过多。我希望它将通过LWG和委员会全体表决。当然,我会投票。
答案 1 :(得分:12)
为什么
std::stringstream::stringstream(std::string&&)
不存在?
这归因于std::stringstream
的内部缓冲区rdbuf
。
std::string_buf
的动机, rdbuf
(类型p0408r4)不支持非复制访问:
...无法无 非复制访问内部缓冲区
basic_stringbuf
,至少可以获取输出 是ostringstream
低效的结果,因为副本总是 制作
但是,已经有一个计划支持std::string
迁移stringsteam的构造函数:
explicit basic_ostringstream( basic_string<charT, traits, Allocator>&& str, ios_base::openmode which = ios_base::out, const Allocator& a = Allocator());
并移动str()
template<class SAlloc = Allocator> void str(basic_string<charT, traits, SAlloc>&& s);