首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么`std::stringstream::stringstream(std::string&&)`不存在?

为什么`std::stringstream::stringstream(std::string&&)`不存在?
EN

Stack Overflow用户
提问于 2018-06-25 00:19:40
回答 2查看 2.3K关注 0票数 48

我希望stringstream有一个构造函数,可以从string&&中窃取其初始内容。这种物种间的“移动构造函数”是否一般不存在于STL中?若否,原因为何?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-25 01:38:37

有历史,这令人失望。同时也是一个光明的未来。

当move语义进入C++11时,它是巨大的,有争议的,而且是压倒性的。我希望能够将字符串输入或移出stringstream。然而,当时的政治要求内部商店不必是basic_string<charT>。例如,内部存储可以是一个vector。也没有能力用分配器来控制东西。无论如何,在C++11的时间框架中,这一需求得到了承认,但它只是一座太远的桥梁。

幸运的是,彼得·萨默拉德( Peter )已经用P0408弥补了这方面的不足。这个建议增加了您希望为C++20提供的功能,但这还不确定。它已经成功地通过了LEWG,现在就在LWG的桌子上。他们这个月在Rapperswil没有得到它,纯粹是因为一个超载的时间表。我希望它能通过LWG和全体委员会的表决。我当然会投它一票。

票数 55
EN

Stack Overflow用户

发布于 2018-06-25 00:57:32

为什么std::stringstream::stringstream(std::string&&)不存在?

这是由于std::stringstream的内部缓冲区,rdbuf

rdbuf (std::string_buf类型)不支持按照提议中的动机p0408r4进行非复制访问。

..。不存在不复制访问basic_stringbuf的内部缓冲区的情况,这至少会导致从ostringstream获得输出的效率低下,因为副本总是生成

但是,已经有一项计划支持std::string在support构造函数中的移动:

显式basic_ostringstream( basic_string&& str,ios_base::openmode,其中= ios_base::out,const&a= Allocator());

移动str()

模板空洞str(basic_string&& s);

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51014963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档