我应该将一个临时变量移到一个变量中吗
Should I move a temporary into a variable?
如果我有一个现有的非平凡变量,并且我想用我将在赋值的同一行声明的新内容来重新赋值,我应该使用移动语义吗?
我的问题来自以下场景:
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
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 用C++中的一个变量定义一个常量
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 如何从另一个文件继承私有成员变量和公共函数
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 全局变量 多读取器 一个写入器多线程安全?
- 如何声明一个可以在整个程序中使用的全局 2d 3d 4d .. 数组(堆版本)变量?
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 一个变量的输入值也会保存到另一个变量中
- 从另一个 cpp 文件更改结构内、映射键内的变量
- 在另一个函数 (c++) 中调用变量
- 将双精度变量设置为另一个变量的值
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 为什么从另一个构造函数内部调用C++构造函数不修改类变量?
- 如果我注释掉换行符,为什么'string'会成为一个不合格的变量
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- 我有一个类,它创建了另一个类的实例.如何将变量通过第一个类传递到第二个类的实例化中?
- C++使用cin给变量一个非整数的值
- 怎么可能有两个同名的变量——一个是全局变量,另一个是局部变量