我应该将一个临时变量移到一个变量中吗

Should I move a temporary into a variable?

本文关键字:变量 一个 我应该      更新时间:2023-10-16

如果我有一个现有的非平凡变量,并且我想用我将在赋值的同一行声明的新内容来重新赋值,我应该使用移动语义吗?

我的问题来自以下场景:

std::vector<string> existing = { ... };
int main(int argc, char *argv[]){
    const char *bunch_of_strings = ... ;
    std::stringstream ss(bunch_of_string);
    existing = std::move(std::vector<std::string>(std::istream_iterator<std::string>(ss), {}));
}

我应该这样做吗?如果我不这样做,编译器会类似地优化它吗?还是最好不要这样做?

std::move在那里是多余的。move的目的是当变量不是(或可能不是)时,将其视为临时值(更准确地说,是右值)。如果它已经是一个右值,那么如果可能的话,它肯定会被移动。

我认为,为该向量构造该对象的最合适方法是使用emplace_back,也就是说,你只需在适当的位置创建该对象,不复制,不移动,只需在最初应该的位置创建正确的对象。

emplace_back

相关文章: