我应该将临时移动到变量中吗?

时间:2014-11-12 03:53:45

标签: c++ c++11 move-semantics c++14

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

我的问题来自以下情况:

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), {}));
}

我应该这样做,如果我不这样做,编译器是否会同样优化它,或者最好不要这样做?

2 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:0)

我认为为该向量构造该对象的最合适的方法是使用emplace_back也就是说你只是创建了那个对象,你不复制,你不移动,你只是创建那个事情是对的,它应该是第一位的。

emplace_back