使用移动赋值运算符来赋值刚构造的未命名值

Assign just constructed unnamed value using move assignment operator

本文关键字:未命名 赋值 移动 赋值运算符      更新时间:2023-10-16

我想使用移动赋值将刚刚构建的未命名(我的意思是"在没有声明的情况下就地创建"。如果这不是正确的术语,请修复我。)具有大量元素的容器分配到另一个容器。

我应该这样写吗:

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);