c++标准库中接受右值引用的构造函数

Constructors taking rvalue reference in C++ standard library

本文关键字:引用 构造函数 标准 c++      更新时间:2023-10-16

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

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

这是我的推测,但我认为没有包含它是因为它对典型的实现没有用处。将流的内容保存在一个连续的数组中没有任何好处,而将其安排得更像一个缓冲区链表的好处是,在写入流时不必进行复制,所以我认为预期的实现将无法利用构造函数。

stringstream使用stringbuf作为其内部存储器。stringbuf不把string&&作为它的参数。但是你可能会问为什么stringbuf不这样做....