使用移动赋值运算符来赋值刚构造的未命名值
Assign just constructed unnamed value using move assignment operator
我想使用移动赋值将刚刚构建的未命名(我的意思是"在没有声明的情况下就地创建"。如果这不是正确的术语,请修复我。)具有大量元素的容器分配到另一个容器。
我应该这样写吗:
vector_used_before = std::move(vector<double>(100, 1.0));
或者简单地说:
vector_used_before = vector<double>(100, 1.0);
很明显,编译器在这种情况下总是可以使用移动赋值,因为我们不能再使用创建的对象了。但它究竟是如何运作的呢?
vector<double>(100, 1.0)
已经是一个右值,所以这两段代码做的事情完全相同——移动赋值。因此,正确的答案是"使用最短的一个":
vector_used_before = vector<double>(100, 1.0);
相关文章:
- 在未初始化的变量上使用复合赋值运算符(+=, ..)不是C++中的UB?
- 用于捕获未赋值的 r 值的编译器选项
- 复合赋值的左侧表达式是未初始化的值.计算出的值也将是垃圾
- Clang 无法在赋值运算符/复制构造函数中检测到未初始化的类成员
- R 值似乎为未命名的临时提供不完整的支持,还是我在这里遗漏了一些东西?
- 未隐式声明的移动赋值运算符
- 我们不能在未赋值的上下文中命名非静态成员函数是有原因的吗
- 未调用移动赋值运算符
- 初始化变量列表中的赋值顺序是否未定义
- 使用公共命名方法实现非公共赋值运算符
- 成员初始值设定项未命名非静态数据成员或基类
- 为什么在未赋值的操作数内进行包扩展会导致最后一个元素
- 值的赋值运算符未使用显式复制构造函数进行编译
- 在C++03中,在未赋值的上下文中使用表示非静态数据成员的id表达式有效吗
- 复制构造函数未被调用,无法理解赋值运算符的工作方式
- 未调用/继承子类中的移动赋值运算符
- 如果未定义赋值运算符,是否调用复制构造函数?
- 对未命名对象的RVO(返回值优化)是普遍保证的行为吗?
- 在c++中如何从另一个字符串赋值未初始化的字符串值
- 使用移动赋值运算符来赋值刚构造的未命名值