c++标准库中接受右值引用的构造函数
Constructors taking rvalue reference in C++ standard library
虽然我认为c++标准库中的某些类应该具有接受非const右值引用的构造函数重载,但实际上并没有。示例包括stringstream
类家族和标准异常类。为什么它们没有一个接受std::string&&
的构造函数?这些类应该能够将string
参数移动到它们的内部存储中。我哪里错了?我只是对类的底层实现有一个错误的假设吗?
我猜异常类应该提供一个构造函数重载,在std::string&&
,分配一个新的std::string
的内部存储异常类很可能会导致另一个异常被抛出。
这是我的推测,但我认为没有包含它是因为它对典型的实现没有用处。将流的内容保存在一个连续的数组中没有任何好处,而将其安排得更像一个缓冲区链表的好处是,在写入流时不必进行复制,所以我认为预期的实现将无法利用构造函数。
stringstream
使用stringbuf
作为其内部存储器。stringbuf
不把string&&
作为它的参数。但是你可能会问为什么stringbuf
不这样做....
相关文章:
- 在类构造函数中传递对外部函数的引用
- 在 c++ 中将变量作为结构构造函数中的引用传递
- C++ 尝试在不存在的构造函数中引用已删除的函数(使用 rapidJson)
- 移动构造函数和右值引用
- 为什么我的运算符 + 重载尽管是通过引用传递的,但仍调用我的复制构造函数?
- 如何使用 swig 修改类构造函数以保留对其中一个构造函数参数的引用?
- 在引用初始化中使用已删除的复制构造函数进行复制初始化
- C++:右值引用构造函数和复制省略
- 当有右值构造函数可用时,为什么从右值调用类引用构造函数重载?
- 引用构造函数时链接失败
- 为什么调用转发引用构造函数而不是复制构造函数?
- 为什么使用已删除的右值引用构造函数?
- 对 std::Optional 的转发引用构造函数的约束
- 模板是否应该为不同类型的参数制作非 Rvalue 引用构造函数/赋值
- 我是否应该对非引用构造函数参数手动调用move
- 使用左值引用错误地调用了Rvalue引用构造函数
- C++未定义的引用构造函数错误
- 调用左值引用构造函数而不是右值引用构造函数
- C++引用构造函数语法
- 不能引用构造函数的地址