我希望stringstream有一个构造函数,可以从string&&中窃取其初始内容。这种物种间的“移动构造函数”是否一般不存在于STL中?若否,原因为何?
发布于 2018-06-25 01:38:37
有历史,这令人失望。同时也是一个光明的未来。
当move语义进入C++11时,它是巨大的,有争议的,而且是压倒性的。我希望能够将字符串输入或移出stringstream。然而,当时的政治要求内部商店不必是basic_string<charT>。例如,内部存储可以是一个vector。也没有能力用分配器来控制东西。无论如何,在C++11的时间框架中,这一需求得到了承认,但它只是一座太远的桥梁。
幸运的是,彼得·萨默拉德( Peter )已经用P0408弥补了这方面的不足。这个建议增加了您希望为C++20提供的功能,但这还不确定。它已经成功地通过了LEWG,现在就在LWG的桌子上。他们这个月在Rapperswil没有得到它,纯粹是因为一个超载的时间表。我希望它能通过LWG和全体委员会的表决。我当然会投它一票。
发布于 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);
https://stackoverflow.com/questions/51014963
复制相似问题