将push_back与右值引用一起使用
Using push_back with rvalue references?
将push_back与右值引用一起使用?
我有以下代码:
csvData.push_back(CsvDataSet(csvBlock));
我应该这样做吗:
csvData.push_back(std::move(CsvDataSet(csvBlock)));
这样我就保存了一个复制操作。
假设CsvDataSet
是一个类:不,你不应该。 CsvDataSet(csvBlock)
已经是一个右值。更准确地说,它是一个原则。
因此,在这两种情况下,都将调用void std::vector::push_back( T&& value );
。
我认为在您的情况下,您应该使用 emplace_back()
.
"将新元素附加到容器的末尾。元素是就地构造的,即不执行复制或移动操作。元素的构造函数是使用提供给函数的完全相同的参数调用的。
不确定,但我认为它等同于使用push_back(std::move(T()))
,但也许反对者纠正我,请。澄清结果应该是相同的,但emplace
将参数转发给构造函数并就地构造元素,而push_back
调用构造函数或普通构造函数move
然后移动对象。
编辑:如果反对者同意下面@user3111311提出的推理,我敦促阅读emplace_back()
中的示例部分。
相关文章:
- std::remove() 按预期处理文字,但不能与取消引用的迭代器一起工作
- 为什么引用不能与编译时函数一起使用?
- 与引用一起使用的列表,在用作成员时更改行为
- 我是否需要将 ref 与 make_pair 一起使用才能返回引用?
- 将shared_ptr与常量引用一起使用
- 是否可以将引用类型别名与指针运算符一起使用来声明对指针的引用?
- 当它们不与GCC和CMAKE一起使用时,如何解析未定义的引用
- 重值引用不是将类型和类别混合在一起吗?
- 使用C和C 一起使用函数错误的不确定引用
- 什么时候可以将"typename"与明确引用类型的标识符一起使用?
- 为什么引用和指针不能一起使用?
- 如何将初始值设定项与右值引用参数一起使用 // 为什么不能使用另一个 C 样式数组变量初始化 C 样式数组
- 尝试实现通过引用传递的向量以与二叉树一起使用,我错过了什么
- 将模板类与引用非类型模板参数一起使用时出现链接器错误
- 将push_back与右值引用一起使用
- 使用 Visual Studio 创建的静态库在与代码块一起使用时显示对 Myfunction 的未定义引用
- 如何使模板类型的推导与引用一起工作
- 如何将相互依赖的对象移动到一起并维护内部引用
- C++中的多态性不能与引用一起正常工作
- 如何将运算符=与引用一起使用