构造函数在C ++标准库中进行rvalue引用

时间:2015-09-19 01:31:29

标签: c++ c++11 c++-standard-library

虽然我认为C ++标准库中的某些类应该有一个构造函数重载,它接受一个非const rvalue引用,但它们实际上并不存在。示例包括stringstream类的族和标准异常类。为什么他们没有一个接纳std::string&&的构造函数?这些类应该能够将string参数移动到其内部存储。我哪里错了?我是否只是对类的底层实现有一个错误的假设?

我想异常类应该提供一个构造函数重载,它接受std::string&&,为异常类为内部存储分配新的std::string可能会导致抛出另一个异常。

2 个答案:

答案 0 :(得分:1)

我在猜测,但我想它不包括在内,因为它对典型的实现没有用。将流的内容保持在连续的数组中没有任何好处,并且优点是更像是单独链接的缓冲区列表,因此在写入流时不必进行复制,所以我想预期的实现不会能够利用构造函数。

答案 1 :(得分:1)

stringstream使用stringbuf作为其内部存储空间。 stringbuf并未将string&&作为其参数。但你可能会问为什么stringbuf没有这样做....