Mus*_*ful 48 c++ stringstream rvalue-reference move-semantics c++17
我希望stringstream有一个构造函数窃取其初始内容string&&.STL中通常不存在这样的种间"移动构造函数"吗?如果没有,为什么不呢?
How*_*ant 55
有历史,这是令人失望的.但也是一个看起来光明的未来.
当移动语义进入C++ 11时,它是巨大的,有争议的,并且势不可挡.我希望能够将字符串移入和移出stringstream.然而在当时的政治要求,内部店里没有必须是一个basic_string<charT>.例如,内部商店可能是vector.而且没有能力用分配器来控制事物.无论如何,需要在C++ 11时间框架中得到认可,但它只是一个过分的桥梁.
幸运的是,Peter Sommerlad已经收拾了P0408.这个提议增加了你所寻求的功能,希望对C++ 20来说,但这还不确定.它已经成功通过了LEWG,现在就在LWG的办公桌上.他们本月在拉珀斯维尔没有这么做,纯粹是因为时间表过载.我希望它将通过LWG,以及全体委员会投票.它肯定会得到我的投票.
Jos*_* D. 12
为什么不
std::stringstream::stringstream(std::string&&)存在?
这是由于std::stringstream内部缓冲区造成的rdbuf.
rdbuf,(类型std::string_buf),不支持非复制访问,根据提案中的动机,p0408r4:
... 没有 对内部缓冲区的非复制访问,
basic_stringbuf这使得至少从ostringstream低效率获得输出结果,因为总是进行复制
但是,已经有计划支持std::string在stringsteam的构造函数中移动:
Run Code Online (Sandbox Code Playgroud)explicit basic_ostringstream( basic_string<charT, traits, Allocator>&& str, ios_base::openmode which = ios_base::out, const Allocator& a = Allocator());
并移动 str()
Run Code Online (Sandbox Code Playgroud)template<class SAlloc = Allocator> void str(basic_string<charT, traits, SAlloc>&& s);