如果我有一个现有的非平凡变量,并且我想用新的内容重新分配它,我将在与赋值相同的行上声明,我应该使用移动语义吗?
我的问题来自以下情况:
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), {}));
}
我应该这样做,如果我不这样做,编译器是否会同样优化它,或者最好不要这样做?
答案 0 :(得分:9)
std::move
在那里是多余的。 move
的目的是将变量视为临时变量(更确切地说是右值),当它不是(或可能不是)时。如果它已经是右值,那么无论如何它肯定会被移动。
答案 1 :(得分:0)
我认为为该向量构造该对象的最合适的方法是使用emplace_back
也就是说你只是创建了那个对象,你不复制,你不移动,你只是创建那个事情是对的,它应该是第一位的。