使用带有右值引用的push_back?
我有以下代码:
csvData.push_back(CsvDataSet(csvBlock));
Run Code Online (Sandbox Code Playgroud)
我应该这样做:
csvData.push_back(std::move(CsvDataSet(csvBlock)));
Run Code Online (Sandbox Code Playgroud)
这样我保存了一个复制操作.
假设CsvDataSet
是一个班级:不,你不应该.CsvDataSet(csvBlock)
已经是右值了.更确切地说,它是一个prvalue.
因此,在这两种情况下,void std::vector::push_back( T&& value );
都会被调用.
我认为在你的情况下你应该使用emplace_back()
.
“将一个新元素附加到容器的末尾。元素是就地构造的,即不执行复制或移动操作。使用提供给函数的完全相同的参数调用元素的构造函数。”
不确定,但我认为它等同于使用push_back(std::move(T()))
,但也许downvoter 纠正我,拜托。澄清结果应该是一样的,但是emplace
将参数转发给构造函数并在原地构造元素,同时push_back
调用move
构造函数,或者正常的然后移动对象。
编辑:如果downvoter与@ user3111311提出的推理同意下面我敦促阅读示例部分emplace_back()
。
归档时间: |
|
查看次数: |
3749 次 |
最近记录: |