【发布时间】:2017-03-04 17:54:40
【问题描述】:
请考虑这段代码:
#include <iostream>
#include <vector>
#include <utility>
std::vector<int> vecTest;
int main()
{
int someRval = 3;
vecTest.push_back(someRval);
vecTest.push_back(std::move(someRval));
return 0;
}
据我了解,someRval 的值将在第一次调用push_back() 时被复制到 vecTest,但在第二次调用时 someRval 会产生一个 x 值。我的问题是,是否会有任何性能优势,我的意思是int 可能不会,但在处理更大的对象时可能会有一些性能优势吗?
【问题讨论】:
-
转换为右值,而不是左值。对
ints 没有任何影响。对于移动构造函数比复制构造函数更有效的类(例如std::string) -
你问错问题了。如果您在概念上将对象的值移动到该向量中,则应该移动到该向量中(因此不再使用该对象)。正确地表达你的意图,性能将是它所需要的。
标签: c++ c++11 move-semantics