为什么"std::stringstream::stringstream(std::string&&)"不存在?
Why doesn't `std::stringstream::stringstream(std::string&&)` exist?
我希望stringstream
有一个构造函数可以从string&&
窃取其初始内容。这种种间"移动构造函数"在STL中通常不存在吗?如果没有,为什么不呢?
有历史,这令人失望。 但也是一个看起来光明的未来。
当移动语义进入C++11时,它是巨大的,有争议的,压倒性的。 我希望能够将字符串移入和移出stringstream
。 然而,当时的政治要求内部商店不必是basic_string<charT>
。 例如,内部存储可以是vector
。 而且没有能力用分配器控制事物。 无论如何,在C++11时间框架内认识到了这一需求,但这只是一座太远的桥梁。
幸运的是,彼得·索默拉德(Peter Sommerlad(用P0408弥补了这一空缺。 此提案增加了您寻求的功能,希望为 C++20,但这还不确定。 它已成功通过LEWG,现在在LWG的办公桌上。 他们本月在拉珀斯维尔没有到达,纯粹是因为超负荷的日程安排。 我希望它将通过LWG和全体委员会的投票。 它肯定会得到我的投票。
为什么
std::stringstream::stringstream(std::string&&)
不存在?
这是由于std::stringstream
的内部缓冲区,rdbuf
.
rdbuf
(类型std::string_buf
( 不支持根据提案 p0408r4 中的动机进行非复制访问:
。没有对内部缓冲区的非复制访问
basic_stringbuf
至少使输出获得 导致ostringstream
效率低下,因为副本始终 䍬
但是,已经有一个计划来支持 stringsteam 的构造函数std::string
移动:
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);
相关文章:
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- std::stringstream 返回字符 *
- std::stringstream::flush() 应该做什么吗?
- 静态 std::stringstream 的叮当整警告
- 为什么"std::stringstream::stringstream(std::string&&)"不存在?
- 为什么 {fmt} 比 std::stringstream 慢?
- C++命令末尾的 std::stringstream 空格
- 返回 std::stringstream - 编译失败
- C++ std::stringstream 运算符<< vs (构造函数)
- 流从STD :: Stringstream带有空间的流
- 用std :: stringstream inline代替字符
- 为什么我无法从 std::stringstream 二进制流中获得全精度(双精度、浮点数)
- C STD :: Stringstream操作优化
- 为什么GCC不允许我创建"内联静态std::stringstream"?
- What value should `std::stringstream::fail()` return after r
- 使用Boost Karma替换STD :: stringstream double到STD :: String Conv
- 从 std::stringstream 读取uint8_t为数字类型
- 重置std :: stringstream格式标志
- 如何将“char *”深度复制到std::stringstream
- C++ std::stringstream >> std::string 仅存储第一个条目?