虽然我认为C ++标准库中的某些类应该有一个构造函数重载,它接受一个非const rvalue引用,但它们实际上并不存在。示例包括stringstream
类的族和标准异常类。为什么他们没有一个接纳std::string&&
的构造函数?这些类应该能够将string
参数移动到其内部存储。我哪里错了?我是否只是对类的底层实现有一个错误的假设?
我想异常类应该提供一个构造函数重载,它接受std::string&&
,为异常类为内部存储分配新的std::string
可能会导致抛出另一个异常。
答案 0 :(得分:1)
我在猜测,但我想它不包括在内,因为它对典型的实现没有用。将流的内容保持在连续的数组中没有任何好处,并且优点是更像是单独链接的缓冲区列表,因此在写入流时不必进行复制,所以我想预期的实现不会能够利用构造函数。
答案 1 :(得分:1)
stringstream
使用stringbuf
作为其内部存储空间。 stringbuf
并未将string&&
作为其参数。但你可能会问为什么stringbuf
没有这样做....